如何理解Sql語言中ANY的用法?
07-07
《SQL完全手冊》書中(p155),作者在解釋「ANY"的用法中提到:
where x &< any (select y ....)不能讀成where x is less than any select y ......而該讀成where,for some y, x is less than y .......
不能理解之間的本質區別。請大神予以解釋,謝謝。其列出的例句是:列出銷售人員中不管理銷售點的所有人員的名字和年齡select name,agefrom salesreps
錯誤的篩選字句為where empl_num &<&> any(select mgr from offices)正確的篩選子句為where not (emp_num=any(select mgr from offices))如何分析這兩條子句?
英文中的 any 多表示任意一個的意思,也就是說,如果是 x is less then any (y value in the y set),那麼含義其實是 x 比 y 值集合中的『每一個』 y 值都要小。但在 SQL 中,x &< any ( select y from yset ) 在 x 比 y 集合中的『某一個』(也就是隨便哪個)小的條件下就為 true 了。
確實很容易糊塗,我上課的時候會專門說明,然並卵,大部分人還是不明白(其實是英語不過關)。
所以現在推薦在 SQL 中使用 SOME 關鍵字替代 ANY 關鍵字。這兩個關鍵字是完全等效的,但是用 SOME 在自然語言的含義上沒有歧義。推薦閱讀:
※演講實錄:「分散式資料庫海量數據存儲和實時查詢實現與應用」
※【87資料庫】獨家:SteamVR月度報告(2017年2月)
※學習SQL【3】-查詢基礎
※MySQL索引實現
※學習SQL【4】-聚合與排序