Dla INNER
dołącza, nie, zamówienie nie ma znaczenia. Zapytania zwracają te same wyniki, o ile zmienisz swoje wybory z SELECT *
na SELECT a.*, b.*, c.*
.
Dla (LEFT
, RIGHT
lub FULL
) OUTER
łączy tak, sprawy zamówienie - i (aktualizowane) rzeczy są o wiele bardziej skomplikowane.
pierwsze zewnętrzne przyłącza nie są przemienne, tak a LEFT JOIN b
nie jest taki sam jak b LEFT JOIN a
sprzężenia zewnętrzne nie są asocjacyjny albo, więc w swoich przykładach, które dotyczą zarówno (przemienność i skojarzenia) Właściwości:
a LEFT JOIN b
ON b.ab_id = a.ab_id
LEFT JOIN c
ON c.ac_id = a.ac_id
odpowiada:
a LEFT JOIN c
ON c.ac_id = a.ac_id
LEFT JOIN b
ON b.ab_id = a.ab_id
a:
a LEFT JOIN b
ON b.ab_id = a.ab_id
LEFT JOIN c
ON c.ac_id = a.ac_id
AND c.bc_id = b.bc_id
nie odpowiada:
a LEFT JOIN c
ON c.ac_id = a.ac_id
LEFT JOIN b
ON b.ab_id = a.ab_id
AND b.bc_id = c.bc_id
Innym (oby prostsze) Przykład Zespolenie. Potraktujcie to jako (a LEFT JOIN b) LEFT JOIN c
:
a LEFT JOIN b
ON b.ab_id = a.ab_id -- AB condition
LEFT JOIN c
ON c.bc_id = b.bc_id -- BC condition
Ten jest równoznaczne do a LEFT JOIN (b LEFT JOIN c)
:
a LEFT JOIN
b LEFT JOIN c
ON c.bc_id = b.bc_id -- BC condition
ON b.ab_id = a.ab_id -- AB condition
tylko dlatego, że mamy "Nice" ON
warunki. Zarówno ON b.ab_id = a.ab_id
, jak i c.bc_id = b.bc_id
są kontrolami równości i nie obejmują porównań NULL
.
Można nawet mieć warunki z innymi operatorami lub bardziej skomplikowanych, takich jak: ON a.x <= b.x
lub ON a.x = 7
lub ON a.x LIKE b.x
lub ON (a.x, a.y) = (b.x, b.y)
i dwie kwerendy nadal byłyby równoważne.
Jeśli jednak każdy z tych zaangażowanych IS NULL
lub funkcji, która jest związana z null jak COALESCE()
, na przykład wtedy, gdy warunek był b.ab_id IS NULL
, następnie dwa pytania nie byłyby równoważne.
Co znajduje się w ''? łączycie się z A do B i od A do C, czy przyłączacie się od A do B i od B do C? –
beny23
Cześć Beny, kod w moim pytaniu jest abstrakcją. Nie interesuje mnie dołączenie od A do B lub od A do C, chcę tylko wiedzieć, czy składnia taka zapewni identyczne wyniki. –