根據MSDN BOL(聯機叢書)上SOME | ANY (Transact-SQL)描述,TSQL - 某些|任何爲什麼他們與不同的名字相同?
SOME和ANY是等效的。
使用SOME |任何使查詢更具可讀性。
但是,只有之所以有2個關鍵字在TSQL,他們所服務的一模一樣的目的是什麼?
他們有什麼歷史的原因,他們有相同的功能?
根據MSDN BOL(聯機叢書)上SOME | ANY (Transact-SQL)描述,TSQL - 某些|任何爲什麼他們與不同的名字相同?
SOME和ANY是等效的。
使用SOME |任何使查詢更具可讀性。
但是,只有之所以有2個關鍵字在TSQL,他們所服務的一模一樣的目的是什麼?
他們有什麼歷史的原因,他們有相同的功能?
從ANSI-92 SQL Standard(搜索「某些」)。 Also here, text
<some> ::= SOME | ANY
我懷疑的原因是,SQL語言來自於70年代初,但沒有標準直到1986年。該標準將採取現有的SQL方言的元素,所以我們有一些這方面的/任何異常。
這由布拉德·舒爾茨博客文章中解釋了一些不同之處:「ALL, ANY, and SOME: The Three Stooges」
SOME和ANY是等價的。 ANY是ANSI語法。爲什麼介紹一些,我不知道。可能是因爲可讀性,但下兩句話都很容易理解。
WHERE 5000 < ANY(SELECT Price FROM dbo.items)
WHERE 5000 < SOME(SELECT Price FROM dbo.items)
雖然,SQL Server將在這兩種情況下執行:
WHERE EXISTS(SELECT * FROM dbo.items WHERE price>5000)
這也很容易理解。
SOME和ANY在SQL-92標準中是等價的,所以雖然它沒有回答你的問題,但它確實表明歷史可以追溯到很長的一段時間。
記住一些數據庫產品已經出現了將近三十年。 Oracle,IBM和Microsoft等供應商一直在其產品中包含隨後被納入ANSI標準的功能。
有時這些功能是由多個供應商獨立開發的,因此標準或供應商必須支持關鍵字的同義詞。例如,在ANSI指定SELECT UNIQUE
之前,Oracle早已有SELECT DISTINCT
。 Oracle支持這兩種用法。
我不知道類似的情況適用於SOME和ANY的情況。但似乎可能。
「有什麼歷史的原因,他們爲什麼有相同的功能?」
我會回答真正的問題......在開始時,它只是所有和任何。
ALL是一個通用量詞,而ANY應該始終是一個存在量詞。但是,在英語中,ANY也經常用作通用量詞。「我可以戰勝任何一個人」並不是「我能擊敗你們中的一些人」的同義詞。它實際上是「我可以擊敗你們所有人」的同義詞。
隨着ANY的混淆,SOME作爲ANY的一個更可靠的同義詞被採用,並採用了SQL-92標準。任何應該保留一段時間,只是爲了與以前的產品版本向後兼容。但我們今天仍然有。
語義,但我會說在你的例子中,「any」與「all」仍然很不相同:「**你的任何**」最有可能意味着「任何一個**(一次)**「,_not_」全部**(一次)**「。無論如何,因爲我贊同這個觀點,所以無論如何都是不明確的,特別是對於那些不像我那樣過度分析的人。 :) – criptych
@gbn我真的很喜歡「所有,任何和某些:三個傀儡」文章。謝謝。 – Sung
「ANSI-92 SQL標準」鏈接已死亡 – Ako