sql >> Databasteknik >  >> RDS >> Oracle

Är kapslade parenteser i FROM-satsen giltig Oracle SQL-syntax?

Det är laglig syntax att använda parentes i en join-sats i en FROM , och parenteserna gör har en effekt.

Tänk på den här frågan:

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;

Parentesen låter dig göra en inre sammanfogning av tabeller b och c och sedan yttre sammanfoga det till a .

Utan parentesen skulle det vara omöjligt att försöka uttrycka det som en vänsteranslutning. Du skulle heller inte få raderna 11-30 från tabell a eller annars raderna 11-20 i tabell c skulle vara null s (beroende på hur du försökte göra det).

Observera att ovanstående fråga motsvarar:

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;

, som inte kräver parentes. Så om du verkligen vill undvika att använda parenteser i FROM klausul kan du vanligtvis göra det. Personligen föredrar jag LEFT JOIN metod med parentes istället för en RIGHT JOIN .



  1. Matchande poster från två tabeller

  2. välj från några tabeller mysql

  3. min sql flera kategori-underkategori-underkategori

  4. Indexering av booleska fält