Per i INNERjoin, no, l'ordine non ha importanza. Le query restituiranno gli stessi risultati, a condizione che cambiate le selezioni da SELECT *a SELECT a.*, b.*, c.*.
Per (LEFT , RIGHTo FULL) OUTERjoin, sì, le questioni di ordine - e ( aggiornato cose) sono molto più complicate.
Innanzitutto, i join esterni non sono commutativi, quindi a LEFT JOIN bnon è lo stesso dib LEFT JOIN a
Anche i join esterni non sono associativi, quindi nei tuoi esempi che coinvolgono entrambe le proprietà (commutatività e associatività):
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 è equivalente 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 esempio (si spera più semplice) di associatività. Pensa 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 ONcondizioni "belle" . Tutti e dueON b.ab_id = a.ab_id e c.bc_id = b.bc_idsono controlli di uguaglianza e non comportano NULLconfronti.
Puoi persino avere condizioni con altri operatori o più complessi come: ON a.x <= b.xoON a.x = 7 oppure ON a.x LIKE b.xoppure ON (a.x, a.y) = (b.x, b.y)e le due query sarebbero comunque equivalenti.
Se tuttavia, una qualsiasi di queste parti coinvolte IS NULLo una funzione correlata a valori null COALESCE(), ad esempio se la condizione fosse b.ab_id IS NULL, le due query non sarebbero equivalenti.
<blahblah>? stai unendo A a B e A a C o stai unendo A a B e B a C?