Jon Snow
Jon Snow

Reputation: 59

Oracle join's order

I have a sql sentence.

select a.*,b.*,c.*
from a 
inner join b
on a.id=b.id
left join c 
on b.id=c.id

but I not konw it is execute inner join first .then create a temporary table such as temp .and finaly temp left join c. inner join ,left join and right join do they have same level of execution.Thank you!

Upvotes: 0

Views: 1132

Answers (1)

Gordon Linoff
Gordon Linoff

Reputation: 1270011

SQL is not a procedural language. A SQL query describes the result set being produced. When interpreting a query, the join order is from left to right. So, in your query, the result set is the one produced by an inner join on a and b with that result being left joined to c.

You can add parentheses to avoid ambiguity:

from (a inner join
      b
      on a.id = b.id
     ) left join
     c 
     on b.id = c.id

But that is unnecessary.

That is logically how the query is processed. The optimization engine can choose many different ways of executing the query, some of which might be pretty unrecognizable as relating to this particular query. The only guarantee is what the result set looks like.

Upvotes: 4

Related Questions