TSQL-SOME | ANY为什么它们名称不同却相同?

TSQL-SOME | ANY为什么它们名称不同却相同?,sql,sql-server,tsql,Sql,Sql Server,Tsql,根据MSDN BOL(在线图书)的描述 有些和任何是等价的 使用SOME | ANY使查询更具可读性是有意义的 但是这就是为什么TSQL中有两个关键字具有完全相同的用途的唯一原因吗 它们具有相同的功能有什么历史原因吗?一些和任何部分都是等效的。任何是ANSI语法。为什么会有人介绍,我不知道。可能是因为可读性,但接下来的两句话都很容易理解 WHERE 5000 < ANY(SELECT Price FROM dbo.items) WHERE 5000 < SOME(SELECT Pri

根据MSDN BOL(在线图书)的描述


有些和任何是等价的

使用SOME | ANY使查询更具可读性是有意义的

但是这就是为什么TSQL中有两个关键字具有完全相同的用途的唯一原因吗


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

一些和任何部分都是等效的。任何是ANSI语法。为什么会有人介绍,我不知道。可能是因为可读性,但接下来的两句话都很容易理解

WHERE 5000 < ANY(SELECT Price FROM dbo.items)
WHERE 5000 < SOME(SELECT Price FROM dbo.items)

这也很容易理解。

一些和任何在SQL-92标准中是等效的,因此,虽然指出这一点并不能回答您的问题,但它确实表明历史可以追溯到很久以前。

从(搜索“一些”)

WHERE 5000 < ANY(SELECT Price FROM dbo.items)
WHERE 5000 < SOME(SELECT Price FROM dbo.items)
::=SOME | ANY
我怀疑原因是SQL语言起源于20世纪70年代初,但直到1986年才有标准。该标准将采用现有SQL方言的元素,因此我们有一些/任何异常


布拉德·舒尔茨(Brad Schulz)的这篇博客文章解释了一些差异:“

记住,一些数据库产品已经存在了近三十年。Oracle、IBM和Microsoft等供应商始终在其产品中包含功能,这些功能随后被纳入ANSI标准

有时,这些特性是由多家供应商独立开发的,因此标准或供应商必须支持关键字的同义词。例如,早在ANSI指定
selectunique
之前,Oracle就有了
selectdistinct
。Oracle支持这两种用法

我不知道类似的情况是否适用于某些和任何情况。但这似乎是有可能的。

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

我会回答实际的问题。。。一开始,一切都很顺利

ALL是一个通用量词,而ANY则一直被认为是一个存在量词。然而,在英语中,ANY也经常被用作通用量词。“我能打败你们中的任何一个人”不是“我能打败你们中的一些人”的同义词。事实上,这是“我能打败你们所有人”的同义词


随着SQL-92标准的采用,有些已经被引入,作为更可靠的同义词。任何版本都应该保留一段时间,只是为了与以前的产品版本向后兼容。但我们今天仍然有它。

嗨,Niikola:“我不知道为什么会引入一些。”。这就是这个问题的重点。我试图找到这些操作符存在的原因。正如您的示例所示,我发现下面的查询更具可读性。@gbn我真的很喜欢“所有、任何和一些:三个臭皮匠”这篇文章。谢谢。'ANSI-92 SQL Standard'链接是死语义,但我要说的是,在您的示例中,“any”与“all”仍然有很大区别:“any of you”很可能是指“any[one]of you(一次)”,而不是“all of you(一次)”。无论如何,我都投了赞成票,因为我同意可能会有歧义,特别是对那些不像我那样过度分析的人来说@Nearoo——我的最后一段提到了为什么历史上混乱的ANY被一些所取代。
<some> ::= SOME | ANY