जॉइन (एसक्यूएल)

स्ट्रक्चर्ड क्वेरी लैंग्वेज (एसक्यूएल) में जॉइन क्लॉज एक या अधिक टेबल के कॉलम को नई टेबल में जॉइनता है। यह ऑपरेशन संबंधपरक बीजगणित में जॉइन ऑपरेशन से युग्मित होता है। अनौपचारिक रूप से, जॉइन दो तालिकाओं को जॉइनता है और युग्मित होने वाली फ़ील्ड के साथ एक ही पंक्ति में रिकॉर्ड रखता है:,  ,  ,   और  आदि।

उदाहरण तालिकाएँ
जॉइन प्रकारों को समझाने के लिए, इस आलेख का शेष भाग निम्नलिखित तालिकाओं का उपयोग करता है:

टेबल की प्राथमिक कुंजी है, जबकि   विदेशी कुंजी है।

ध्यान दें कि  में, विलियम्स को अभी तक कोई डिपार्टमेंट नहीं दिया गया है। इसके अतिरिक्त, मार्केटिंग डिपार्टमेंट में किसी भी एम्प्लॉयी को नियुक्त नहीं किया गया है।

उपरोक्त तालिकाएँ बनाने के लिए ये एसक्यूएल कथन हैं:

 टेबल डिपार्टमेंट बनाएं(   डिपार्टमेंटआईडी इंट प्राथमिक कुंजी शून्य नहीं है,    डिपार्टमेंट का नाम VARCHAR(20) );

टेबल एम्प्लॉयी बनाएं (   अंतिम नाम VARCHAR(20),    DepartmentID पूर्ण संदर्भ विभाग(DepartmentID) );

डिपार्टमेंट में सम्मिलित करें मान (31, 'बिक्री'), (33, 'इंजीनियरिंग'), (34, 'लिपिकीय'), (35, 'मार्केटिंग');

एम्प्लॉयी में डालें मूल्य ('रैफर्टी', 31), ('जोन्स', 33), ('हाइजेनबर्ग', 33), ('रॉबिन्सन', 34), ('स्मिथ', 34), ('विलियम्स', शून्य); 

क्रॉस जॉइन
जॉइन में तालिकाओं से पंक्तियों का कार्टेशियन उत्पाद लौटाता है। दूसरे शब्दों में, यह ऐसी पंक्तियाँ उत्पन्न करेगा जो प्रथम टेबल की प्रत्येक पंक्ति को दूसरी टेबल की प्रत्येक पंक्ति के साथ जॉइनती हैं।

स्पष्ट क्रॉस जॉइन का उदाहरण है: अंतर्निहित क्रॉस जॉइन का उदाहरण है: क्रॉस जॉइन को सदैव उचित स्थिति के साथ इनर जॉइन से परिवर्तित किया जा सकता है:

सम्मिलित टेबल से पंक्तियों को फ़िल्टर करने के लिए स्वयं कोई प्रेडिकेट प्रारम्भ नहीं करता है। ए के परिणाम  के परिणामों को   क्लॉज का उपयोग करके फ़िल्टर किया जा सकता है, जो तब इनर जॉइन के समतुल्य उत्पन्न कर सकता है।

एसक्यूएल:2011 मानक में, क्रॉस जॉइन वैकल्पिक F401, एक्सटेंडेड जॉइन्ड टेबल, पैकेज का भाग हैं।

सामान्य उपयोग सर्वर के प्रदर्शन के परीक्षण के लिए होता है।

इनर जॉइन
इनर जॉइन (या जॉइन) के लिए दो सम्मिलित तालिकाओं में प्रत्येक पंक्ति में युग्मित होने वाले कॉलम मानों की आवश्यकता होती है, और यह अनुप्रयोग प्रक्रिया सामग्री में सामान्यतः उपयोग किया जाने वाला जॉइन ऑपरेशन है, किन्तु इसे सभी स्थितियों में सबसे उत्तम विकल्प नहीं माना जाना चाहिए। इनर जॉइन, जॉइन-प्रेडिकेट के आधार पर दो तालिकाओं (ए और बी) के कॉलम मानों को सम्मिलित करके नई परिणाम टेबल बनाता है। क्वेरी ए की प्रत्येक पंक्ति की तुलना बी की प्रत्येक पंक्ति से करती है जिससे कि पंक्तियों के सभी जॉइने ज्ञात किये जा सकें जो जॉइन-प्रेडिकेट को संतुष्ट करते हैं। जब जॉइन-प्रेडिकेट गैर- शून्य मानों के मिलान से संतुष्ट होता है, तो ए और बी की पंक्तियों की प्रत्येक मिलान जॉइनी के लिए कॉलम मान परिणाम पंक्ति में संयोजित होते हैं।

जॉइन के परिणाम को प्रथम तालिकाओं में सभी पंक्तियों के कार्टेशियन उत्पाद (या क्रॉस जॉइन) लेने के परिणाम के रूप में परिभाषित किया जा सकता है (टेबल ए में प्रत्येक पंक्ति को टेबल बी में प्रत्येक पंक्ति के साथ जॉइनना) और फिर सभी पंक्तियों को वापस करना जो जॉइन प्रेडिकेट को संतुष्ट करते हैं। वास्तविक एसक्यूएल कार्यान्वयन सामान्यतः अन्य दृष्टिकोणों का उपयोग करते हैं, जैसे हैश जॉइन या सॉर्ट-मर्ज जॉइन, क्योंकि कार्टेशियन उत्पाद की गणना धीमी है और स्टोर करने के लिए प्रायः बड़ी मात्रा में मेमोरी की आवश्यकता होती है।

