मैं USING सिंटैक्स का उपयोग नहीं करता, क्योंकि
- मेरे अधिकांश जॉइन इसके अनुकूल नहीं हैं (उसी फ़ील्डनाम का मिलान नहीं किया जा रहा है, और/या जॉइन में कई मैच हैं) और
- यह तुरंत स्पष्ट नहीं है कि दो से अधिक तालिकाओं के मामले में इसका क्या अनुवाद होता है
यानी 'id' और 'id_2' कॉलम के साथ 3 टेबल मानते हुए, करता है
T1 JOIN T2 USING(id) JOIN T3 USING(id_2)
बनें
T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T1.id_2=T3.id_2 AND T2.id_2=T3.id_2)
या
T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T2.id_2=T3.id_2)
या फिर कुछ और?
किसी विशेष डेटाबेस संस्करण के लिए इसे खोजना एक बहुत ही मामूली अभ्यास है, लेकिन मुझे यह विश्वास नहीं है कि यह सभी डेटाबेस में संगत है, और मैं अकेला व्यक्ति नहीं हूं जिसे अपना कोड बनाए रखना है (इसलिए अन्य लोगों को भी पता होना चाहिए कि यह किसके बराबर है)।
WHERE बनाम ON के साथ एक स्पष्ट अंतर यह है कि यदि जॉइन बाहरी है:
एक एकल आईडी फ़ील्ड के साथ एक T1, मान 1 वाली एक पंक्ति, और एक ID और VALUE फ़ील्ड (एक पंक्ति, ID=1, VALUE=6) के साथ एक T2 मान लें, तो हम प्राप्त करते हैं:
SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID) WHERE T2.VALUE=42
कोई पंक्ति नहीं देता है, क्योंकि WHERE को मिलान करना आवश्यक है, जबकि
SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID AND T2.VALUE=42)
मानों के साथ एक पंक्ति देगा
1, NULL, NULL
चूंकि ON केवल जॉइन के मिलान के लिए आवश्यक है, जो बाहरी होने के कारण वैकल्पिक है।