集合操作是否具有规定的执行顺序(例如,第一个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'
答案 0 :(得分:1)
所有集合运算符具有相同的优先级。 documentation说
如果SQL语句包含多个集合运算符,则Oracle数据库将从左到右对它们进行求值,除非括号明确指定另一个顺序。
答案 1 :(得分:0)
由于您没有指定RDBMS,我将添加SQL Server以确保完整性。 This是操作的顺序:
括号中的表达式
INTERSECT运营商
除了(相当于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规则 - 或更准确地说,解释 - 指定的。
仅仅因为查询是解释这种方式并不意味着它以这种方式执行。