MySQL जॉइन्स ट्यूटोरियल: आंतरिक, बाहरी, बायां, दायां, क्रॉस
जॉइन्स क्या हैं?
जॉइन्स दो या अधिक डेटाबेस तालिकाओं से डेटा पुनर्प्राप्त करने में सहायता करते हैं।
तालिकाएं प्राथमिक और विदेशी कुंजियों का उपयोग करके परस्पर संबंधित हैं।
नोट: SQL सीखने वालों के बीच JOIN सबसे ज़्यादा गलत समझा जाने वाला विषय है। सरलता और समझने में आसानी के लिए, हम अभ्यास के लिए एक नए डेटाबेस का उपयोग करेंगे। जैसा कि नीचे दिखाया गया है
id | पहला नाम | अंतिम नाम | मूवी_आईडी |
---|---|---|---|
1 | ऐडम | स्मिथ | 1 |
2 | रवि | कुमार | 2 |
3 | सुसान | डेविडसन | 5 |
4 | विंच | Adrianna | 8 |
5 | ली | पोंग | 10 |
id | शीर्षक | वर्ग |
---|---|---|
1 | हत्यारे पंथ: अंगारे | एनिमेशन |
2 | रियल स्टील(2012) | एनिमेशन |
3 | एल्विन और Chipmunks | एनिमेशन |
4 | टिन टिन के एडवेंचर्स | एनिमेशन |
5 | सुरक्षित (2012) | कार्य |
6 | सेफ हाउस(2012) | कार्य |
7 | जीआईए | 18 + |
8 | समय सीमा 2009 | 18 + |
9 | गंदा चित्र | 18 + |
10 | मार्ले और मैं | रोमांस |
जोड़ों के प्रकार
क्रॉस जॉइन
क्रॉस जॉइन, जॉइन का सबसे सरल रूप है जो एक डेटाबेस तालिका की प्रत्येक पंक्ति को दूसरी डेटाबेस तालिका की सभी पंक्तियों से मिलाता है।
दूसरे शब्दों में, यह हमें पहली तालिका की प्रत्येक पंक्ति का दूसरी तालिका के सभी रिकार्डों के साथ संयोजन देता है।
मान लीजिए कि हम सभी मूवी रिकॉर्ड्स के विरुद्ध सभी सदस्य रिकॉर्ड्स प्राप्त करना चाहते हैं, तो हम अपने इच्छित परिणाम प्राप्त करने के लिए नीचे दी गई स्क्रिप्ट का उपयोग कर सकते हैं।
SELECT * FROM `movies` CROSS JOIN `members`
उपरोक्त स्क्रिप्ट को निष्पादित करना MySQL कार्यक्षेत्र हमें निम्नलिखित परिणाम मिलते हैं।
id | title | id | first_name | last_name | movie_id | |
---|---|---|---|---|---|---|
1 | ASSASSIN'S CREED: EMBERS | Animations | 1 | Adam | Smith | 1 |
1 | ASSASSIN'S CREED: EMBERS | Animations | 2 | Ravi | Kumar | 2 |
1 | ASSASSIN'S CREED: EMBERS | Animations | 3 | Susan | Davidson | 5 |
1 | ASSASSIN'S CREED: EMBERS | Animations | 4 | Jenny | Adrianna | 8 |
1 | ASSASSIN'S CREED: EMBERS | Animations | 6 | Lee | Pong | 10 |
2 | Real Steel(2012) | Animations | 1 | Adam | Smith | 1 |
2 | Real Steel(2012) | Animations | 2 | Ravi | Kumar | 2 |
2 | Real Steel(2012) | Animations | 3 | Susan | Davidson | 5 |
2 | Real Steel(2012) | Animations | 4 | Jenny | Adrianna | 8 |
2 | Real Steel(2012) | Animations | 6 | Lee | Pong | 10 |
3 | Alvin and the Chipmunks | Animations | 1 | Adam | Smith | 1 |
3 | Alvin and the Chipmunks | Animations | 2 | Ravi | Kumar | 2 |
3 | Alvin and the Chipmunks | Animations | 3 | Susan | Davidson | 5 |
3 | Alvin and the Chipmunks | Animations | 4 | Jenny | Adrianna | 8 |
3 | Alvin and the Chipmunks | Animations | 6 | Lee | Pong | 10 |
4 | The Adventures of Tin Tin | Animations | 1 | Adam | Smith | 1 |
4 | The Adventures of Tin Tin | Animations | 2 | Ravi | Kumar | 2 |
4 | The Adventures of Tin Tin | Animations | 3 | Susan | Davidson | 5 |
4 | The Adventures of Tin Tin | Animations | 4 | Jenny | Adrianna | 8 |
4 | The Adventures of Tin Tin | Animations | 6 | Lee | Pong | 10 |
5 | Safe (2012) | Action | 1 | Adam | Smith | 1 |
5 | Safe (2012) | Action | 2 | Ravi | Kumar | 2 |
5 | Safe (2012) | Action | 3 | Susan | Davidson | 5 |
5 | Safe (2012) | Action | 4 | Jenny | Adrianna | 8 |
5 | Safe (2012) | Action | 6 | Lee | Pong | 10 |
6 | Safe House(2012) | Action | 1 | Adam | Smith | 1 |
6 | Safe House(2012) | Action | 2 | Ravi | Kumar | 2 |
6 | Safe House(2012) | Action | 3 | Susan | Davidson | 5 |
6 | Safe House(2012) | Action | 4 | Jenny | Adrianna | 8 |
6 | Safe House(2012) | Action | 6 | Lee | Pong | 10 |
7 | GIA | 18+ | 1 | Adam | Smith | 1 |
7 | GIA | 18+ | 2 | Ravi | Kumar | 2 |
7 | GIA | 18+ | 3 | Susan | Davidson | 5 |
7 | GIA | 18+ | 4 | Jenny | Adrianna | 8 |
7 | GIA | 18+ | 6 | Lee | Pong | 10 |
8 | Deadline(2009) | 18+ | 1 | Adam | Smith | 1 |
8 | Deadline(2009) | 18+ | 2 | Ravi | Kumar | 2 |
8 | Deadline(2009) | 18+ | 3 | Susan | Davidson | 5 |
8 | Deadline(2009) | 18+ | 4 | Jenny | Adrianna | 8 |
8 | Deadline(2009) | 18+ | 6 | Lee | Pong | 10 |
9 | The Dirty Picture | 18+ | 1 | Adam | Smith | 1 |
9 | The Dirty Picture | 18+ | 2 | Ravi | Kumar | 2 |
9 | The Dirty Picture | 18+ | 3 | Susan | Davidson | 5 |
9 | The Dirty Picture | 18+ | 4 | Jenny | Adrianna | 8 |
9 | The Dirty Picture | 18+ | 6 | Lee | Pong | 10 |
10 | Marley and me | Romance | 1 | Adam | Smith | 1 |
10 | Marley and me | Romance | 2 | Ravi | Kumar | 2 |
10 | Marley and me | Romance | 3 | Susan | Davidson | 5 |
10 | Marley and me | Romance | 4 | Jenny | Adrianna | 8 |
10 | Marley and me | Romance | 6 | Lee | Pong | 10 |
अंदरूनी शामिल हों
आंतरिक JOIN का उपयोग दोनों तालिकाओं से उन पंक्तियों को वापस करने के लिए किया जाता है जो दी गई शर्त को पूरा करती हैं।
मान लीजिए, आप उन सदस्यों की सूची प्राप्त करना चाहते हैं जिन्होंने फ़िल्में किराए पर ली हैं, साथ ही उनके द्वारा किराए पर ली गई फ़िल्मों के शीर्षक भी। आप इसके लिए बस एक INNER JOIN का उपयोग कर सकते हैं, जो दी गई शर्तों को पूरा करने वाली दोनों तालिकाओं से पंक्तियाँ लौटाता है।
SELECT members.`first_name` , members.`last_name` , movies.`title` FROM members ,movies WHERE movies.`id` = members.`movie_id`
उपरोक्त स्क्रिप्ट को निष्पादित करने पर
first_name | last_name | title |
---|---|---|
Adam | Smith | ASSASSIN'S CREED: EMBERS |
Ravi | Kumar | Real Steel(2012) |
Susan | Davidson | Safe (2012) |
Jenny | Adrianna | Deadline(2009) |
Lee | Pong | Marley and me |
ध्यान दें कि समान परिणाम प्राप्त करने के लिए उपरोक्त परिणाम स्क्रिप्ट को निम्नानुसार भी लिखा जा सकता है।
SELECT A.`first_name` , A.`last_name` , B.`title` FROM `members`AS A INNER JOIN `movies` AS B ON B.`id` = A.`movie_id`
बाहरी जोड़
MySQL बाहरी JOINs दोनों तालिकाओं से मेल खाते सभी रिकॉर्ड लौटाते हैं।
यह सम्मिलित तालिका में कोई मिलान न होने वाले रिकॉर्ड का पता लगा सकता है। यह रिटर्न करता है नल यदि कोई मिलान नहीं मिलता है तो सम्मिलित तालिका के अभिलेखों के लिए मान।
भ्रमित करने वाला लग रहा है? आइए एक उदाहरण देखें –
बायाँ शामिल हों
मान लीजिए कि अब आप सभी मूवीज के शीर्षक और उन्हें किराए पर लेने वाले सदस्यों के नाम प्राप्त करना चाहते हैं। यह स्पष्ट है कि कुछ मूवीज किसी ने किराए पर नहीं ली हैं। हम बस इसका उपयोग कर सकते हैं बायाँ शामिल हों उद्देश्य के लिए।
LEFT JOIN बाईं ओर की तालिका से सभी पंक्तियों को लौटाता है, भले ही दाईं ओर की तालिका में कोई मेल खाती पंक्ति न मिली हो। जहां दाईं ओर की तालिका में कोई मिलान नहीं मिलता, वहां NULL लौटाया जाता है।
SELECT A.`title` , B.`first_name` , B.`last_name` FROM `movies` AS A LEFT JOIN `members` AS B ON B.`movie_id` = A.`id`
उपरोक्त स्क्रिप्ट को निष्पादित करना MySQL वर्कबेंच देता है। आप देख सकते हैं कि लौटाए गए परिणाम में जो नीचे सूचीबद्ध है, उन फिल्मों के लिए जो किराए पर नहीं ली गई हैं, सदस्य नाम फ़ील्ड में NULL मान हैं। इसका मतलब है कि उस विशेष फिल्म के लिए कोई मेल खाने वाला सदस्य नहीं मिला।
title | first_name | last_name |
---|---|---|
ASSASSIN'S CREED: EMBERS | Adam | Smith |
Real Steel(2012) | Ravi | Kumar |
Safe (2012) | Susan | Davidson |
Deadline(2009) | Jenny | Adrianna |
Marley and me | Lee | Pong |
Alvin and the Chipmunks | NULL | NULL |
The Adventures of Tin Tin | NULL | NULL |
Safe House(2012) | NULL | NULL |
GIA | NULL | NULL |
The Dirty Picture | NULL | NULL |
सही शामिल हैं
RIGHT JOIN स्पष्ट रूप से LEFT JOIN के विपरीत है। RIGHT JOIN दाईं ओर की तालिका से सभी कॉलम लौटाता है, भले ही बाईं ओर की तालिका में कोई मिलान वाली पंक्ति न मिली हो। जहाँ बाईं ओर की तालिका में कोई मिलान नहीं मिला है, वहाँ NULL लौटाया जाता है।
हमारे उदाहरण में, मान लें कि आपको सदस्यों के नाम और उनके द्वारा किराए पर ली गई फ़िल्में प्राप्त करने की आवश्यकता है। अब हमारे पास एक नया सदस्य है जिसने अभी तक कोई फ़िल्म किराए पर नहीं ली है
SELECT A.`first_name` , A.`last_name`, B.`title` FROM `members` AS A RIGHT JOIN `movies` AS B ON B.`id` = A.`movie_id`
उपरोक्त स्क्रिप्ट को निष्पादित करना MySQL कार्यक्षेत्र निम्नलिखित परिणाम देता है।
first_name | last_name | title |
---|---|---|
Adam | Smith | ASSASSIN'S CREED: EMBERS |
Ravi | Kumar | Real Steel(2012) |
Susan | Davidson | Safe (2012) |
Jenny | Adrianna | Deadline(2009) |
Lee | Pong | Marley and me |
NULL | NULL | Alvin and the Chipmunks |
NULL | NULL | The Adventures of Tin Tin |
NULL | NULL | Safe House(2012) |
NULL | NULL | GIA |
NULL | NULL | The Dirty Picture |
“ON” और “USING” क्लॉज़
उपरोक्त JOIN क्वेरी उदाहरणों में, हमने तालिकाओं के बीच रिकॉर्ड्स का मिलान करने के लिए ON क्लॉज का उपयोग किया है।
USING क्लॉज का उपयोग भी उसी उद्देश्य के लिए किया जा सकता है। का उपयोग करते हुए क्या यह दोनों तालिकाओं में मेल खाने वाले स्तंभों के लिए समान नाम होना आवश्यक है।
अब तक “मूवीज़” टेबल में हमने इसकी प्राथमिक कुंजी का उपयोग “id” नाम से किया है। हमने “सदस्य” टेबल में इसे “movie_id” नाम से संदर्भित किया है।
आइए “मूवीज़” टेबल के “id” फ़ील्ड का नाम बदलकर “movie_id” रखें। हम ऐसा इसलिए करते हैं ताकि फ़ील्ड के नाम एक जैसे मिलें।
ALTER TABLE `movies` CHANGE `id` `movie_id` INT( 11 ) NOT NULL AUTO_INCREMENT;
अब आइए उपरोक्त LEFT JOIN उदाहरण के साथ USING का प्रयोग करें।
SELECT A.`title` , B.`first_name` , B.`last_name` FROM `movies` AS A LEFT JOIN `members` AS B USING ( `movie_id` )
उपयोग करने के अलावा ON और जॉइन के साथ उपयोग करना आप कई अन्य का उपयोग कर सकते हैं MySQL जैसे खंड समूह द्वारा, जहां और यहां तक कि जैसे कार्य SUM, AVG, आदि
हमें जॉइन्स का उपयोग क्यों करना चाहिए?
अब आप सोच सकते हैं कि जब हम क्वेरी चलाकर वही काम कर सकते हैं तो हम JOIN का इस्तेमाल क्यों करते हैं। खास तौर पर अगर आपको डेटाबेस प्रोग्रामिंग का थोड़ा अनुभव है तो आप जानते होंगे कि हम एक-एक करके क्वेरी चला सकते हैं, हर क्वेरी के आउटपुट का इस्तेमाल लगातार क्वेरी में कर सकते हैं। बेशक, यह संभव है। लेकिन JOIN का इस्तेमाल करके आप किसी भी सर्च पैरामीटर के साथ सिर्फ़ एक क्वेरी का इस्तेमाल करके काम पूरा कर सकते हैं। दूसरी तरफ़ MySQL बेहतर प्रदर्शन प्राप्त कर सकते हैं जॉइन के साथ क्योंकि यह इंडेक्सिंग का उपयोग कर सकता है। कई क्वेरी चलाने के बजाय केवल एकल जॉइन क्वेरी का उपयोग करने से सर्वर ओवरहेड कम होता है। इसके बजाय कई क्वेरी का उपयोग करने से डेटा ट्रांसफर अधिक होता है MySQL और अनुप्रयोग (सॉफ्टवेयर)। इसके अलावा, अनुप्रयोग के अंत में भी अधिक डेटा हेरफेर की आवश्यकता होती है।
यह स्पष्ट है कि हम बेहतर परिणाम प्राप्त कर सकते हैं MySQL और JOINs के उपयोग से अनुप्रयोग प्रदर्शन।
सारांश
- JOINS हमें एक से अधिक तालिकाओं से डेटा को एक एकल परिणाम सेट में संयोजित करने की अनुमति देता है।
- सब क्वेरीज़ की तुलना में JOINS का प्रदर्शन बेहतर है
- INNER JOINS केवल वे पंक्तियाँ लौटाता है जो दिए गए मानदंडों को पूरा करती हैं।
- OUTER JOINS उन पंक्तियों को भी लौटा सकता है जहाँ कोई मिलान नहीं मिला है। बेमेल पंक्तियों को NULL कीवर्ड के साथ लौटाया जाता है।
- प्रमुख जॉइन प्रकारों में इनर, लेफ्ट आउटर, राइट आउटर, क्रॉस जॉइन आदि शामिल हैं।
- JOIN ऑपरेशन में अक्सर इस्तेमाल किया जाने वाला क्लॉज़ “ON” है। “USING” क्लॉज़ के लिए ज़रूरी है कि मेल खाने वाले कॉलम एक ही नाम के हों।
- JOINS का उपयोग अन्य क्लॉजों में भी किया जा सकता है जैसे GROUP BY, WHERE, SUB QUERIES, AGGREGATE FUNCTIONS आदि।