总结一些从数据库表中提取子集的过滤方式

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必知必会》

最后修改:2020 年 07 月 30 日
如果觉得我的文章对你有用,请随意赞赏