क्या हैं?
जुड़ने से दो या अधिक डेटाबेस तालिकाओं से डेटा प्राप्त करने में मदद मिलती है। टेबल प्राथमिक और विदेशी कुंजी का उपयोग करके परस्पर संबंधित हैं।नोट: JOIN SQL लीनर्स में सबसे गलत विषय है। सरलता और समझने में आसानी के लिए, हम नमूने का अभ्यास करने के लिए एक नए डेटाबेस का उपयोग करेंगे। नीचे के रूप में
ईद | संतोष | उपनाम | movie_id |
---|---|---|---|
1 | एडम | लोहार | 1 |
२ | रवि | कुमार | २ |
३ | सुसान | डेविडसन | ५ |
४ | जेनी | एड्रिआना | । |
६ | ली | पांग | १० |
ईद | शीर्षक | वर्ग |
---|---|---|
1 | ASSASSIN's बनाया: EMBERS | एनिमेशन |
२ | रियल स्टील (2012) | एनिमेशन |
३ | एल्विन और गिलहरी | एनिमेशन |
४ | टिन टिन के एडवेंचर्स | एनिमेशन |
५ | सेफ (2012) | कार्य |
६ | सेफ हाउस (2012) | कार्य |
। | जिया | 18+ |
। | समय सीमा 2009 | 18+ |
९ | गंदा चित्र | 18+ |
१० | मार्ले और मैं | रोमांस |
जुड़ने के प्रकार
जॉय क्रॉस करें
क्रॉस जॉइन JOIN का सबसे सरल रूप है जो प्रत्येक पंक्ति को एक डेटाबेस तालिका से दूसरे की सभी पंक्तियों से मेल खाता है।
दूसरे शब्दों में, यह हमें दूसरी तालिका के सभी रिकॉर्ड के साथ पहली तालिका की प्रत्येक पंक्ति का संयोजन देता है।
मान लीजिए कि हम सभी मूवी रिकॉर्ड के खिलाफ सभी सदस्य रिकॉर्ड प्राप्त करना चाहते हैं, तो हम अपने वांछित परिणाम प्राप्त करने के लिए नीचे दी गई स्क्रिप्ट का उपयोग कर सकते हैं।
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 |
आंतरिक रूप से जुड़ा
इनर जॉइन का उपयोग दोनों टेबलों से पंक्तियों को वापस करने के लिए किया जाता है जो दी गई स्थिति को पूरा करते हैं।
मान लीजिए, आप उन सदस्यों की सूची प्राप्त करना चाहते हैं, जिन्होंने अपने द्वारा किराए पर फिल्मों के शीर्षकों के साथ फिल्मों को किराए पर लिया है। आप बस उसके लिए एक INNER JOIN का उपयोग कर सकते हैं, जो दी गई शर्तों से संतुष्ट दोनों तालिकाओं से पंक्तियों को लौटाता है।
SELECT members.`first_name` , members.`last_name` , movies.`title`FROM members ,moviesWHERE 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 AINNER JOIN `movies` AS BON B.`id` = A.`movie_id`
बाहरी शामिल हैं
MySQL आउटर जॉइन सभी टेबलों से मेल खाते हुए सभी रिकॉर्ड लौटाता है।
इसमें शामिल तालिका में कोई मैच नहीं होने के रिकॉर्ड का पता लगा सकता है। यदि कोई मेल नहीं मिला है, तो यह शामिल तालिका के रिकॉर्ड के लिए पूर्ण मान लौटाता है ।
भ्रामक लगता है? आइए एक उदाहरण देखें -
बाँया जोड़
अब मान लें कि आप सभी फिल्मों के शीर्षक एक साथ उन सदस्यों के नाम के साथ प्राप्त करना चाहते हैं, जिन्होंने उन्हें किराए पर दिया है। यह स्पष्ट है कि कुछ फिल्में किसी एक द्वारा किराए पर नहीं ली जा रही हैं। हम बस इस उद्देश्य के लिए बाएँ का उपयोग कर सकते हैं ।
बाईं ओर तालिका में दाईं ओर तालिका में कोई मिलान पंक्तियाँ नहीं मिलने पर भी बाईं ओर से तालिका में सभी पंक्तियाँ मिलती हैं। जहां दाईं ओर की तालिका में कोई मिलान नहीं मिला है, NULL को वापस लौटा दिया गया है।
SELECT A.`title` , B.`first_name` , B.`last_name`FROM `movies` AS ALEFT JOIN `members` AS BON 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 |
सही शामिल हैं
राइट जॉइन जाहिर तौर पर लेफ्ट जॉइन के विपरीत है। दाईं ओर स्थित तालिका में कोई मिलान पंक्तियाँ नहीं मिली हैं, तो दाईं ओर तालिका से सभी स्तंभों में दायें जोड़ देता है। जहां बाईं ओर टेबल में कोई मैच नहीं मिला है, NULL को वापस लौटा दिया गया है।
हमारे उदाहरण में, मान लें कि आपको उनके द्वारा किराए पर लिए गए सदस्यों और फिल्मों के नाम प्राप्त करने की आवश्यकता है। अब हमारे पास एक नया सदस्य है जिसने अभी तक कोई फिल्म किराए पर नहीं ली है
SELECT A.`first_name` , A.`last_name`, B.`title`FROM `members` AS ARIGHT JOIN `movies` AS BON 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 |
"चालू" और "उपयोग" खंड
ऊपर JOIN क्वेरी उदाहरणों में, हमने टेबल के बीच के रिकॉर्ड का मिलान करने के लिए ON क्लॉज का उपयोग किया है।
उसी उद्देश्य के लिए USING क्लॉज का भी उपयोग किया जा सकता है। उपयोग करने के साथ अंतर यह है कि दोनों तालिकाओं में मिलान स्तंभों के लिए समान नाम होना चाहिए।
"फिल्मों" तालिका में अब तक हमने "आईडी" नाम के साथ इसकी प्राथमिक कुंजी का उपयोग किया है। हमने "movie_id" नाम के साथ "सदस्य" तालिका में उसी का उल्लेख किया है।
चलो "movie_id" नाम रखने के लिए "फिल्मों" तालिकाओं "आईडी" फ़ील्ड का नाम बदलें। हम समान मिलान वाले फ़ील्ड नामों के क्रम में ऐसा करते हैं।
ALTER TABLE `movies` CHANGE `id` `movie_id` INT( 11 ) NOT NULL AUTO_INCREMENT;
अगला, ऊपर दिए गए JOIN उदाहरण के साथ USING का उपयोग करते हैं।
SELECT A.`title` , B.`first_name` , B.`last_name`FROM `movies` AS ALEFT JOIN `members` AS BUSING ( `movie_id` )
इसके अलावा का उपयोग करने से पर और उपयोग करने के साथ जुड़ जाता है आप की तरह कई अन्य MySQL खंड का उपयोग कर सकते ग्रुप द्वारा, जहां और जैसे भी कार्य करता है योग , औसत , आदि
हमें जॉइन का उपयोग क्यों करना चाहिए?
अब आप सोच सकते हैं, जब हम एक ही कार्य को चलाने वाले प्रश्नों को कर सकते हैं, तो हम JOIN का उपयोग क्यों करते हैं। खासकर अगर आपको डेटाबेस प्रोग्रामिंग में कुछ अनुभव है, तो आप जानते हैं कि हम एक-एक करके प्रश्नों को चला सकते हैं, क्रमिक प्रश्नों में से प्रत्येक का उपयोग कर सकते हैं। बेशक, यह संभव है। लेकिन JOINs का उपयोग करके, आप किसी भी खोज मापदंडों के साथ केवल एक क्वेरी का उपयोग करके काम पा सकते हैं। दूसरी ओर MySQL JOINs के साथ बेहतर प्रदर्शन प्राप्त कर सकता है क्योंकि यह Indexing का उपयोग कर सकता है। बस एक से अधिक जॉइन क्वेरी का उपयोग करने के बजाय कई क्वेरीज़ चलाने से सर्वर ओवरहेड कम हो जाता है। इसके बजाय कई क्वेरी का उपयोग करना जो MySQL और एप्लिकेशन (सॉफ़्टवेयर) के बीच अधिक डेटा ट्रांसफ़र की ओर जाता है। इसके अलावा इसमें एप्लिकेशन अंत में भी अधिक डेटा जोड़तोड़ की आवश्यकता होती है।
यह स्पष्ट है कि हम JOIN के उपयोग द्वारा बेहतर MySQL और एप्लिकेशन प्रदर्शन प्राप्त कर सकते हैं।
सारांश
- JOINS हमें एक परिणाम सेट में एक से अधिक तालिका से डेटा को संयोजित करने की अनुमति देता है।
- JOINS में उप प्रश्नों की तुलना में बेहतर प्रदर्शन होता है
- INNER JOINS केवल दिए गए मापदंड को पूरा करने वाली पंक्तियों को वापस करता है।
- OUTER JOINS उन पंक्तियों को भी लौटा सकता है जहाँ कोई मिलान नहीं पाया गया है। बेजोड़ पंक्तियों को NULL कीवर्ड के साथ लौटाया जाता है।
- प्रमुख JOIN प्रकारों में इनर, लेफ्ट आउटर, राइट आउटर, क्रॉस जॉन्स आदि शामिल हैं।
- JOIN ऑपरेशन्स में अक्सर इस्तेमाल किया जाने वाला क्लॉज "ON" है। "उपयोग" क्लॉज के लिए आवश्यक है कि मिलान वाले कॉलम एक ही नाम के हों।
- JOINS को अन्य BY जैसे कि BY BY, WHERE, SUB QUERIES, AGGREGATE FUNCTIONS आदि में भी इस्तेमाल किया जा सकता है।