做“设置操作'有规定的执行顺序,还是按评估顺序执行?

时间:2017-10-17 17:51:05

标签: sql operator-precedence set-operations

集合操作是否具有规定的执行顺序(例如,第一个UNION,然后是MINUS,然后是INTERSECT),还是按照它们编写和评估的顺序执行?

例如,让我们说我想要一个customer_ids的起始队列,然后删除一些,然后添加一些。这里的集合运算符是否会执行Qry 1减去Qry 2 union Qry 3?< / p>

select cust_id from tbl A
MINUS
select cust_id  from tbl B where field = 'abc'
UNION
select cust_id from tbl A where field = 'xyz'

3 个答案:

答案 0 :(得分:1)

所有集合运算符具有相同的优先级。 documentation

  

如果SQL语句包含多个集合运算符,则Oracle数据库将从左到右对它们进行求值,除非括号明确指定另一个顺序。

答案 1 :(得分:0)

由于您没有指定RDBMS,我将添加SQL Server以确保完整性。 This是操作的顺序:

  1. 括号中的表达式

  2. INTERSECT运营商

  3. 除了(相当于Oracle MINUS)和UNION根据它们在表达式中的位置从左到右进行评估

答案 2 :(得分:0)

嗯,不完全是“执行顺序”。 SQL查询表示结果集。  它们既未指定正在运行的操作,也未指定执行顺序。

也就是说,设置操作有一个优先顺序。因此,您的查询将被解释为:

(select cust_id from tbl A
 MINUS
 select cust_id  from tbl B where field = 'abc'
)
UNION
select cust_id from tbl A where field = 'xyz'

这是由 - 设置操作的ANSI规则 - 或更准确地说,解释 - 指定的。

仅仅因为查询是解释这种方式并不意味着它以这种方式执行