Je legální syntaxe používat závorky v spojovací klauzuli v FROM a závorky do mít účinek.
Zvažte tento dotaz:
WITH table_a AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 30),
table_b as ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 20),
table_c AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 10)
SELECT a.id, b.id, c.id
FROM table_a a left join ( table_b b inner join table_c c ON c.id = b.id ) ON b.id = a.id
ORDER BY 1,2,3;
Závorky umožňují provést vnitřní spojení tabulek b a c a pak to vnější spojte s a .
Bez závorky by to nebylo možné vyjádřit jako levé spojení. Buď byste nedostali řádky 11–30 z tabulky a nebo jinak řádky 11-20 tabulky c bude null s (v závislosti na tom, jak jste se o to pokusili).
Všimněte si, že výše uvedený dotaz je ekvivalentní:
WITH table_a AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 30),
table_b as ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 20),
table_c AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 10)
SELECT a.id, b.id, c.id
FROM table_b b inner join table_c c on c.id = b.id right join table_a a on a.id = b.id
ORDER BY 1,2,3;
, který nevyžaduje závorku. Pokud se tedy opravdu chcete vyhnout použití závorek v FROM klauzule, obvykle tak můžete učinit. Osobně preferuji LEFT JOIN metoda se závorkami místo RIGHT JOIN .