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
.