एसक्यूएल जॉइन को व्यक्त करने के लिए दो भिन्न-भिन्न वाक्यात्मक प्रकार निर्दिष्ट करता है: जो एक्सप्लिसिट जॉइन नोटेशन और इम्प्लिसिट जॉइन नोटेशन है। इम्प्लिसिट जॉइन नोटेशन को अब सर्वोत्तम अभ्यास नहीं माना जाता है, चूँकि डेटाबेस सिस्टम अभी भी इसका समर्थन करते हैं।

एक्सप्लिसिट जॉइन नोटेशन सम्मिलित होने के लिए टेबल निर्दिष्ट करने के लिए वैकल्पिक रूप से  कीवर्ड से पूर्व   कीवर्ड का उपयोग करता है, और सम्मिलित होने के लिए पूर्वानुमान निर्दिष्ट करने के लिए    कीवर्ड का उपयोग करता है, जैसा कि निम्नलिखित उदाहरण में है:

इम्प्लिसिट जॉइन नोटेशन केवल  कथन के   क्लॉज में सम्मिलित होने के लिए तालिकाओं को सूचीबद्ध करता है, और उन्हें अलग करने के लिए अल्पविराम का उपयोग करता है। इस प्रकार यह क्रॉस जॉइन निर्दिष्ट करता है, और   क्लॉज अतिरिक्त फ़िल्टर-प्रेडिकेट प्रारम्भ कर सकता है (जो स्पष्ट नोटेशन में जॉइन-प्रेडिकेट की तुलना में कार्य करता है)।

निम्नलिखित उदाहरण पूर्व उदाहरण के समान है, किन्तु इस बार इम्प्लिसिट जॉइन नोटेशन का उपयोग किया जा रहा है:

ऊपर दिए गए उदाहरणों में दिए गए प्रश्न दोनों तालिकाओं के डिपार्टमेंटआईडी कॉलम का उपयोग करके एम्प्लॉयी और डिपार्टमेंट तालिकाओं में सम्मिलित हो जाएंगे। जहां इन तालिकाओं का डिपार्टमेंटआईडी युग्मित होता है (अर्थात जॉइन-प्रेडिकेट संतुष्ट है), क्वेरी दो तालिकाओं से लास्टनेम, डिपार्टमेंटआईडी और डिपार्टमेंटनेम कॉलम को परिणाम पंक्ति में संयोजित करेगी। जहां डिपार्टमेंट आईडी युग्मित नहीं होती, और वहां कोई परिणाम पंक्ति उत्पन्न नहीं होती है।

इस प्रकार उपरोक्त क्वेरी के निष्पादन का परिणाम होगा:

एम्प्लॉयी विलियम्स और डिपार्टमेंट मार्केटिंग क्वेरी निष्पादन परिणामों में दिखाई नहीं देते हैं। इनमें से किसी की भी अन्य संबंधित टेबल में कोई युग्मित होने वाली पंक्तियाँ नहीं हैं: "विलियम्स" का कोई संबद्ध डिपार्टमेंट नहीं है, और किसी भी एम्प्लॉयी के पास डिपार्टमेंट आईडी 35 (मार्केटिंग) नहीं है। वांछित परिणामों के आधार पर, यह व्यवहार सूक्ष्म बग हो सकता है, जिसे इनर जॉइन को आउटर जॉइन से प्रतिस्थापित करके बचा जा सकता है।

इनर जॉइन और शून्य मान
प्रोग्रामर को उन स्तंभों पर तालिकाओं को जॉइनते समय विशेष ध्यान रखना चाहिए जिनमें शून्य मान हो सकते हैं, क्योंकि शून्य कभी भी किसी अन्य मान से युग्मित नहीं हो सकता (यहां तक ​​कि नल भी नहीं), जब तक कि जुड़ने की स्थिति स्पष्ट रूप से संयोजन प्रेडिकेट का उपयोग नहीं करती है जो प्रथम परीक्षण करता है कि जुड़ने वाले कॉलम   हैं शेष प्रेडिकेट नियम को प्रस्तावित करने से पूर्व होते हैं। इनर जॉइन का उपयोग केवल उस डेटाबेस में सुरक्षित रूप से किया जा सकता है जो संदर्भात्मक अखंडता को प्रस्तावित करता है या जहां जॉइन कॉलम के शून्य न होने का आश्वासन होता है। कई लेनदेन प्रसंस्करण संबंधपरक डेटाबेस डेटा अखंडता सुनिश्चित करने के लिए परमाणुता, स्थिरता, भिन्नता, स्थायित्व (एसीआईडी) डेटा अद्यतन मानकों पर विश्वास करते हैं, जिससे इनर जॉइन उपयुक्त विकल्प बन जाता है। चूँकि, लेन-देन डेटाबेस में सामान्यतः वांछनीय जॉइन वाले कॉलम भी होते हैं जिन्हें शून्य होने की अनुमति होती है। कई रिपोर्टिंग रिलेशनल डेटाबेस और डेटा वेयरहाउस हाई वॉल्यूम एक्सट्रैक्ट, ट्रांसफॉर्म, लोड (ईटीएल) बैच अपडेट का उपयोग करते हैं जो संदर्भात्मक अखंडता को प्रस्तावित करना कठिन या असंभव बनाते हैं, जिसके परिणामस्वरूप संभावित रूप से शून्य जॉइन कॉलम होते हैं जिन्हें एसक्यूएल क्वेरी लेखक संशोधित नहीं कर सकता है और जो किसी त्रुटि के संकेत के बिना डेटा को छोड़ने के लिए इनर जॉइन का कारण बनता है। इनर जॉइन का उपयोग करने का विकल्प डेटाबेस डिज़ाइन और डेटा विशेषताओं पर निर्भर करता है। जब  टेबल में सम्मिलित कॉलम में शून्य मान हो सकते हैं, तो बाएं आउटर जॉइन को सामान्यतः इनर जॉइन के लिए प्रतिस्थापित किया जा सकता है।

