总结一些从数据库表中提取子集的过滤方式
WHERE
样例
select * from student where id > 3;
where后面跟逻辑语句,筛选出符合条件的子集
WHERE子句操作符
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 在指定的两个值之间 |
样例
- 检查单个值:select name from student where name=‘Zs’; (注意mysql在执行匹配时默认不区分大小写)
- 不匹配检查: select id from class where id <> 2;
- 范围值检查:select name from commodity where price between 10 and 20; (返回价格∈[10,20]的商品名)
- 空值检查:select * from customer mark is null; (注意这里不能用=。null与0、空串、空格不同)
组合WHERE
and
通过and运算符可以连接多个过滤条件,过滤出满足所有条件的子集。
or
通过or运算符可以连接多个过滤条件,过滤出满足其中至少一个条件的子集。
计算次序
当然它们也可以互相组合,当两者结合时,总是先处理and操作符然后是or,当想改变次序时可以用()想优先计算的判断括起来。
样例
select prod_name from products where (vend_id = 1002 or vend_id = 1003) and prod_price >= 10;
IN操作符
IN操作符用来指定条件范围,范围中列举的每个条件都可以进行匹配,列举条件用逗号分隔。
样例
select * from student where id in (1001,1003,1007) order by name;
运行结果会列举出student中存在的id为1001、1003和1007的数
说明
in可以完成与or相同的功能,in相对于or的优点:
- 直观
- 计算次序更容易管理
- in操作符一般比or操作符清单执行更快
- 可以包含其它select语句
NOT操作符
not操作符只有一个功能,那就是否定它之后所跟的任何条件。
样例
select * from student id not in (1002,1007);
not支持对in、between和exists取反。
通配符
当对搜索的值不明确时,适合使用通配符来进行模糊匹配。
通配符:用来匹配值的一部分的特殊字符。通配符本身实际是SQL的where子句中有特殊含义的字符。
%通配符
用来匹配0~n个任意字符。
样例:select name from student where name like ‘张%’; 用于匹配name以张开头的学生。
_通配符
用途与%类似,但下划线通配符只匹配单个任意字符。
样例:select name from student where name like ‘张_’; 匹配姓名为两个字且姓张的学生。
使用通配符的技巧
首先,通配符搜索的处理一般要花费比前面其它搜索更多的时间。所以,如果其它搜索能达到目的就尽量不要用通配符。如果确定要用通配符也尽量不要把它放在搜索模式开始处,因为把通配符放在开始处搜索是最慢的。还有要注意通配符摆放的位置不要放错。