在這回中要介紹我很少很少很少用到的any與all用法。
因為大部分搜尋條件都能靠前面介紹的那些組合度過了,並且更直覺。
ANY
用於子查詢
任意,一個條件符合就返回true
1 | SELECT column_name(s) |
ALL
用於子查詢
所有,全部條件滿足才返回true
在select、having、where都可能用到
1 | SELECT column_name(s) |
差異比較
使用 > 比較運算子來作例子,>ALL 代表大於每個數值;換句話說,就是大於最大值。例如, >ALL (1, 2, 3) 代表大於 3。>ANY 代表至少大於一個數值,也就是說大於最小值。因此 >ANY (1, 2, 3) 代表大於 1。
實際演練
還是一樣,先放上資料表:
*因為這次範例太難用原本訂單的表,於是建立一個測試的表
實作:在test表中比較類型為1數值大於所有類型為2的數值結果。
1 | select * from test where type = '1' and number > all (select number from test where type = '2') |
結果:
1的內容:[1,3,4,8]
2的內容:[2,5,4]
而以上方條件all等於找最大值,即number > 5 的結果。
實作:在test表中比較類型為1數值至少大於一個類型2數值的結果。
1 | select * from test where type = '1' and number > any (select number from test where type = '2') |
結果:
1的內容:[1,3,4,8]
2的內容:[2,5,4]
而以上方條件any,等於找最小值,即number > 2 的結果。
總結
用到機會連要擠出範例都很難@@…
之前的範例都能用原本建的資料表示範,而這回測試any、all時發現除非改動表的設計,否則要做出好的實驗數據太不容易了。
總之,all、any就只要求看懂就好。
參考資料
http://www.blueshop.com.tw/board/FUM20041006152735ZFS/BRD200309251806228LO.html
https://blog.csdn.net/xianglingchuan/article/details/51737330