कोई भी डेटा कॉलम जो शून्य (रिक्त) हो सकता है, उसे कभी भी इनर जॉइन में लिंक के रूप में उपयोग नहीं किया जाना चाहिए, जब तक कि इच्छित परिणाम शून्य मान वाली पंक्तियों को समाप्त करना न हो। यदि परिणाम सेट से शून्य जॉइन कॉलम को निश्चयपूर्वक विस्थापित किया जाता  है, तो इनर जॉइन आउटर जॉइन से तीव्र हो सकता है क्योंकि टेबल जॉइन और फ़िल्टरिंग एक ही चरण में की जाती है। इसके विपरीत, एसक्यूएल व्हेयर क्लॉज में डेटाबेस फ़ंक्शंस के साथ संयोजन में बड़ी मात्रा में क्वेरी में उपयोग किए जाने पर इनर जॉइन के परिणामस्वरूप विनाशकारी रूप से धीमा प्रदर्शन या सर्वर क्रैश भी हो सकता है।  एसक्यूएल व्हेयर क्लॉज़ में फ़ंक्शन के परिणामस्वरूप डेटाबेस अपेक्षाकृत कॉम्पैक्ट टेबल इंडेक्स को अनदेखा कर सकता है। गणना किए गए मान पर निर्भर फ़िल्टर का उपयोग करके पंक्तियों की संख्या को कम करने से पूर्व डेटाबेस दोनों तालिकाओं से चयनित कॉलम को पढ़ और इनर रूप से जॉइन सकता है, जिसके परिणामस्वरूप अपेक्षाकृत भारी मात्रा में अकुशल प्रसंस्करण होता है।

जब परिणाम सेट कई तालिकाओं को जॉइनकर प्रस्तुत किया जाता है, जिसमें संख्यात्मक पहचानकर्ता कोड ( लुकअप तालिका) के पूर्ण-पाठ विवरण देखने के लिए उपयोग की जाने वाली मास्टर तालिकाएं भी सम्मिलित होती हैं, तो विदेशी कुंजी में से किसी में शून्य मान के परिणामस्वरूप परिणाम सेट से पूर्ण पंक्ति को विस्थापित किया जा सकता है, त्रुटि का कोई संकेत नहीं है। जटिल एसक्यूएल क्वेरी जिसमें एक या अधिक इनर जॉइन और कई आउटर जॉइन सम्मिलित होते हैं, इनर जॉइन लिंक कॉलम में शून्य मानों के लिए समान संकट होता है।

इनर जॉइन वाले एसक्यूएल कोड के प्रति प्रतिबद्धता यह मानती है कि शून्य जॉइन कॉलम को भविष्य में होने वाले परिवर्तनों द्वारा प्रस्तुत नहीं किया जाएगा, जिसमें विक्रेता अपडेट, डिज़ाइन परिवर्तन और एप्लिकेशन के डेटा सत्यापन नियमों के बाहर बल्क प्रोसेसिंग जैसे डेटा रूपांतरण, माइग्रेशन, बल्क आयात और मर्ज सम्मिलित हैं।

इनर जॉइन को आगे चलकर समान जॉइन, नेचुरल जॉइन या क्रॉस-जॉइन के रूप में वर्गीकृत किया जा सकता है।

इक्वि-जॉइन
इक्वि-जॉइन विशिष्ट प्रकार का तुलनित्र-आधारित जॉइन है, जो जॉइन-प्रेडिकेट में केवल समानता तुलना का उपयोग करता है। अन्य तुलना ऑपरेटरों (जैसे ) का उपयोग करना जॉइन को इक्वि-जॉइन के रूप में अयोग्य घोषित करता है। ऊपर दिखाई गई क्वेरी पूर्व ही समान-जॉइन का उदाहरण प्रदान कर चुकी है: हम इक्वी-जॉइन को नीचे इस प्रकार लिख सकते हैं,

यदि इक्वि-जॉइन में कॉलमों का नाम समान है, तो एसक्यूएल-92   निर्माण के माध्यम से इक्वि-जॉइन को व्यक्त करने के लिए वैकल्पिक शॉर्टहैंड नोटेशन प्रदान करता है:

चूँकि, निर्माण केवल वाक्यात्मक चीनी से अधिक है,क्योंकि परिणाम सेट स्पष्ट प्रेडिकेट के साथ संस्करण के परिणाम सेट से भिन्न होता है। विशेष रूप से,   सूची में उल्लिखित कोई भी कॉलम जॉइन में प्रत्येक टेबल के लिए एक बार के अतिरिक्त केवल अयोग्य नाम के साथ दिखाई देगा। उपरोक्त स्थिति में, एक ही   कॉलम होगा और कोई   या   नहीं होगा।

क्लॉज एमएस एसक्यूएल सर्वर और Sybase द्वारा समर्थित नहीं है।

