根据MSDN BOL(联机丛书)对SOME | ANY (Transact-SQL)的说明,
有些是等同的。
使用SOME |是有意义的任何使查询更具可读性的信息。
但 是唯一的原因,为什么TSQL中有2个关键字,它们用于完全相同的目的?
是否有任何历史原因导致它们具有相同的功能?
答案 0 :(得分:14)
来自ANSI-92 SQL Standard(搜索“SOME”)。 Also here, text
<some> ::= SOME | ANY
我怀疑原因是SQL语言来自20世纪70年代早期,但直到1986年才有标准。该标准将采用现有SQL方言的元素,因此我们有一些/任何异常。
Brad Schulz撰写的这篇博客文章解释了一些差异:“ALL, ANY, and SOME: The Three Stooges”
答案 1 :(得分:5)
有些是等同的。任何是ANSI语法。我不知道为什么要介绍SOME。可能是因为可读性,但接下来的两个句子都很容易理解。
WHERE 5000 < ANY(SELECT Price FROM dbo.items)
WHERE 5000 < SOME(SELECT Price FROM dbo.items)
虽然,SQL服务器在两种情况下都会执行:
WHERE EXISTS(SELECT * FROM dbo.items WHERE price>5000)
这也很容易理解。
答案 2 :(得分:3)
“他们有相同功能的历史原因吗?”
我会回答实际的问题......一开始它只是ALL和ANY。
ALL是一个通用的量词,而任何人都应该永远是一个存在量词。但是,在英语中,ANY也经常被用作通用量词。 “我能击败你们任何人”并不是“我能击败你们中的某些人”的同义词。它实际上是“我可以击败所有人”的同义词。
由于任何令人困惑的事情,因为采用了SQL-92标准,SOME已成为ANY更可靠的同义词。为了与以前的产品版本向后兼容,任何一段时间都应保留一段时间。但我们今天仍然拥有它。
答案 3 :(得分:2)
在SQL-92标准中,有些和ANY是等价的,所以虽然它没有回答你的问题,但它确实表明历史可以追溯到很长一段时间。
答案 4 :(得分:2)
请记住,一些数据库产品已存在近三十年。 Oracle,IBM和Microsoft等供应商一直在其产品中包含功能,这些功能随后已纳入ANSI标准。
有时这些功能是由多个供应商独立开发的,因此标准或供应商必须支持关键字的同义词。例如,在ANSI指定SELECT DISTINCT
之前,Oracle已经SELECT UNIQUE
了。 Oracle支持这两种用法。
我不知道类似的情况是否适用于SOME和ANY的情况。但似乎很可能。