MySQL數據庫 in、all、any、some的區別
理解 in\all\any\some
- in:范圍內存在,就返回true。
in(a,b,c)
可以理解成 a or b or c
。
- 也可以這么理解:
in
的作用與 =any
的作用相同
all
:所有,必須和子查詢返回的結果完全一致,才會返回true
- 用法:
ALL(select column from table [where 條件])
- all中的子查詢結果可以理解成
...and...and...and...
- 如果括號中的結果是空表,則結果都為true
- 如果子查詢中有null值,那么最終結果都是null
any
:任一,與子查詢返回的結果中任一一個結果相同,就返回true。
- 用法:
any(select column from table [where 條件])
- 子查詢的結果可以理解成
...or...or...
- 如果子查詢存在空表或null的情況, 那么結果都是null
- some: 是any的別名,不常用
all\any\的使用
# in
SELECT * FROM score WHERE degree IN(86,88,90);
# all
SELECT * FROM score WHERE degree > ALL(86,88,90); #錯誤語句
SELECT * FROM score WHERE degree > ALL(SELECT degree FROM score WHERE degree BETWEEN 70 AND 90);
# any
SELECT * FROM score WHERE degree > ANY(86,88,90); # 錯誤語句
SELECT * FROM score WHERE degree = ANY(SELECT degree FROM score WHERE degree BETWEEN 70 AND 90);
SELECT * FROM score WHERE degree >= ANY(SELECT degree FROM score WHERE degree BETWEEN 70 AND 90);
- 從上邊的語句可以看出,in中可以直接寫數值,但是all和any不能直接寫數值
- all和any語句中要放入查詢一個列的子查詢語句,子查詢語句的類型要和作比較的條件類型一致
- all、any、some必須和比較運算符結合使用,不能單獨使用