एक से अधिक तालिका वाली किसी भी क्वेरी के लिए तालिका "ए" से तालिका "बी" के परिणामों को जोड़ने के लिए किसी प्रकार के सहयोग की आवश्यकता होती है। ऐसा करने का पारंपरिक (ANSI-89) साधन है:
- FROM क्लॉज में अल्पविराम से अलग की गई सूची में शामिल तालिकाओं की सूची बनाएं
-
WHERE क्लॉज में तालिकाओं के बीच संबंध लिखें
SELECT * FROM TABLE_A a, TABLE_B b WHERE a.id = b.id
यहाँ ANSI-92 JOIN सिंटैक्स का उपयोग करके फिर से लिखी गई क्वेरी है:
SELECT *
FROM TABLE_A a
JOIN TABLE_B b ON b.id = a.id
प्रदर्शन के दृष्टिकोण से:
जहां समर्थित (Oracle 9i+, PostgreSQL 7.2+, MySQL 3.23+, SQL Server 2000+), दूसरे पर सिंटैक्स का उपयोग करने के लिए कोई प्रदर्शन लाभ नहीं है। अनुकूलक उन्हें एक ही क्वेरी के रूप में देखता है। लेकिन अधिक जटिल प्रश्नों को ANSI-92 सिंटैक्स का उपयोग करने से लाभ हो सकता है:
- जॉइन ऑर्डर को नियंत्रित करने की क्षमता - जिस क्रम में टेबल स्कैन किए जाते हैं
- शामिल होने से पहले एक टेबल पर फ़िल्टर मानदंड लागू करने की क्षमता
रखरखाव के दृष्टिकोण से:
ANSI-92 पर ANSI-92 JOIN सिंटैक्स का उपयोग करने के कई कारण हैं:
- अधिक पठनीय, क्योंकि जॉइन मानदंड WHERE क्लॉज से अलग है
- जॉइन मानदंड छूटने की संभावना कम
- इनर के अलावा अन्य जॉइन प्रकारों के लिए लगातार सिंटैक्स समर्थन, अन्य डेटाबेस पर प्रश्नों का उपयोग करना आसान बनाता है
- WHERE क्लॉज केवल शामिल तालिकाओं के कार्टेशियन उत्पाद के निस्पंदन के रूप में कार्य करता है
डिजाइन के नजरिए से:
ANSI-92 जॉइन सिंटैक्स पैटर्न है, न कि एंटी-पैटर्न:
- क्वेरी का उद्देश्य अधिक स्पष्ट है; एप्लिकेशन द्वारा उपयोग किए गए कॉलम स्पष्ट हैं
- जब भी संभव हो सख्त टाइपिंग का उपयोग करने के बारे में यह मॉड्यूलरिटी नियम का पालन करता है। स्पष्ट लगभग सार्वभौमिक रूप से बेहतर है।
निष्कर्ष
परिचित और/या आराम की कमी, मुझे ANSI-92 JOIN सिंटैक्स के बजाय ANSI-89 WHERE क्लॉज का उपयोग जारी रखने का कोई लाभ नहीं दिखता है। कुछ लोग शिकायत कर सकते हैं कि ANSI-92 सिंटैक्स अधिक क्रियात्मक है, लेकिन यही इसे स्पष्ट करता है। जितना अधिक स्पष्ट, समझना और बनाए रखना उतना ही आसान।