sql >> Database teknologi >  >> RDS >> Oracle

Er indlejrede parenteser i FROM-sætningen gyldig Oracle SQL-syntaks?

Det er lovlig syntaks at bruge parentes i en join-klausul i en FROM , og parenteserne gør have en effekt.

Overvej denne forespørgsel:

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 giver dig mulighed for at lave en indre sammenføjning af tabeller b og c og derefter outer join det til a .

Uden parentesen ville det være umuligt at forsøge at udtrykke det som en venstreforbindelse. Du ville heller ikke få rækker 11-30 fra tabel a ellers rækker 11-20 i tabel c ville være null s (afhængig af hvordan du forsøgte at gøre det).

Bemærk, at ovenstående forespørgsel svarer til:

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 ikke kræver parentes. Så hvis du virkelig vil undgå at bruge parenteser i FROM klausul, kan du normalt gøre det. Personligt foretrækker jeg LEFT JOIN metode med parenteser i stedet for en RIGHT JOIN .



  1. Hvordan gemmer man genererede PDF-filer til MySQL-database ved hjælp af Java?

  2. Udelukker ikke-understøttede tabeller, der skal optages af Oracle Streams

  3. Vis databaser/tabeller I UDFIL

  4. uafsluttet CSV-citeret felt i Postgres