目录
1、条件查询where
针对查询结果,按照一定的条件进行筛选!!!
通过where指定一个条件,把查询到的每一行都带入到条件中,
- 看条件是真还是假,真->保留到临时表,假->舍弃
- 在SQL中 = 又变回“比较相等”(只在where子句中)
- 使用 = 来比较某个值和NULL的相等关系,结果还是NULL,NULL又会被当成false
- 所以就有了 <=> 针对NULL特殊处理
因为NULL和任何数据进行运算都是NULL,这里NULL<60结果还是NULL,当成了false,不打印。解决方法:加个条件or,带上NULL。
2、同一行的两个列进行比较
注意:where字句不能使用列的别名来比较
内部原理解释:mysql里执行查询操作时,先针对每行记录计算条件,并按条件筛选,满足条件的记录才会取出对应的列,并且计算里面的表达式(生成别名)——先where条件筛选再as total起别名 。
所以先开始where的时候还没有生成total,这个条件都不认识,那么计算机自然会报错
逻辑运算符AND
查询语文成绩大于80且数学成绩大于80的同学
逻辑运算符OR
查询语文成绩大于80或者数学成绩大于80的同学
技巧:条件中有and和or,先计算and再算or。但是一般不建议记优先级,最好的办法是加括号()
between...and...
between A and B ——> [A,B] 左右都是闭区间
查询数学成绩是30或者55或者66的同学
3、in
用in更方便
4、%
查询姓马的同学的成绩(开头第一个字是马)
%可以表示任意字符(0个也是),以马开头的name都可以被查出来
- 马%:以马开头的
- %马:以马结尾的
- %马%:无论开头还是结尾,有马就行
5、_下划线
_下划线,匹配任意一个字符
一个下划线就是一个字符
注意:模糊查询like对数据库来说开销还是比较大的
mysql支持的模糊匹配功能非常有限
实际开发中,可能会遇到更复杂的模糊匹配
可能会描述一些更复杂的规则,某某字符出现在什么位置范围,重复出现的次数。。。。
这就需要正则表达式来描述这种字符串的规则
正则表达式:使用一些特殊的规则,来描述一个字符串长啥样,那么查询或进行其他操作时,就可以按照这套规则来进行匹配。
解决方法:使用<=>和NULL比较;
is null 要求只能比较一个列是否为空,而<=>可以直接比较两个列,一行里有两列都是null也可以查询出来。
- 条件查询不仅仅是搭配select使用,update/delete也会搭配where子句,对应的条件用法也是完全相同的。
- 通过条件来对结果集合进行限制,以防止select * 的卡死
6、limit
限制查询结果的数量limit
直接在查询语句的末尾加上limit指定数字N,N表示这次查询最大结果的数量。
在数据库中,分页查询主要就是通过limit来实现的。
搭配offset就可以指定从第几条开始筛选了,(offset的值从0开始计算)