总结一些从数据库表中提取子集的过滤方式
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 '张_'; 匹配姓名为两个字且姓张的学生。 使用通配符的技巧 首先,通配符搜索的处理一般要花费比前面其它搜索更多的时间。所以,如果其它搜索能达到目的就尽量不要用通配符。如果确定要用通配符也尽量不要把它放在搜索模式开始处,因为把通配符放在开始处搜索是最慢的。还有要注意通配符摆放的位置不要放错。 参阅书籍 《MySQL必知必会》