नेचुरल जॉइन
नेचुरल जॉइन इक्वी-जॉइन की विशेष स्थिति है। नेचुरल जॉइन (⋈) बाइनरी ऑपरेटर है जिसे (R ⋈ S) के रूप में लिखा जाता है जहां R और S संबंध (डेटाबेस) हैं। नेचुरल जॉइन का परिणाम R और S में टुपल्स के सभी संयोजनों का सेट है जो उनके सामान्य विशेषता नामों पर समान हैं। उदाहरण के लिए एम्प्लॉयी और डिपार्टमेंट और उनके स्वाभाविक जॉइन तालिकाओं पर विचार करें:

इसका उपयोग संबंधों की संरचना को परिभाषित करने के लिए भी किया जा सकता है। उदाहरण के लिए, एम्प्लॉयी और डिपार्टमेंट की संरचना उनका जॉइन है जैसा कि ऊपर दिखाया गया है, सामान्य विशेषता विभागनाम को छोड़कर सभी पर प्रक्षेपित किया गया है। श्रेणी सिद्धांत में, जॉइन बिल्कुल फाइबर उत्पाद है।

नेचुरल जॉइन निश्चित सबसे महत्वपूर्ण ऑपरेटरों में से है क्योंकि यह तार्किक AND का संबंधपरक समकक्ष है। ध्यान दें कि यदि AND से जुड़े दो विधेयों में से प्रत्येक में  एक ही चर दिखाई देता है, तो वह चर एक ही चीज़ के लिए खड़ा होता है और दोनों दिखावे को सदैव एक ही मान से प्रतिस्थापित किया जाना चाहिए। विशेष रूप से, नेचुरल जॉइन उन संबंधों के संयोजन की अनुमति देता है जो किसी विदेशी कुंजी से जुड़े होते हैं। उदाहरण के लिए, उपरोक्त उदाहरण में  विदेशी कुंजी संभवतः Employee.DeptName से Dept.DeptName तक होती है और फिर एम्प्लॉयी और डिपार्टमेंट का नेचुरल जॉइन सभी कर्मचारियों को उनके डिपार्टमेंट के साथ जॉइनता है। यह काम करता है क्योंकि विदेशी कुंजी समान नाम वाली विशेषताओं के मध्य रहती है। यदि ऐसी स्थिति नहीं है जैसे डिपार्टमेंट प्रबंधक से एम्प्लॉयी नाम तक की विदेशी कुंजी में तो नेचुरल जॉइन लेने से पूर्व इन कॉलमों का नाम परिवर्तित करना होगा। इस प्रकार के जॉइन को कभी-कभी 'इक्वी-जॉइन' भी कहा जाता है।

अधिक औपचारिक रूप से नेचुरल जॉइन के शब्दार्थ को इस प्रकार परिभाषित किया गया है:


 * $$R \bowtie S = \left\{ t \cup s \mid t \in R \ \land \ s \in S \ \land \ \mathit{Fun}(t \cup s) \right\}$$,

जहां फन प्रेडिकेट है जो किसी संबंध r के लिए सत्य है यदि और केवल r फ़ंक्शन है। सामान्यतः यह आवश्यक है कि R और S में कम से कम सामान्य विशेषता होनी चाहिए, किन्तु यदि इस बाधा को त्याग दिया जाता है, और R और S में कोई सामान्य विशेषता नहीं है, तो नेचुरल जॉइन बिल्कुल कार्टेशियन उत्पाद बन जाता है।

नेचुरल जॉइन को कोडड के आदिमों के साथ निम्नानुसार अनुकरण किया जा सकता है। मान लीजिए कि c1, ..., cm R और S, के लिए सामान्य विशेषता नाम हैं, r1, ..., rn R के लिए अद्वितीय विशेषता नाम हैं और s1, ..., sk S के लिए अद्वितीय  विशेषता नाम हैं। इसके अतिरिक्त, मान लें कि विशेषता नाम x1, ..., xm न तो R में हैं और न ही S में हैं। प्रथम चरण में अब S में सामान्य विशेषता नामों का नाम परिवर्तित किया जा सकता है:


 * $$T = \rho_{x_1/c_1,\ldots,x_m/c_m}(S) = \rho_{x_1/c_1}(\rho_{x_2/c_2}(\ldots\rho_{x_m/c_m}(S)\ldots))$$

तब हम कार्टेशियन उत्पाद लेते हैं और उन टुपल्स का चयन करते हैं जिन्हें जॉइना जाना है:


 * $$U = \pi_{r_1,\ldots,r_n,c_1,\ldots,c_m,s_1,\ldots,s_k}(P)$$

नेचुरल जॉइन एक प्रकार का इक्वि-जॉइन है जहां जॉइन प्रेडिकेट दोनों तालिकाओं में सभी कॉलमों की तुलना करके अंतर्निहित रूप से उत्पन्न होता है, जिसमें सम्मिलित तालिकाओं में समान कॉलम-नाम होते हैं। परिणामी सम्मिलित टेबल में समान रूप से नामित स्तंभों की प्रत्येक जॉइनी के लिए केवल स्तंभ होता है। ऐसी स्थिति में जब समान नाम वाला कोई कॉलम नहीं मिलता है, तो परिणाम क्रॉस जॉइन होता है।

