如果我们考虑三个具有两行的单列表:A =(1,2),B =(2,3),C =(3,4)。然后,如果我们使用括号一起尝试UNION
和INTERSECT
,结果将非常一致:
(select * from a union select * from b) intersect select * from c
-> 3 select * from a union (select * from b intersect select * from c)
-> 1,2,3 但是简单明了...
select * from a union select * from b intersect select * from c
吗?我已经在多个数据库(SQL Fiddle)上进行过尝试,根据经验,我得到的是:
你们知道这是否有任何官方定义吗?我略过了SQL-92规范,但在主题上找不到任何内容。
答案 0 :(得分:3)
Oracle在其documentation中有以下解释性说明:
为符合新兴的SQL标准,Oracle的未来版本将使
INTERSECT
运算符的优先级高于其他集合运算符。因此,在将INTERSECT
运算符与其他集合运算符结合使用的查询中,应使用括号指定评估顺序。
因此,Oracle至少认为优先级与标准不一致。
请注意:我经常发现标准难以理解,这样的提示比尝试解密实际文本更简单。