使用通配符过滤数据
一种高级的数据过滤方法
使用通配符过滤数据:关键字: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的同学
使用通配符的注意点:
-
不要过度使用通配符;【执行效率不高】
-
如果确实需要使用,也尽量不要把通配符用在匹配模块的开始处;
-
要特别注意通配符的位置,否则很有可能返回的结果与预期不一致;
组合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语句中 AND 和 OR 优先级相同
-
AND、OR谁在前面先执行谁
-