अधिकांश विशेषज्ञ इस विषय से सहमत हैं कि नेचुरल जॉइन खतरनाक हैं और इसलिए उनके उपयोग को दृढ़ता से हतोत्साहित करते हैं। खतरा अज्ञात स्थिति में नया कॉलम जॉइनने से आता है, जिसका नाम दूसरी टेबल के दूसरे कॉलम के समान है। उपस्थित नेचुरल जॉइन स्वाभाविक रूप से तुलना के लिए नए कॉलम का उपयोग कर सकता है, पूर्व की तुलना में विभिन्न पैरामीटर (विभिन्न कॉलमों से) का उपयोग करके तुलना/मिलान कर सकता है। इस प्रकार उपस्थित क्वेरी भिन्न-भिन्न परिणाम दे सकती है, भले ही तालिकाओं में डेटा परिवर्तित नहीं किया गया है, बल्कि केवल संवर्धित किया गया है। टेबल लिंक को स्वचालित रूप से निर्धारित करने के लिए कॉलम नामों का उपयोग सैकड़ों या हजारों तालिकाओं वाले बड़े डेटाबेस में विकल्प नहीं है, जहां यह नामकरण परंपराओं पर अवास्तविक बाधा डालेगा। वास्तविक विश्व के डेटाबेस सामान्यतः विदेशी कुंजी डेटा के साथ डिज़ाइन किए जाते हैं जो व्यावसायिक नियमों और संदर्भ के कारण निरंतर पॉप्युलेट नहीं होते हैं (शून्य मानों की अनुमति है)। विभिन्न तालिकाओं में समान डेटा के कॉलम नामों को संशोधित करना सामान्य विषय है और कठोर स्थिरता की यह कमी नेचुरल जॉइन को वर्णन के लिए सैद्धांतिक अवधारणा में परिवर्तित कर देती है।

इनर जॉइन के लिए उपरोक्त प्रतिरूप क्वेरी को नेचुरल जॉइन के रूप में निम्नलिखित प्रकार से व्यक्त किया जा सकता है: स्पष्ट  क्लॉज के जैसे, सम्मिलित टेबल में केवल डिपार्टमेंटआईडी कॉलम होता है, जिसमें कोई क्वालीफायर नहीं होता है:

पोस्टग्रेएसक्यूएल, माईएसक्यूएल और ओरेकल नेचुरल जॉइन का समर्थन करते हैं; माइक्रोसॉफ्ट टी-एसक्यूएल और आईबीएम डीबी2 नहीं करते हैं। जॉइन में उपयोग किए गए कॉलम अंतर्निहित हैं, इसलिए जॉइन कोड यह नहीं दिखाता है कि कौन से कॉलम अपेक्षित हैं, और कॉलम नामों में परिवर्तन से परिणाम परिवर्तित हो सकते हैं। एसक्यूएल:2011 मानक में, नेचुरल जॉइन वैकल्पिक F401, "एक्सटेंडेड जॉइन्ड टेबल", पैकेज का भाग हैं।

कई डेटाबेस परिवेशों में कॉलम नाम किसी आउटर विक्रेता द्वारा नियंत्रित होते हैं, क्वेरी डेवलपर द्वारा नहीं होते हैं। नेचुरल जॉइन कॉलम नामों में स्थिरता और स्थिरता मानता है जो विक्रेता द्वारा अनिवार्य संस्करण अपग्रेड के समय परिवर्तित किया जा सकता है।

आउटर जॉइन
सम्मिलित टेबल प्रत्येक पंक्ति को निरंतर रखती है - भले ही कोई अन्य मिलान पंक्ति उपस्थित न हो। आउटर जॉइन को बाएँ आउटर जॉइन, दाएँ आउटर जॉइन और पूर्ण आउटर जॉइन में उप-विभाजित किया जाता है, यह इस पर निर्भर करता है कि किस टेबल की पंक्तियाँ निरंतर रखी गई हैं: बाएँ, दाएँ, या दोनों (इस स्थिति में बाएँ और दाएँ   कीवर्ड के दोनों पक्षों को संदर्भित करते हैं)। इनर जॉइन के जैसे, कोई भी सभी प्रकार के आउटर जॉइन को इक्वि-जॉइन, नेचुरल जॉइन,    (θ-जॉइन), आदि के रूप में उप-वर्गीकृत कर सकता है।

मानक एसक्यूएल में आउटर जॉइनों के लिए कोई अंतर्निहित जॉइन-नोटेशन उपस्थित नहीं है।



बायां आउटर जॉइन
टेबल ए और बी के लिए बाएं आउटर जॉइन (या बस बाएं जॉइन) के परिणाम में सदैव बाईं टेबल (ए) की सभी पंक्तियां सम्मिलित होती हैं, भले ही सम्मिलित होने की स्थिति को सही टेबल (बी) में कोई मिलान पंक्ति नहीं मिलती है। इसका तात्पर्य यह है कि यदि  क्लॉज़ बी में 0 (शून्य) पंक्तियों से युग्मित होता है (ए में दी गई पंक्ति के लिए), तो जॉइन अभी भी परिणाम में पंक्ति लौटाएगा (उस पंक्ति के लिए) - किन्तु बी से प्रत्येक कॉलम में शून्य के साथ है।  बयां आउटर जॉइन सभी को लौटाता है इनर जॉइन के मान और बाईं टेबल के सभी मान जो दाहिनी टेबल से युग्मित नहीं होते हैं, जिसमें लिंक कॉलम में शून्य (रिक्त) मान वाली पंक्तियाँ भी सम्मिलित हैं।

उदाहरण के लिए, यह हमें किसी एम्प्लॉयी का डिपार्टमेंट अन्वेषण की अनुमति देता है, किन्तु फिर भी उन कर्मचारियों को दिखाता है जिन्हें किसी डिपार्टमेंट को नहीं सौंपा गया है (ऊपर दिए गए इनर-जॉइन उदाहरण के विपरीत, जहां बिना असाइन किए गए एम्प्लॉयी को परिणाम से बाहर रखा गया था)।

बाएँ आउटर जॉइन का उदाहरण ( कीवर्ड वैकल्पिक है), अतिरिक्त परिणाम पंक्ति (इनर जॉइन की तुलना में) इटैलिकाइज़्ड के साथ है:

