2009-09-05 62 views

回答

11

ANSI-92 SQL Standard(搜索「某些」)。 Also here, text

<some> ::= SOME | ANY 

我懷疑的原因是,SQL語言來自於70年代初,但沒有標準直到1986年。該標準將採取現有的SQL方言的元素,所以我們有一些這方面的/任何異常。

這由布拉德·舒爾茨博客文章中解釋了一些不同之處:「ALL, ANY, and SOME: The Three Stooges

+4

@gbn我真的很喜歡「所有,任何和某些:三個傀儡」文章。謝謝。 – Sung

+0

「ANSI-92 SQL標準」鏈接已死亡 – Ako

5

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) 

這也很容易理解。

+0

嗨,Niikola:「爲什麼介紹一些,我不知道」。這就是這個問題的重點。 – Sung

+0

我試圖找到這些運算符存在的原因。正如你的例子,我發現下面的查詢更具可讀性。 – regeter

2

SOME和ANY在SQL-92標準中是等價的,所以雖然它沒有回答你的問題,但它確實表明歷史可以追溯到很長的一段時間。

2

記住一些數據庫產品已經出現了將近三十年。 Oracle,IBM和Microsoft等供應商一直在其產品中包含隨後被納入ANSI標準的功能。

有時這些功能是由多個供應商獨立開發的,因此標準或供應商必須支持關鍵字的同義詞。例如,在ANSI指定SELECT UNIQUE之前,Oracle早已有SELECT DISTINCT。 Oracle支持這兩種用法。

我不知道類似的情況適用於SOME和ANY的情況。但似乎可能。

3

「有什麼歷史的原因,他們爲什麼有相同的功能?」

我會回答真正的問題......在開始時,它只是所有和任何。

ALL是一個通用量詞,而ANY應該始終是一個存在量詞。但是,在英語中,ANY也經常用作通用量詞。「我可以戰勝任何一個人」並不是「我能擊敗你們中的一些人」的同義詞。它實際上是「我可以擊敗你們所有人」的同義詞。

隨着ANY的混淆,SOME作爲ANY的一個更可靠的同義詞被採用,並採用了SQL-92標準。任何應該保留一段時間,只是爲了與以前的產品版本向後兼容。但我們今天仍然有。

+0

語義,但我會說在你的例子中,「any」與「all」仍然很不相同:「**你的任何**」最有可能意味着「任何一個**(一次)**「,_not_」全部**(一次)**「。無論如何,因爲我贊同這個觀點,所以無論如何都是不明確的,特別是對於那些不像我那樣過度分析的人。 :) – criptych

相關問題