標籤:

如何理解Sql語言中ANY的用法?

《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,age

from 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】-聚合與排序

TAG:資料庫 | SQL |