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