Законен е синтаксисът да използвате скоби в клауза за свързване в FROM и скобите do имат ефект.
Помислете за тази заявка:
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;
Скобите ви позволяват да направите вътрешно свързване на таблици b и c и след това външно присъединяване към a .
Без скобите опитът да се изрази това като ляво съединение би бил невъзможен. Вие също няма да получите редове 11-30 от таблица a или иначе редове 11-20 на таблица c ще бъде null s (в зависимост от това как сте се опитали да го направите).
Имайте предвид, че горната заявка е еквивалентна на:
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;
, което не изисква скоби. Така че, ако наистина искате да избегнете използването на скоби в FROM клауза, обикновено можете да го направите. Лично аз предпочитам LEFT JOIN метод със скоби вместо RIGHT JOIN .