वैकल्पिक सिंटैक्स

ओरेकल अप्रचलित सिंटैक्स का समर्थन करता है: Sybase सिंटैक्स का समर्थन करता है (माइक्रोसॉफ्ट एसक्यूएल सर्वर ने संस्करण 2000 से इस सिंटैक्स को विस्थापित कर दिया है): आईबीएम इनफॉर्मिक्स सिंटैक्स का समर्थन करता है:

दायां आउटर जॉइन
दायां आउटर जॉइन (या दायां जॉइन) बाएं आउटर जॉइन से अधिक इसके अतिरिक्त तालिकाओं के विपरीत व्यवहार से मिलता-जुलता है। दाहिनी टेबल (बी) से प्रत्येक पंक्ति कम से कम एक बार सम्मिलित टेबल में दिखाई देगी। यदि बाईं टेबल (ए) से कोई मिलान पंक्ति उपस्थित नहीं है, तो शून्य उन पंक्तियों के लिए ए से कॉलम में दिखाई देगा जिनका बी में कोई युग्मन नहीं है।

दायां आउटर जॉइन दाहिनी टेबल से सभी मान लौटाता है और बाईं टेबल से मिलान किए गए मान लौटाता है (कोई मिलान न होने की स्थिति में शून्य)। उदाहरण के लिए, यह हमें प्रत्येक एम्प्लॉयी और उसके डिपार्टमेंट को अन्वेषण की अनुमति देता है, किन्तु फिर भी ऐसे डिपार्टमेंट दिखाता है जिनमें कोई एम्प्लॉयी नहीं है।

नीचे दाएं आउटर जॉइन का उदाहरण दिया गया है ( कीवर्ड वैकल्पिक है), अतिरिक्त परिणाम पंक्ति इटैलिकाइज़्ड के साथ है:

दाएं और बाएं आउटर जॉइन कार्यात्मक रूप से समतुल्य हैं। इनमें से कोई भी ऐसी कोई कार्यक्षमता प्रदान नहीं करता है जो दूसरा नहीं करता है, इसलिए जब तक टेबल क्रम स्विच किया जाता है तब तक दाएं और बाएं आउटर जॉइन -दूसरे को प्रतिस्थापित कर सकते हैं।



पूर्ण आउटर जॉइन
वैचारिक रूप से, पूर्ण आउटर जॉइन बाएँ और दाएँ दोनों आउटर जॉइनों को प्रस्तावित करने के प्रभाव को जोड़ता है। जहां पूर्ण आउटर सम्मिलित तालिकाओं में पंक्तियाँ युग्मित नहीं होती हैं, परिणाम सेट में टेबल के प्रत्येक कॉलम के लिए शून्य मान होंगे जिनमें मिलान पंक्ति का अभाव है। उन पंक्तियों के लिए जो युग्मित होती हैं, परिणाम सेट में एकल पंक्ति प्रस्तुत की जाएगी (जिसमें दोनों तालिकाओं से भरे गए कॉलम होंगे)।

उदाहरण के लिए, यह हमें प्रत्येक एम्प्लॉयी को देखने की अनुमति देता है जो डिपार्टमेंट में है और प्रत्येक डिपार्टमेंट जिसमें एम्प्लॉयी है, किन्तु प्रत्येक एम्प्लॉयी को भी देख सकता है जो डिपार्टमेंट का भाग नहीं है और प्रत्येक डिपार्टमेंट जिसमें एम्प्लॉयी नहीं है।

पूर्ण आउटर जॉइन का उदाहरण ( कीवर्ड वैकल्पिक है):

कुछ डेटाबेस प्रणालियाँ सीधे पूर्ण आउटर जॉइन कार्यक्षमता का समर्थन नहीं करती हैं, किन्तु वे क्रमशः बाएँ और दाएँ तालिकाओं से एकल टेबल पंक्तियों के सभी चयनों और इनर जॉइन के उपयोग के माध्यम से इसका अनुकरण कर सकते हैं। वही उदाहरण इस प्रकार दिखाई दे सकता है: अन्य दृष्टिकोण यूनियन हो सकता है, सभी बाएँ आउटर जॉइन और दाएँ आउटर जॉइन माइनस इनर जॉइन है।

सेल्फ-जॉइन
सेल्फ-जॉइन का अर्थ टेबल को स्वयं से जोड़ना है।

उदाहरण

यदि कर्मचारियों के लिए दो भिन्न-भिन्न तालिकाएँ थीं और क्वेरी जिसमें प्रथम टेबल में कर्मचारियों से दूसरी टेबल में कर्मचारियों के समान देश का अनुरोध किया गया था, तो उत्तर टेबल अन्वेषण के लिए सामान्य जॉइन ऑपरेशन का उपयोग किया जा सकता था। चूँकि, सभी एम्प्लॉयी की सूचना बड़ी टेबल में समाहित है।

निम्नलिखित जैसे कि संशोधित  टेबल पर विचार करें :

