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 .