जैसा कि हम जानते हैं कि MySQL SELECT का उपयोग एक समय में एक टेबल से जानकारी प्राप्त करने के लिए किया जा सकता है लेकिन सभी प्रश्नों का उत्तर केवल एक टेबल का उपयोग करके नहीं दिया जा सकता। इसलिए उपरोक्त उद्देश्य के लिए यानी एकाधिक टेबल में संग्रहीत जानकारी पर आधारित, हम जॉइन ऑपरेशन का उपयोग कर सकते हैं।
मूल रूप से, MySQL जॉइन उनके बीच सामान्य कॉलम के मानों के आधार पर दो या अधिक टेबल से डेटा को लिंक करने की एक विधि है, जिसके परिणामस्वरूप एक नई अस्थायी टेबल बनती है। दूसरे शब्दों में, हम कह सकते हैं कि MySQL जॉइन हमें दो या अधिक तार्किक रूप से संबंधित टेबल से रिकॉर्ड को एक नई अस्थायी टेबल में प्राप्त करने में सक्षम बनाता है। नई अस्थायी टेबल उन कॉलम के आधार पर बनाई जाती है जो दो टेबल साझा करते हैं, जो तुलना के सार्थक कॉलम को दर्शाते हैं।
सामान्य मान आमतौर पर वही कॉलम नाम और डेटा-टाइप होते हैं जो जॉइन की जा रही दोनों भाग लेने वाली टेबल में दिखाई देते हैं। इन कॉलम को जॉइन की या सामान्य की कहा जाता है।
MySQL निम्न प्रकार के जॉइन का समर्थन करता है:
क्रॉस जॉइन (Cross Join)
वास्तव में, क्रॉस जॉइन जॉइन का मूल रूप है। यदि हमारे पास दो टेबल हैं, तो यह टेबल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)
अब, नीचे दी गई क्वेरी उपरोक्त उल्लिखित टेबल के बीच CROSS JOIN करेगी।
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)
इनर जॉइन या इक्वि जॉइन (Inner Join or Equi join)
इनर जॉइन बनाने के लिए हमें एक विशेष शर्त निर्दिष्ट करनी होगी जिसे जॉइन-प्रेडिकेट के रूप में जाना जाता है। वास्तव में इनर या इक्वि जॉइन को दो जॉइन की गई टेबल में पंक्तियों की आवश्यकता होती है जिनमें मिलान वाले कॉलम मान हों। इसे समझने के लिए, निम्न क्वेरी '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 Join)
लेफ्ट जॉइन के लिए भी जॉइन-प्रेडिकेट आवश्यक है जैसा कि इनर जॉइन के लिए आवश्यक था। केवल अंतर यह है कि जब 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)
राइट जॉइन (Right Join)
यह LEFT जॉइन के समान है सिवाय इसके कि टेबल का उपचार उल्टा होता है। RIGHT जॉइन के साथ राइट टेबल की प्रत्येक पंक्ति परिणाम सेट में दिखाई देगी। राइट टेबल की उन पंक्तियों के लिए जिनमें लेफ्ट टेबल में मिलान वाली पंक्तियाँ नहीं हैं, लेफ्ट टेबल के कॉलम के लिए NULL दिखाई देता है। इसे समझने के लिए, टेबल tbl_1 और tbl_2 का उपयोग करके निम्न क्वेरी RIGHT जॉइन करती है:
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)