TSQL - SOME | ANY他们为什么相同名称不同?(TSQL - SOME | AN

2019-07-05 00:31发布

根据MSDN BOL(联机丛书)上说明某些| ANY(的Transact-SQL) ,

SOME和ANY是等效的。

这有一定道理为使用某些| 任何使查询更具可读性。

但是 ,这是唯一的原因有2个关键字在TSQL,他们所服务的一模一样的目的是什么?

有没有为什么他们具有相同的功能的任何历史的原因?

Answer 1:

从ANSI-92 SQL标准 (搜索“一些”)。 另外这里,文本

<some> ::= SOME | ANY

我怀疑的原因是,SQL语言来自于70年代初,但没有标准直到1986年。该标准将采取现有的SQL方言的元素,所以我们有一些这方面的/任何异常。

这由布拉德·舒尔茨博客文章中解释了一些不同之处:“ ALL,ANY和SOME:三个臭皮匠 ”



Answer 2:

SOME和ANY是等效的。 ANY是ANSI语法。 为什么一些介绍,我就不知道了。 可能是因为可读性,但两者未来的两句话很容易理解。

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

虽然,SQL Server将在这两种情况下执行:

WHERE EXISTS(SELECT * FROM dbo.items WHERE price>5000)

这也很容易理解。



Answer 3:

“有,为什么他们具有相同的功能的任何历史的原因?”

我会回答的实际问题......在一开始这只是ALL和ANY。

ALL是全称量词,而任何本来应该永远是一个存在量词。 然而,在英国,任何经常用作全称量词为好。 “我可以击败任何的你”是不是“我能击败一些的你”的同义词。 这是在“我能打败你们”的事实的代名词。

与任何令人困惑,一些已经被引入作为任何与采用SQL-92标准的更可靠的代名词。 ANY本来是要保留的,而只是为了与以前的产品版本的向后兼容性。 但是,我们今天仍然有它。



Answer 4:

SOME和ANY是在SQL-92标准等效,因此,虽然它不回答你的问题指出这一点,但它表明,历史可以追溯到很长的路要走。



Answer 5:

请记住,一些数据库产品已经出现了将近三十年。 厂商如甲骨文,IBM和微软一直都纳入其中,但是后来被纳入了ANSI标准在他们的产品功能。

有时,这些功能已经被几家厂商自主开发的,因此无论是标准或供应商必须支持同义词关键字。 例如甲骨文有SELECT DISTINCT ANSI规定过不了多久SELECT UNIQUE 。 Oracle支持两种用法。

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



文章来源: TSQL - SOME | ANY why are they same with different names?