TSQL - 一些| 他们为什么和不同的名字一样?

dan*_*die 20 sql t-sql sql-server

根据MSDN BOL(联机丛书)对SOME的描述 任何(Transact-SQL),

有些和任何东西是等价的.

使用SOME |确实有意义 任何使查询更具可读性的方法.

但这是为什么在TSQL中有2个关键字,它们服务于完全相同的目的的唯一原因是什么?

是否有任何历史原因导致它们具有相同的功能?

gbn*_*gbn 14

来自ANSI-92 SQL标准(搜索"SOME").也在这里,文字

<some> ::= SOME | ANY
Run Code Online (Sandbox Code Playgroud)

我怀疑原因是SQL语言来自20世纪70年代早期,但直到1986年才有标准.该标准将采用现有SQL方言的元素,因此我们有一些/任何异常.

Brad Schulz撰写的这篇博客文章解释了一些差异:" 所有,任何和某些:三个傀儡 "

  • @gbn我非常喜欢"ALL,ANY,SOME:The Three Stooges"一文.谢谢. (4认同)
  • “ANSI-92 SQL 标准”链接已失效 (2认同)

Nii*_*ola 5

有些和任何东西是等价的.任何是ANSI语法.我不知道为什么要介绍SOME.可能是因为可读性,但接下来的两个句子都很容易理解.

WHERE 5000 < ANY(SELECT Price FROM dbo.items)
WHERE 5000 < SOME(SELECT Price FROM dbo.items)
Run Code Online (Sandbox Code Playgroud)

虽然,SQL服务器在两种情况下都会执行:

WHERE EXISTS(SELECT * FROM dbo.items WHERE price>5000)
Run Code Online (Sandbox Code Playgroud)

这也很容易理解.


Cri*_* S. 5

“它们具有相同的功能有什么历史原因吗?”

我会回答实际问题......一开始它只是所有和任何。

ALL 是一个全称量词,而 ANY 应该总是一个存在量词。但是,在英语中,ANY 也经常用作全称量词。“我可以击败你们中的任何一个”不是“我可以击败你们中的一些人”的同义词。它实际上是“我可以击败你们所有人”的同义词。

由于 ANY 令人困惑,随着 SQL-92 标准的采用,SOME 被引入为 ANY 的更可靠的同义词。ANY 应该保留一段时间,只是为了与以前的产品版本向后兼容。但我们今天仍然拥有它。