gpt4 book ai didi

sql - 与 UNION 相比,INTERSECT 的优先级是否更高?

转载 作者:行者123 更新时间:2023-12-02 05:39:57 25 4
gpt4 key购买 nike

如果我们考虑三个单列表,每个列表有两行:A = (1, 2)、B = (2, 3)、C = (3, 4)。然后,如果我们尝试使用括号将 UNIONINTERSECT 结合在一起,结果非常一致:

  • (select * from a union select * from b) intersect select * from c -> 3
  • 从并集选择 *(从 b 中选择 * 相交从 c 中选择 *) -> 1, 2, 3

但是简单明了又如何呢...

  • 从并集选择*从b相交选择*从c

我已经在几个数据库( SQL Fiddle )上进行了尝试,根据经验得到的是:

  • 在某个角落,Oracle、PostgreSQL 和 H2 认为 INTERSECT 与 UNION 具有相同的优先级(因此结果为 3)。
  • 然后,在另一个角落是 DB2、SQL Server、MariaDB、Apache Derby 和 HyperSQL,它们认为 INTERSECT 的优先级高于 UNION(因此结果为 1, 2, 3)。
  • MySQL 和 Sybase ASE 不参与其中,因为它们根本不实现 INTERSECT。

你们知道这方面有没有官方定义吗?我浏览了 SQL-92 规范,但找不到有关该主题的任何内容。

最佳答案

Oracle 在其 documentation 中有此解释性说明:

To comply with emerging SQL standards, a future release of Oracle will give the INTERSECT operator greater precedence than the other set operators. Therefore, you should use parentheses to specify order of evaluation in queries that use the INTERSECT operator with other set operators.

所以,Oracle至少认为平等优先级是不符合标准的。

请注意:我经常发现该标准是如此难以理解,以至于像这样的提示比尝试破译实际文本更简单。

关于sql - 与 UNION 相比,INTERSECT 的优先级是否更高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56224171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com