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

时间:2009-09-05 18:36:00

标签: sql sql-server tsql

根据MSDN BOL(联机丛书)对SOME | ANY (Transact-SQL)的说明,

  

有些是等同的。

使用SOME |是有意义的任何使查询更具可读性的信息。

唯一的原因,为什么TSQL中有2个关键字,它们用于完全相同的目的?

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

5 个答案:

答案 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的情况。但似乎很可能。