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撰写的这篇博客文章解释了一些差异:" 所有,任何和某些:三个傀儡 "
有些和任何东西是等价的.任何是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)
这也很容易理解.
“它们具有相同的功能有什么历史原因吗?”
我会回答实际问题......一开始它只是所有和任何。
ALL 是一个全称量词,而 ANY 应该总是一个存在量词。但是,在英语中,ANY 也经常用作全称量词。“我可以击败你们中的任何一个”不是“我可以击败你们中的一些人”的同义词。它实际上是“我可以击败你们所有人”的同义词。
由于 ANY 令人困惑,随着 SQL-92 标准的采用,SOME 被引入为 ANY 的更可靠的同义词。ANY 应该保留一段时间,只是为了与以前的产品版本向后兼容。但我们今天仍然拥有它。