जिसके परिणामस्वरूप निम्न टेबल उत्पन्न होती है। इस उदाहरण के लिए: मूल प्रश्न को संतुष्ट करने के लिए दो मध्य युग्मों में से केवल की आवश्यकता है, और सबसे ऊपर और सबसे नीचे वाले को इस उदाहरण में कोई दिलचस्पी नहीं है।
 * और  एम्प्लॉयी टेबल की पहली और दूसरी प्रतियों के लिए उपनाम (एसक्यूएल) हैं।
 * स्थिति  विभिन्न देशों में कर्मचारियों के मध्य युग्मों को सम्मिलित नहीं किया गया है। उदाहरण प्रश्न केवल  ही देश में कर्मचारियों के जॉइने चाहता था।
 * स्थिति  जहां जॉइनों को सम्मिलित नहीं किया गया है   पहले एम्प्लॉयी से अधिक या उसके बराबर है   दूसरे एम्प्लॉयी का. दूसरे शब्दों में, इस शर्त का प्रभाव डुप्लिकेट जॉइनियों और स्वयं-जॉइनियों को बाहर करना है। इसके बिना, निम्नलिखित कम उपयोगी टेबल तैयार की जाएगी (नीचे दी गई टेबल परिणाम का केवल जर्मनी भाग प्रदर्शित करती है):

विकल्प
आउटर जॉइन का प्रभाव इनर जॉइन और मुख्य टेबल में उन पंक्तियों के चयन के मध्य यूनियन ऑल का उपयोग करके भी प्राप्त किया जा सकता है जो जुड़ने की शर्त को पूरा नहीं करते हैं। उदाहरण के लिए,

के रूप में भी लिखा जा सकता है

कार्यान्वयन
डेटाबेस-सिस्टम में बहुत से काम का उद्देश्य जॉइन के कुशल कार्यान्वयन पर है, क्योंकि रिलेशनल सिस्टम सामान्यतः जॉइन की मांग करते हैं, फिर भी उनके कुशल निष्पादन को अनुकूलित करने में कठिनाइयों का सामना करना पड़ता है। समस्या इसलिए उत्पन्न होती है क्योंकि इनर जॉइन क्रमविनिमेय और साहचर्य दोनों तरह से काम करते हैं। व्यवहार में, इसका मतलब यह है कि उपयोगकर्ता केवल जुड़ने के लिए तालिकाओं की सूची और उपयोग करने के लिए जुड़ने की शर्तों की आपूर्ति करता है, और डेटाबेस सिस्टम के पास ऑपरेशन करने का सबसे कुशल तरीका निर्धारित करने का कार्य होता है। क्वेरी अनुकूलक यह निर्धारित करता है कि जॉइन वाली क्वेरी को कैसे निष्पादित किया जाए।  क्वेरी ऑप्टिमाइज़र में दो बुनियादी स्वतंत्रताएँ होती हैं:


 * 1) जुड़ने का क्रम: क्योंकि यह कार्यों को क्रमविनिमेय और साहचर्य रूप से जॉइनता है, जिस क्रम में सिस्टम तालिकाओं से जुड़ता है वह क्वेरी के अंतिम परिणाम सेट को नहीं बदलता है। हालाँकि, जॉइन-ऑर्डर का जॉइन ऑपरेशन की लागत पर भारी प्रभाव पड़ सकता है, इसलिए सबसे अच्छा जॉइन ऑर्डर चुनना बहुत महत्वपूर्ण हो जाता है।
 * 2) सम्मिलित होने की विधि: दो तालिकाओं और  जुड़ने की स्थिति को देखते हुए, कई कलन विधि सम्मिलित होने के परिणाम सेट का उत्पादन कर सकते हैं। कौन सा एल्गोरिदम सबसे अधिक कुशलता से चलता है यह इनपुट तालिकाओं के आकार, प्रत्येक टेबल से जुड़ने की स्थिति से मेल खाने वाली पंक्तियों की संख्या और बाकी क्वेरी के लिए आवश्यक संचालन पर निर्भर करता है।

कई जॉइन-एल्गोरिदम अपने इनपुट को अलग तरह से व्यवहार करते हैं। किसी जॉइन के इनपुट को क्रमशः आउटर और इनर जॉइन ऑपरेंड, या बाएँ और दाएँ के रूप में संदर्भित किया जा सकता है। उदाहरण के लिए, नेस्टेड लूप के मामले में, डेटाबेस सिस्टम आउटर संबंध की प्रत्येक पंक्ति के लिए संपूर्ण इनर संबंध को स्कैन करेगा।

कोई भी सम्मिलित होने वाली क्वेरी-योजनाओं को निम्नानुसार वर्गीकृत कर सकता है:
 * लेफ्ट-डीप: योजना में प्रत्येक जॉइन के इनर ऑपरेंड के रूप में बेस टेबल (किसी अन्य जॉइन के बजाय) का उपयोग करना
 * राइट-डीप: योजना में प्रत्येक जॉइन के आउटर ऑपरेंड के रूप में बेस टेबल का उपयोग करना
 * झाड़ीदार: न बाएँ-गहरा, न दाएँ-गहरा; किसी जॉइन के दोनों इनपुट स्वयं जॉइन के परिणामस्वरूप हो सकते हैं

यदि ट्री डेटा संरचना के रूप में तैयार किया जाता है, तो ये नाम क्वेरी योजना की उपस्थिति से प्राप्त होते हैं, जिसमें बाईं ओर आउटर जॉइन संबंध और दाईं ओर इनर संबंध होता है (जैसा कि सम्मेलन तय करता है)।

एल्गोरिदम से जुड़ें
बाइनरी जॉइन ऑपरेशन करने के लिए तीन मौलिक एल्गोरिदम मौजूद हैं: नेस्टेड लूप जॉइन, सॉर्ट-मर्ज जॉइन और हैश जॉइन। सबसे खराब स्थिति में इष्टतम जॉइन एल्गोरिदम, सबसे खराब स्थिति में दो से अधिक संबंधों के मध्य जुड़ने के लिए बाइनरी जॉइन एल्गोरिदम की तुलना में एसिम्प्टोटिक रूप से तेज़ हैं।

