连接和联合的评估顺序和优化

Evaluation order and optimization for Joins and Unions

我需要执行动态形成的查询。

该查询将通过集合操作inner join(相当于AND)和union(相当于OR)得到一个结果集。

假设用户输入:A & B | C&D

其中

为了获得一个结果集,我将动态执行:

select * from A inner join B union C inner join D;

我知道优化器如何与联合一起工作,但我找不到关于它们如何一起评估的任何信息。

鉴于输入可以解释为:

我的问题是:

优化器将如何执行这个集合操作?

括号在这种情况下是否相关?

感谢您的宝贵时间。

我想你的意思是:

select * from A inner join B union 
select * from C inner join D;

这实际上是:

(select * from A inner join B) union 
(select * from C inner join D);

编辑:

实际上,将您的逻辑表达为:

可能会更好
select * from A
intersect
select * from B
union 
select * from C
intersect
select * from D;

...实际上是:

(((select * from A
intersect
select * from B)
union 
select * from C)
intersect
select * from D);

http://docs.oracle.com/cd/B28359_01/server.111/b28286/queries004.htm

如有任何疑问,请自行指定括号。