Het is een juridische syntaxis om haakjes te gebruiken in een join-clausule in een FROM
, en de haakjes doen effect hebben.
Overweeg deze vraag:
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;
Met de haakjes kunt u een inner join doen van tabellen b
en c
en voeg dat vervolgens aan de buitenkant toe aan a
.
Zonder de haakjes zou het onmogelijk zijn om dat uit te drukken als een left join. U krijgt de rijen 11-30 niet uit tabel a
of anders rijen 11-20 van tabel c
zou null
zijn s (afhankelijk van hoe je het hebt geprobeerd).
Merk op dat de bovenstaande vraag gelijk is aan:
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;
, waarvoor geen haakjes nodig zijn. Dus als u echt wilt voorkomen dat u haakjes gebruikt in de FROM
clausule, kunt u dat meestal doen. Persoonlijk geef ik de voorkeur aan de LEFT JOIN
methode met haakjes in plaats van een RIGHT JOIN
.