के लिए 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 में शामिल हो रहे हैं?