Per INNER
unisce, no, l'ordine non importa. Le query restituiranno gli stessi risultati, a condizione che venga modificata la selezione da SELECT *
a SELECT a.*, b.*, c.*
.
Per (LEFT
, RIGHT
o FULL
) OUTER
unisce, sì, le questioni di ordine - e (aggiornati) le cose sono molto più complicate.
In primo luogo, outer join non sono commutativa, quindi a LEFT JOIN b
non è lo stesso di b LEFT JOIN a
outer join non sono associativa o, in modo nei tuoi esempi che coinvolgono sia (proprietà commutativa e l'associatività) Proprietà:
a LEFT JOIN b
ON b.ab_id = a.ab_id
LEFT JOIN c
ON c.ac_id = a.ac_id
è equivalente a:
a LEFT JOIN c
ON c.ac_id = a.ac_id
LEFT JOIN b
ON b.ab_id = a.ab_id
ma:
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
non equivale a:
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
Un altro (si spera più semplice) esempio associatività. Pensate a questo come (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
Questo equivale aa 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
solo perché abbiamo "nice" ON
condizioni. Entrambi ON b.ab_id = a.ab_id
e c.bc_id = b.bc_id
sono controlli di uguaglianza e non comportano confronti NULL
.
Si può anche avere condizioni con altri operatori o quelli più complessi come: ON a.x <= b.x
o ON a.x = 7
o ON a.x LIKE b.x
o ON (a.x, a.y) = (b.x, b.y)
e le due interrogazioni sarebbero ancora equivalente.
Se, tuttavia, nessuno di questi coinvolti IS NULL
o una funzione che è legato a valori nulli come COALESCE()
, per esempio se la condizione era b.ab_id IS NULL
, allora le due domande non sarebbero equivalenti.
Cosa c'è di ''? stai unendo A a B e A a C, o stai unendo A a B e B a C? –
beny23
Ciao Beny, il codice nella mia domanda è un'astrazione. Non sono preoccupato di unire A a B o A a C, voglio solo sapere che la sintassi del genere fornirà risultati identici. –