สำหรับการINNER
เข้าร่วมคำสั่งไม่สำคัญ แบบสอบถามจะให้ผลลัพธ์เดียวกันตราบใดที่คุณเลือกเปลี่ยนคุณจากไปSELECT *
SELECT a.*, b.*, c.*
สำหรับ ( LEFT
, RIGHT
หรือFULL
) OUTER
ร่วมใช่เรื่องการสั่งซื้อ - และ ( การปรับปรุง ) สิ่งที่มีความซับซ้อนมากขึ้น
ครั้งแรกการรวมภายนอกไม่ได้สลับกันดังนั้นจึงa LEFT JOIN b
ไม่เหมือนกับb LEFT JOIN a
การรวมภายนอกไม่เชื่อมโยงกันดังนั้นในตัวอย่างของคุณที่เกี่ยวข้องกับคุณสมบัติทั้งสอง (การสับเปลี่ยนและการเชื่อมโยง)
a LEFT JOIN b
ON b.ab_id = a.ab_id
LEFT JOIN c
ON c.ac_id = a.ac_id
เทียบเท่ากับ :
a LEFT JOIN c
ON c.ac_id = a.ac_id
LEFT JOIN b
ON b.ab_id = a.ab_id
แต่:
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
ไม่เท่ากับ :
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
อีกตัวอย่างการเชื่อมโยง (หวังว่าง่ายกว่า) คิดว่านี่เป็น(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
นี่เทียบเท่ากับ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
เพียงเพราะเรามีON
เงื่อนไข"ดี" ทั้งON b.ab_id = a.ab_id
และc.bc_id = b.bc_id
เป็นการตรวจสอบความเท่าเทียมกันและไม่เกี่ยวข้องกับNULL
การเปรียบเทียบ
คุณสามารถมีเงื่อนไขกับตัวดำเนินการอื่น ๆ หรือสิ่งที่ซับซ้อนกว่าเช่น: ON a.x <= b.x
หรือON a.x = 7
หรือON a.x LIKE b.x
หรือON (a.x, a.y) = (b.x, b.y)
และทั้งสองแบบสอบถามจะยังคงเทียบเท่า
อย่างไรก็ตามถ้าเกี่ยวข้องIS NULL
หรือฟังก์ชันใด ๆที่เกี่ยวข้องกับโมฆะCOALESCE()
เช่นถ้าเงื่อนไขเป็นb.ab_id IS NULL
แล้วแบบสอบถามทั้งสองจะไม่เทียบเท่า
<blahblah>
? คุณเข้าร่วม A ถึง B และ A ถึง C หรือคุณเข้าร่วม A ถึง B และ B ถึง C หรือไม่