Законен е синтаксисът да използвате скоби в клауза за свързване в 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
.