1

集合操作是否有规定的执行顺序(例如,首先是 UNION,然后是 MINUS,然后是 INTERSECT),还是按照脚本和评估的顺序执行?

例如,假设我想要一个 customer_ids 的起始队列,然后删除一些,然后再添加一些。集合运算符是否会在此处执行为 Qry 1 减去 Qry 2 并合并 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'
4

3 回答 3

1

所有集合运算符具有相同的优先级。文件说_

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

于 2017-10-17T17:57:28.507 回答
1

好吧,不完全是“执行顺序”。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 规则指定的。

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

于 2017-10-17T18:13:45.210 回答
1

由于您没有指定 RDBMS,为了完整起见,我将添加 SQL Server。是操作的顺序:

  1. 括号中的表达式

  2. INTERSECT 运算符

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

于 2017-10-17T18:04:28.330 回答