सबसे पहले, पूरी तरह से समकक्ष होने के लिए, पहली क्वेरी लिखी जानी चाहिए थी
SELECT mw.*,
nvs.*
FROM mst_words mw
LEFT JOIN (SELECT *
FROM vocab_stats
WHERE owner = 1111) AS nvs ON mw.no = nvs.vocab_no
WHERE (nvs.correct > 0 )
AND mw.level = 1
ताकि mw.* और nvs.* एक साथ दूसरी क्वेरी के सिंगुलर * के समान सेट तैयार करें। आपके द्वारा लिखी गई क्वेरी INNER JOIN का उपयोग कर सकती है, क्योंकि इसमें nvs.correct पर एक फ़िल्टर शामिल है।
सामान्य रूप
TABLEA LEFT JOIN TABLEB ON <CONDITION>
attempts
शर्त के आधार पर TableB रिकॉर्ड खोजने के लिए। यदि विफल रहता है, तो TABLEA के परिणाम रखे जाते हैं, जिसमें TableB के सभी कॉलम NULL पर सेट होते हैं। इसके विपरीत
TABLEA INNER JOIN TABLEB ON <CONDITION>
attempts
. भी शर्त के आधार पर TableB रिकॉर्ड खोजने के लिए। हालांकि , विफल होने पर, TableA से विशेष रिकॉर्ड आउटपुट परिणाम सेट से हटा दिया जाता है।
क्रॉस जॉइन के लिए एएनएसआई मानक एक कार्टेशियन उत्पाद दो तालिकाओं के बीच।
TABLEA CROSS JOIN TABLEB
-- # or in older syntax, simply using commas
TABLEA, TABLEB
वाक्य रचना का आशय यह है कि TABLEA में प्रत्येक पंक्ति TABLEB में प्रत्येक पंक्ति से जुड़ जाती है। तो A में 4 पंक्तियाँ और B में 3 पंक्तियाँ आउटपुट की 12 पंक्तियाँ उत्पन्न करती हैं। जब WHERE क्लॉज में शर्तों के साथ जोड़ा जाता है, तो यह कभी-कभी INNER JOIN का समान व्यवहार उत्पन्न करता है, क्योंकि वे एक ही चीज़ को व्यक्त करते हैं (A और B => के बीच की स्थिति => रखें या नहीं)। हालाँकि, जब आप अल्पविराम के बजाय INNER JOIN का उपयोग करते हैं, तो आशय के बारे में पढ़ते समय यह बहुत स्पष्ट होता है।
प्रदर्शन-वार, अधिकांश डीबीएमएस इनर जॉइन की तुलना में लेफ्ट जॉइन को तेजी से प्रोसेस करेगा। अल्पविराम संकेतन डेटाबेस सिस्टम को इरादे की गलत व्याख्या करने और खराब क्वेरी योजना तैयार करने का कारण बन सकता है - इसलिए SQL92 नोटेशन के लिए एक और प्लस।
हमें LEFT JOIN की आवश्यकता क्यों है? यदि ऊपर लेफ्ट जॉइन की व्याख्या अभी भी पर्याप्त नहीं है (बी में बिना मैचों के ए में रिकॉर्ड रखें), तो विचार करें कि इसे प्राप्त करने के लिए, आपको समान प्रभाव प्राप्त करने के लिए पुराने कॉमा-नोटेशन का उपयोग करके दो सेटों के बीच एक जटिल यूनियन की आवश्यकता होगी। . लेकिन जैसा कि पहले बताया गया है , यह आपके उदाहरण पर लागू नहीं होता है, जो वास्तव में एक इनर जॉइन है जो लेफ्ट जॉइन के पीछे छिपा है।
नोट:
- दायाँ जॉइन LEFT जैसा ही है, सिवाय इसके कि यह A के बजाय TABLEB (दाईं ओर) से शुरू होता है।
- दाएं और बाएं जॉइन दोनों बाहरी जोड़ हैं। OUTER शब्द वैकल्पिक है, अर्थात इसे
LEFT OUTER JOIN
के रूप में लिखा जा सकता है । - तीसरे प्रकार का OUTER जॉइन है FULL OUTER join, लेकिन इसकी चर्चा यहां नहीं की गई है।