जैसा कि हम जानते हैं कि MySQL SELECT का उपयोग एक समय में एक ही टेबल से जानकारी प्राप्त करने के लिए किया जा सकता है लेकिन सभी प्रश्नों का उत्तर केवल एक टेबल का उपयोग करके नहीं दिया जा सकता है। तो उपर्युक्त उद्देश्य के लिए यानी एकाधिक तालिकाओं में संग्रहीत जानकारी पर आरेखण, हम जॉइन ऑपरेशन का उपयोग कर सकते हैं।
मूल रूप से, MySQL जॉइन दो या दो से अधिक तालिकाओं के डेटा को उनके बीच सामान्य कॉलम के मूल्यों के आधार पर जोड़ने की एक विधि है, जिसके परिणामस्वरूप एक नई अस्थायी तालिका होती है। दूसरे शब्दों में, हम कह सकते हैं कि एक MySQL जॉइन हमें एक नई अस्थायी तालिका में दो या दो से अधिक तार्किक रूप से संबंधित तालिकाओं से रिकॉर्ड प्राप्त करने में सक्षम बनाता है। नई अस्थायी तालिका उस कॉलम के आधार पर बनाई गई है जिसे दो टेबल साझा करते हैं, जो तुलना के सार्थक कॉलम का प्रतिनिधित्व करता है।
सामान्य मान आमतौर पर समान कॉलम नाम और डेटा-प्रकार होते हैं जो शामिल होने वाली दोनों भाग लेने वाली तालिका में दिखाई देते हैं। इन कॉलमों को जॉइन की या कॉमन की कहा जाता है।
MySQL निम्न प्रकार के जॉइन का समर्थन करता है:
क्रॉस जॉइन करें
दरअसल, क्रॉस जॉइन जॉइन का मूल रूप है। यदि हमारे पास दो टेबल हैं, तो यह तालिका 1 की प्रत्येक पंक्ति लेता है और इसे तालिका 2 की प्रत्येक पंक्ति में जोड़ता है। इसलिए यदि तालिका 1 में 3 पंक्तियाँ हैं और तालिका 2 में 2 पंक्तियाँ हैं तो हमें इन तालिकाओं को जोड़ने के बाद कुल 6 पंक्तियाँ मिलेंगी। इसे समझने के लिए, हम tbl_1 और tbl_2 नाम की दो तालिकाओं का उदाहरण ले रहे हैं जिनमें निम्न डेटा है:
mysql> Select * from tbl_1; +----+--------+ | Id | Name | +----+--------+ | 1 | Gaurav | | 2 | Rahul | | 3 | Raman | | 4 | Aarav | +----+--------+ 4 rows in set (0.00 sec) mysql> Select * from tbl_2; +----+---------+ | Id | Name | +----+---------+ | A | Aarav | | B | Mohan | | C | Jai | | D | Harshit | +----+---------+ 4 rows in set (0.00 sec)
अब, नीचे दी गई क्वेरी उपर्युक्त तालिकाओं के बीच क्रॉस जॉइन करेगी।
mysql> Select tbl_1.id, tbl_2.id FROM tbl_1 CROSS JOIN tbl_2; +----+----+ | id | id | +----+----+ | 1 | A | | 2 | A | | 3 | A | | 4 | A | | 1 | B | | 2 | B | | 3 | B | | 4 | B | | 1 | C | | 2 | C | | 3 | C | | 4 | C | | 1 | D | | 2 | D | | 3 | D | | 4 | D | +----+----+ 16 rows in set (0.00 sec)
आंतरिक जुड़ाव या समान शामिल हों
एक आंतरिक जुड़ाव बनाने के लिए हमें एक विशेष शर्त निर्दिष्ट करने की आवश्यकता होती है जिसे join-predicate के रूप में जाना जाता है। वास्तव में इनर या इक्वी जॉइन करने के लिए दो जॉइन टेबल में कॉलम वैल्यू से मेल खाने के लिए पंक्तियों की आवश्यकता होती है। इसे समझने के लिए, निम्नलिखित क्वेरी 'tbl_1' और 'tbl_2' नाम की तालिकाओं में शामिल हो जाएंगी।
mysql> SELECT tbl_1.id,tbl_2.id FROM tbl_1 INNER JOIN tbl_2 ON tbl_1.name = tbl_2.name; +----+----+ | id | id | +----+----+ | 4 | A | +----+----+ 1 row in set (0.00 sec)
परिणाम सेट से पता चलता है कि कॉलम नाम में tbl_1 में id =4 और tbl_2 में id ='A' के लिए समान मान हैं।
बाएं शामिल हों
एक जॉइन-प्रेडिकेट भी लेफ्ट जॉइन के लिए आवश्यक है जैसा कि इनर जॉइन में आवश्यक था। अंतर केवल इतना है कि LEFT जॉइन का उपयोग करके दो तालिकाओं को जोड़ते समय, लेफ्ट टेबल और राइट टेबल की अवधारणा पेश की जाती है। यह बाईं तालिका में सभी पंक्तियों को लौटाता है, जिसमें पंक्तियाँ शामिल हैं जो जॉइन-प्रेडिकेट को संतुष्ट करती हैं और वे पंक्तियाँ भी जो जॉइन-प्रेडिकेट को संतुष्ट नहीं करती हैं। उन पंक्तियों के लिए जो जॉइन-प्रेडिकेट से मेल नहीं खातीं, NULL परिणाम सेट में दाएँ तालिका के कॉलम में दिखाई देता है। इसे समझने के लिए, तालिका tbl_1 और tbl_2 का उपयोग करके निम्नलिखित क्वेरी LEFT जॉइन करें:
mysql> SELECT tbl_1.id,tbl_2.id FROM tbl_1 LEFT JOIN tbl_2 ON tbl_1.name = tbl_2.name; +----+------+ | id | id | +----+------+ | 1 | NULL | | 2 | NULL | | 3 | NULL | | 4 | A | +----+------+ 4 rows in set (0.02 sec)
राइट जॉइन करें
यह LEFT जॉइन के समान है सिवाय इसके कि तालिकाओं का उपचार उलट दिया जाता है। राइट जॉइन के साथ राइट टेबल से प्रत्येक पंक्ति परिणाम सेट में दिखाई देगी। दाएँ तालिका में उन पंक्तियों के लिए जिनमें बाएँ तालिका में मेल खाने वाली पंक्तियाँ नहीं हैं, NULL बाईं तालिका के स्तंभों के लिए प्रकट होता है। इसे समझने के लिए, तालिका tbl_1 और tbl_2 का उपयोग करके निम्नलिखित क्वेरी राइट जॉइन करें:
mysql> SELECT tbl_1.id,tbl_2.id -> FROM tbl_1 RIGHT JOIN tbl_2 ON tbl_1.name = tbl_2.name; +------+----+ | id | id | +------+----+ | 4 | A | | NULL | B | | NULL | C | | NULL | D | +------+----+ 4 rows in set (0.00 sec)