继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

通过逻辑操作符过滤数据

为爱心太软
关注TA
已关注
手记 170
粉丝 1.4万
获赞 860

AND操作符

如果要通过不止一个列进行过滤数据,可以使用AND操作符。

Students表:

+----+----------+------+--------+-------+
| id | class_id | name | gender | score |
+----+----------+------+--------+-------+
| 1  | 1        | 小明 | M      | 90    |
| 2  | 1        | 小红 | F      | 95    |
| 3  | 1        | 小军 | M      | 88    |
| 4  | 1        | 小米 | F      | 73    |
| 5  | 2        | 小白 | F      | 81    |
| 6  | 2        | 小兵 | M      | 55    |
| 7  | 2        | 小林 | M      | 85    |
| 8  | 3        | 小新 | F      | 91    |
| 9  | 3        | 小王 | M      | 89    |
| 10 | 3        | 小丽 | F      | 88    |
+----+----------+------+--------+-------+
SELECT name,gender,score FROM Students WHERE score>80 AND gender='M';

+------+--------+-------+
| name | gender | score |
+------+--------+-------+
| 小明 | M      | 90    |
| 小军 | M      | 88    |
| 小林 | M      | 85    |
| 小王 | M      | 89    |
+------+--------+-------+

这条SQL语句检索出score大于80且gender等于M的学生,返回的数据必须满足用AND关键字联结的两个条件。
如果想增加多个过滤条件,每个条件间都要使用AND关键字。

OR操作符

与AND操作符相反,满足任一条件就可以被检索出来。
实际上,在第一个条件满足时,不管第二个条件是否满足,相应的行都将被检索出来。

SELECT name,gender,score FROM Students WHERE score >= 90 OR gender = 'F';

+------+--------+-------+
| name | gender | score |
+------+--------+-------+
| 小明 | M      | 90    |
| 小红 | F      | 95    |
| 小米 | F      | 73    |
| 小白 | F      | 81    |
| 小新 | F      | 91    |
| 小丽 | F      | 88    |
+------+--------+-------+

求值顺序

WHERE子句是可以包含任意数目的AND和OR操作符,两者结合就会带来求值顺序的问题。
假如需要检索出class_id为1或3,且score大于等于90的学生:

SELECT class_id,name,gender,score FROM Students WHERE class_id = 1 OR class_id = 3 AND score >= 90;

+----------+------+--------+-------+
| class_id | name | gender | score |
+----------+------+--------+-------+
| 1        | 小明 | M      | 90    |
| 1        | 小红 | F      | 95    |
| 1        | 小军 | M      | 88    |
| 1        | 小米 | F      | 73    |
| 3        | 小新 | F      | 91    |
+----------+------+--------+-------+

由于AND比OR操作符拥有更高的优先级,因此返回的数据并未达到预期。
此问题的解决方法是通过圆括号明确求值顺序:

SELECT class_id,name,gender,score FROM Students WHERE (class_id = 1 OR class_id = 3) AND score >= 90;

+----------+------+--------+-------+
| class_id | name | gender | score |
+----------+------+--------+-------+
| 1        | 小明 | M      | 90    |
| 1        | 小红 | F      | 95    |
| 3        | 小新 | F      | 91    |
+----------+------+--------+-------+

IN操作符

IN操作符用来指定条件范围,满足范围内条件的数据都将被检索出来。
IN操作符后跟由逗号分隔的合法值,这些值必须括在圆括号中。

SELECT class_id,name FROM Students WHERE class_id IN (1,3);

+----------+------+
| class_id | name |
+----------+------+
| 1        | 小明 |
| 1        | 小红 |
| 1        | 小军 |
| 1        | 小米 |
| 3        | 小新 |
| 3        | 小王 |
| 3        | 小丽 |
+----------+------+

NOT操作符

NOT操作符有且只有一个功能,那就是否定其后跟随的任何条件。
NOT总是与其他操作符一起使用。

SELECT class_id,name FROM Students WHERE NOT class_id = 2;

+----------+------+
| class_id | name |
+----------+------+
| 1        | 小明 |
| 1        | 小红 |
| 1        | 小军 |
| 1        | 小米 |
| 3        | 小新 |
| 3        | 小王 |
| 3        | 小丽 |
+----------+------+
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP