sql >> Databáze >  >> RDS >> Oracle

Jsou vnořené závorky v klauzuli FROM platnou syntaxí Oracle SQL?

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 .



  1. Jak získat klíčová pole pro tabulku ve funkci plpgsql?

  2. C#/SQL:zálohování a obnova zkopírováním a nahrazením databázových souborů?

  3. Dotaz Oracle sql pro seskupení po sobě jdoucích záznamů podle data

  4. Vložte dvojité uvozovky do řetězce mysql pomocí PHP