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
Note: Null is returned for non-matching rows on right

सही शामिल हैं

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
Note: Null is returned for non-matching rows on left

“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 आदि।