亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

通過邏輯操作符過濾數據

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        | 小丽 |
+----------+------+
點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
Web前端工程師
手記
粉絲
1.4萬
獲贊與收藏
860

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消