2017-10-17 251 views
0

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

例如,假设我想要有一个customer_ids的开始队列,然后删除一些,然后再添加一些。设置的运算符是否会在此执行为Qry 1 minus Qry 2 union Qry 3?

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' 

回答

1

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

如果一个SQL语句包含多个集合运算符,那么Oracle数据库会从左到右评估它们,除非括号显式指定另一个顺序。

0

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

  1. 圆括号中的表达式

  2. 相交操作者

  3. 除非(甲骨文MINUS的等同物)和UNION评价从左至右基于它们的位置表达式

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规则中设定的操作指定的。

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