İçin INNERkatılır, hayır, sipariş önemli değildir. Sorgular sürece adresinin seçer değiştikçe, aynı sonuçları getirecektir SELECT *için SELECT a.*, b.*, c.*.
İçin ( LEFT, RIGHTya FULL) OUTER, evet, sipariş konularda birleşimler - ve ( güncellenmiş ) işler çok daha karmaşıktır.
Birincisi, dış birleşimler değişmeli değildir, bu yüzden a LEFT JOIN baynı değildirb LEFT JOIN a
Dış birleşimler de birleştirici değildir, bu nedenle her iki (değişebilirlik ve ilişkilendirilebilirlik) özellikleri içeren örneklerinizde:
a LEFT JOIN b
ON b.ab_id = a.ab_id
LEFT JOIN c
ON c.ac_id = a.ac_id
şuna eşittir :
a LEFT JOIN c
ON c.ac_id = a.ac_id
LEFT JOIN b
ON b.ab_id = a.ab_id
fakat:
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
şuna eşdeğer değildir :
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
Bir başka (umarım daha basit) ilişkilendirilebilirlik örneği. Bunu şöyle düşünün (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
Bu eşdeğerdir için 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
sadece "güzel" ONkoşullarımız olduğu için. Hem ON b.ab_id = a.ab_idve c.bc_id = b.bc_ideşitlik denetler ve içermeyen NULLkarşılaştırmalar.
Hatta gibi diğer operatörleri ile şartları veya daha karmaşık olanlar olabilir: ON a.x <= b.xya ON a.x = 7ya ON a.x LIKE b.xya ON (a.x, a.y) = (b.x, b.y)ve iki sorgular hala eşdeğer olacaktır.
Bununla birlikte, bunlardan herhangi biri IS NULLveya null'larla ilgili bir işlev COALESCE(), örneğin koşul varsa b.ab_id IS NULL, iki sorgu eşdeğer olmazsa.
<blahblah>? A'dan B'ye ve A'dan C'ye mi katılıyor, yoksa A'dan B'ye ve B'den C'ye mi katılıyor?