class09_高级过滤数据

高级过滤数据

使用通配符过滤数据

一种高级的数据过滤方法

使用通配符过滤数据:关键字:LIKE

例如:

如何取出所有姓陈的同学?

知道老师的身份证号,想取出70年代出生的所有老师

百分号%匹配 0~多个字符
下划线_ 匹配1个任意字符
方括号[]、[^] 匹配1个字符集中的字符

PS:基本所有数据库都支持百分号通配符和下划线通配符,但只有很少的数据库支持方括号通配符。

SELECT * from student where stu_name LIKE '刘%' ;//所有姓刘的同学
SELECT * from student where stu_name LIKE '刘_' ;//所有姓刘两字同学
SELECT * from student where stu_name LIKE '刘__' ;//所有姓刘三字同学
SELECT * from student where stu_name LIKE '%杰' ;//名字以杰结尾的同学
SELECT * from student where stu_name LIKE '周_杰' ;//名字是三个字,以杰结尾的同学
SELECT * from student where stu_name LIKE '周%杰' ;//名字开头是周,以杰结尾,中间0~无穷字的同学
注意:下面的写法mysql均不支持:
SELECT * from student where stu_id LIKE 'S200[678]' ;// 取出S2006、S2007、S2008的同学
SELECT * from student where stu_id LIKE 'S200[^678]' ;//取出除了S2006、S2007、S2008的同学

使用通配符的注意点:

  1. 不要过度使用通配符;【执行效率不高】

  2. 如果确实需要使用,也尽量不要把通配符用在匹配模块的开始处;

  3. 要特别注意通配符的位置,否则很有可能返回的结果与预期不一致;

 

组合WHERE子句

如何使用复杂条件筛选数据

使用逻辑操作符组合WHERE子句:

AND操作符满足所有条件
OR操作符 满足任一条件

例如:

取出所有姓陈同学:

SELECT * FROM student WHERE stu_name LIKE '陈%' AND gender = '男';

取出所有姓陈的同学或同学

SELECT * FROM student WHERE stu_name LIKE '陈%' OR gender = '男';

取出所有年龄大于15岁并且姓陈男性同学:

SELECT * from student where age > 15 and (stu_name LIKE '%陈' OR gender = '男'); 

注意:

  • 在sql语句中 ANDOR 优先级相同

  • AND、OR谁在前面先执行谁

  • 在条件比较多的时候选用合理的()来消除歧义

原文地址:https://www.cnblogs.com/77-is-here/p/12799449.html