MySQL Joins

Introduction to MySQL Joins

अभी तक आपने जितने भी SQL statements execute करवाये उन सबका result एक single table से related था। लेकिन कई बार ऐसा होता है की एक single table में पर्याप्त information नहीं होती है और एक से अधिक tables से information show करने की आवश्यकता पड़ती है।

ऐसी situations के लिए MySQL आपको एक mechanism (commands/statements) provide करती है जिन्हें joins कहते है।

Joins की मदद से आप एक ही query के द्वारा कई tables से rows show कर सकते है। यदि ये काम बिना joins के किया जाये तो इसके लिए आपको एक से अधिक queries execute करवानी होगी। Joins के द्वारा show किया गया result एक नयी table form करता है जो different tables के columns से मिलकर बनी होती है।

MySQL आपको 3 प्रकार के joins provide करती है।

  1. Inner join
  2. Left join
  3. Right join

इन सभी joins के बारे में निचे detail से दिया गया है। आइये इनके बारे में जानने का प्रयास करते है।

INNER JOIN

सबसे ज्यादा यूज़ किये जाने वाला join INNER JOIN होता है। आप इसे सिर्फ JOIN भी कह सकते है। जब आप इस join को यूज़ करते है तो result में उन rows को show किया जाता है जो दोनों tables में match करती है।

इसका मतलब ये हुआ की जब दोनों tables से एक particular column match होगा तो ही कोई row show की जाएगी।

इससे पहले की आप INNER JOIN apply करना सीखें आइये इसका general syntax देखते है।

mysql > SELECT <column-list> FROM tb1 JOIN tb2 ON (optional) tb1.col = tb2.col;  

ON keyword का प्रयोग ये बताने के लिए किया जाता है की आप किस column को match करके result show करना है। इसका प्रयोग optional होता है।

आइये अब INNER JOIN को एक उदाहरण से समझने का प्रयास करते है। मान लीजिये आपके पास 2 tables Student और Course है।

ऊपर दिए हुए syntax को यूज़ करते हुए इन दोनों tables पर आप INNER JOIN इस प्रकार apply कर सकते है।

mysql > select Student.Name, Course.Name from Student join Course on Student.Course = Course.Id;

जब आप इस query को execute करेंगे तो result इस प्रकार show होगा।

जैसा की मैने आपको बताया था केवल वही rows show होंगी जिनके columns मैच होंगे। ऊपर दिए गए example में Student 3 का course Course table की किसी Id से मैच नहीं हो रहा है इसलिए इसे result में include नहीं किया गया है।

LEFT JOIN

यदि आप चाहते है की चाहे particular column match हो या ना हो लेकिन left table की सभी rows show हो तो इसके लिए आप LEFT JOIN यूज़ करते है। LEFT JOIN के द्वारा आप बताते है की आपको left table की सभी rows show होनी चाहिए।

उदाहरण के लिए आप सभी students के नाम चाहते है चाहे उन्होंने कोई course join किया हो या नहीं। आइये इसे एक उदाहरण से समझने का प्रयास करते है।

ऊपर दी गयी tables पर आप LEFT JOIN इस प्रकार apply कर सकते है।

mysql > select Student.Name, Course.Name from Student left join Course on Student.Course = Course.Name;

जब आप LEFT JOIN यूज़ करते हुए इस query को execute करेंगें तो result इस प्रकार show होगा।

जैसा की आप results में देख सकते है एक LEFT JOIN left table में हर row को match करता है। इससे कोई फर्क नहीं पड़ता है की उससे match करती हुई value right side की table में है या नहीं।

RIGHT JOIN

यदि आप चाहते है की right table से सभी rows show हो चाहे उसके लिए left table में कोई row हो या नहीं हो तो इसके लिए आप RIGHT JOIN यूज़ कर सकते है। उदाहरण के लिए मान लीजिये ऊपर दी गयी course table में 2 course और है।

इन्हें M.com और B.Ed मान लीजिये। लेकिन Student table में ऐसा कोई student नहीं है जिसने इन courses को join कर रखा हो।

ऐसी situation में यदि आप सभी courses की list देखना चाहते है चाहे किसी student ने उसे join कर रखा हो या नहीं तो इसके लिए आप right join यूज़ कर सकते है। इसके लिए आप इस प्रकार query लिखेंगे।

mysql > select Student.Name, Course.Name from Student right join Course on Student.Course = Course.Id;

जब आप इस query को execute करेंगे तो result इस प्रकार show होगा।

OUTER JOIN

यदि आप दोनों tables में से पूरा data show करना चाहते है चाहे कोई row match हो या न हो तो इसके लिए आप OUTER JOIN यूज़ करते है।

जिस भी column की value मैच नहीं करती है उस column में NULL value show होती है। हालाँकि इस JOIN को MySQL में allow नहीं किया गया है फिर भी आप की जानकारी के लिए इसे यँहा बताया गया है।

यदि आप MySQL में OUTER JOIN यूज़ करना चाहते है तो LEFT और RIGHT JOINS के बीच में UNION operation perform कर ऐसा कर सकते है।