'set operations' 是有规定的执行顺序,还是按求值顺序执行?
Do 'set operations' have an prescribed order of execution, or do they execute in order of evaluation?
集合运算是否有规定的执行顺序(例如先 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'
所有集合运算符都具有相同的优先级。 documentation 表示
If a SQL statement contains multiple set operators, then Oracle Database evaluates them from the left to right unless parentheses explicitly specify another order.
由于您没有指定 RDBMS,为了完整性,我将添加 SQL 服务器。 This是运算顺序:
括号内的表达式
INTERSECT 运算符
EXCEPT(相当于 Oracle MINUS)和 UNION 根据它们在表达式中的位置从左到右求值
嗯,不完全是 "order of execution"。 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 规则解释的。
仅仅因为查询是这样解释并不意味着它是这样执行。
集合运算是否有规定的执行顺序(例如先 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'
所有集合运算符都具有相同的优先级。 documentation 表示
If a SQL statement contains multiple set operators, then Oracle Database evaluates them from the left to right unless parentheses explicitly specify another order.
由于您没有指定 RDBMS,为了完整性,我将添加 SQL 服务器。 This是运算顺序:
括号内的表达式
INTERSECT 运算符
EXCEPT(相当于 Oracle MINUS)和 UNION 根据它们在表达式中的位置从左到右求值
嗯,不完全是 "order of execution"。 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 规则解释的。
仅仅因为查询是这样解释并不意味着它是这样执行。