जॉइन इन्डेक्सेस
जॉइन इंडेक्स डेटाबेस सूचकांक हैं जो डेटा वेयरहाउस में जॉइन क्वेरी के प्रसंस्करण की सुविधा प्रदान करते हैं: वे वर्तमान में (2012) ओरेकल डेटाबेस द्वारा कार्यान्वयन में उपलब्ध हैं और टेराडाटा. टेराडाटा कार्यान्वयन में, निर्दिष्ट कॉलम, कॉलम पर समग्र कार्य, या या अधिक तालिकाओं से दिनांक कॉलम के घटकों को डेटाबेस दृश्य की परिभाषा के समान सिंटैक्स का उपयोग करके निर्दिष्ट किया जाता है: 64 कॉलम/कॉलम अभिव्यक्तियों को  ल में निर्दिष्ट किया जा सकता है सूचकांक में सम्मिलित हों. वैकल्पिक रूप से, कॉलम जो समग्र डेटा की प्राथमिक कुंजी को परिभाषित करता है, उसे भी निर्दिष्ट किया जा सकता है: समानांतर हार्डवेयर पर, कॉलम मानों का उपयोग सूचकांक की सामग्री को कई डिस्क में विभाजित करने के लिए किया जाता है। जब स्रोत तालिकाओं को उपयोगकर्ताओं द्वारा इंटरैक्टिव रूप से अपडेट किया जाता है, तो जॉइन इंडेक्स की सामग्री स्वचालित रूप से अपडेट हो जाती है। कोई भी क्वेरी जिसका  कहां (एसक्यूएल)  कॉलम या कॉलम ्सप्रेशन के किसी भी संयोजन को निर्दिष्ट करता है जो कि जॉइन इंडेक्स (तथाकथित कवरिंग क्वेरी) में परिभाषित लोगों का सटीक सबसेट है, मूल तालिकाओं और उनके इंडेक्स के बजाय जॉइन इंडेक्स का कारण बनेगा, क्वेरी निष्पादन के दौरान परामर्श लिया जाना।

Oracle कार्यान्वयन स्वयं को बिटमैप सूचकांक  का उपयोग करने तक सीमित रखता है। बिटमैप जॉइन इंडेक्स का उपयोग कम-कार्डिनैलिटी कॉलम के लिए किया जाता है (यानी, ओरेकल दस्तावेज़ के अनुसार 300 से कम विशिष्ट मान वाले कॉलम): यह कई संबंधित तालिकाओं से कम-कार्डिनैलिटी कॉलम को जॉइनता है। Oracle जिस उदाहरण का उपयोग करता है वह  इन्वेंट्री सिस्टम का है, जहां विभिन्न आपूर्तिकर्ता अलग-अलग हिस्से प्रदान करते हैं। डेटाबेस स्कीमा में तीन लिंक्ड टेबल हैं: दो मास्टर टेबल, पार्ट और सप्लायर, और  डिटेल टेबल, इन्वेंटरी। अंतिम  अनेक-से-अनेक टेबल है जो आपूर्तिकर्ता को भाग से जॉइनती है, और इसमें सबसे अधिक पंक्तियाँ होती हैं। प्रत्येक भाग का  भाग प्रकार होता है, और प्रत्येक आपूर्तिकर्ता अमेरिका में स्थित होता है, और उसके पास  राज्य कॉलम होता है। अमेरिका में 60 से अधिक राज्य+क्षेत्र नहीं हैं, और 300 से अधिक भाग प्रकार नहीं हैं। बिटमैप जॉइन इंडेक्स को उपरोक्त तीन तालिकाओं पर  मानक तीन-टेबल जॉइन का उपयोग करके परिभाषित किया गया है, और इंडेक्स के लिए पार्ट_टाइप और सप्लायर_स्टेट कॉलम निर्दिष्ट किया गया है। हालाँकि, इसे इन्वेंटरी टेबल पर परिभाषित किया गया है, भले ही कॉलम पार्ट_टाइप और सप्लायर_स्टेट क्रमशः सप्लायर और पार्ट से उधार लिए गए हों।

टेराडेटा के लिए, ओरेकल बिटमैप जॉइन इंडेक्स का उपयोग केवल प्रश्न का उत्तर देने के लिए किया जाता है जब क्वेरी का व्हेयर क्लॉज उन कॉलमों तक सीमित होता है जो जॉइन इंडेक्स में सम्मिलित होते हैं।

स्ट्रैट जॉइन
कुछ डेटाबेस सिस्टम उपयोगकर्ता को सिस्टम को विशेष क्रम में तालिकाओं को पढ़ने के लिए बाध्य करने की अनुमति देते हैं। इसका उपयोग तब किया जाता है जब जॉइन ऑप्टिमाइज़र तालिकाओं को अकुशल क्रम में पढ़ने का विकल्प चयन किया जाता है। उदाहरण के लिए, MySQL में कमांड  तालिकाओं को क्वेरी में सूचीबद्ध क्रम में ही पढ़ता है।

यह भी देखें

 * जुड़ें (संबंधपरक बीजगणित)
 * एंटीजॉइन
 * सेट ऑपरेशन (एसक्यूएल)

आउटर संबंध

 * Specific to products:
 * Sybase ASE 15 Joins
 * Myएसक्यूएल 8.0 Joins
 * Postgreएसक्यूएल 14 Joins
 * Joins in Microsoft एसक्यूएल Server
 * Joins in MaxDB 7.6
 * Joins in Oracle 12c R1
 * Oracle एसक्यूएल Joins