Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

SQL जॉइन का परिचय

परंपरागत रूप से, आप WHERE . का उपयोग करके दो या दो से अधिक तालिकाओं से डेटा खींचते हैं एक प्रश्न में खंड। लेकिन एक रिलेशनल डेटाबेस सिस्टम (RDBMS) में, इसे एक SELECT . का उपयोग करके प्राप्त किया जा सकता है सवाल। यह रिलेशनल डेटाबेस सिस्टम की सच्ची शक्ति है। इस गाइड में, आप एसक्यूएल जॉइन के बारे में जानेंगे, जो पंक्तियों और तालिकाओं की तुलना और चयन करने का एक शक्तिशाली तरीका है।

एसक्यूएल जॉइन क्या है?

SQL में, एक join क्लॉज तालिकाओं से पंक्तियों की तुलना और चयन करने की क्षमता का विस्तार करता है। यह उन तालिकाओं में संबंधित कॉलम के आधार पर दो या दो से अधिक तालिकाओं से पंक्तियों के संयोजन की बीजगणितीय प्रक्रिया का उपयोग करता है। एएनएसआई-मानक एसक्यूएल परिभाषा के अनुसार, पांच प्रकार के जॉइन होते हैं -क्रॉस जॉइन , आंतरिक जुड़ाव , बाएं (बाहरी) शामिल हों , दाएं (बाहरी) जुड़ते हैं , और पूर्ण (बाहरी) जुड़ाव . ये जॉइन सभी रिलेशनल डेटाबेस सिस्टम में लागू किए जाते हैं और नीचे दिए गए अनुभागों में शामिल होते हैं।

नोट किसी दिए गए प्रश्न में किसी भी तालिका में शामिल हो सकते हैं। संक्षिप्तता और स्पष्टता के लिए, यह मार्गदर्शिका दो तालिकाओं पर लागू जॉइन पर चर्चा करती है।

यह मार्गदर्शिका दो तालिकाओं का उपयोग करती है, Employees और Address , क्रमशः, SQL जॉइन प्रदर्शित करने के लिए। इनमें से प्रत्येक तालिका में निम्नलिखित स्तंभ परिभाषाएँ और डेटा शामिल हैं:

  • कर्मचारी तालिका

    <वें शैली=पाठ्य-संरेखण:केंद्र>कर्मचारी नाम
    EmployeeId
    1 जॉन
    2 मैरी
    3 रॉबर्ट
  • पता तालिका

    <वें शैली=पाठ्य-संरेखण:केंद्र>राज्य
    Id
    1 न्यूयॉर्क
    2 न्यू जर्सी
    3 Idaho
    4 हवाई
नोट जब तक अन्यथा उल्लेख न किया गया हो, इस गाइड के सभी कमांड MySQL . दोनों पर अच्छी तरह से काम करते हैं और PostgreSQL डेटाबेस।

SQL क्रॉस जॉइन

कार्टेशियन जॉइन . के रूप में भी जाना जाता है , क्रॉस जॉइन तब होता है जब आप अपने SELECT . के स्रोत के रूप में एकाधिक तालिकाओं को निर्दिष्ट करते हैं स्तंभ सूची। इस मामले में, आप WHERE . छोड़ देते हैं पंक्तियों से मिलान करने के लिए क्लॉज जॉइन एक्सप्रेशन। परिणाम सेट में तालिकाओं के बीच पंक्तियों के प्रत्येक संयोजन के लिए एक पंक्ति होती है। दो-तालिका परिदृश्य में, एक तालिका में प्रत्येक पंक्ति को दूसरी तालिका की प्रत्येक पंक्ति के साथ जोड़ा जाता है। परिणामी उत्पाद को कार्टेशियन उत्पाद . के रूप में जाना जाता है दो तालिकाओं में से। क्रॉस जॉइन का सिंटैक्स निम्नलिखित है:

(# Rows in Table A) TIMES (# of Rows in Table B)
नोट

सेट थ्योरी में, कार्टेशियन उत्पाद एक गुणन ऑपरेशन है जो दिए गए सेट के सभी ऑर्डर किए गए जोड़े उत्पन्न करता है। उदाहरण के लिए, सेट A . पर विचार करें तत्वों के साथ {a,b} और B . सेट करें तत्वों के साथ {1,2,3} . A . का कार्टेशियन उत्पाद और B AxB . द्वारा निरूपित किया जाता है और परिणाम निम्न है:

AxB ={(a,1), (a,2), (a,3), (b,1), (b,2), (b,3)}

क्रॉस जॉइन के लिए SQL सिंटैक्स इस प्रकार है:

SELECT ColumnName_1,
       ColumnName_2,
       ColumnName_N
FROM [Table_1]
     CROSS JOIN [Table_2]

उपरोक्त सिंटैक्स से, Column_1 , Column_2 , Column_N तालिका में कॉलम का प्रतिनिधित्व करते हैं, और CROSS JOIN खंड दो तालिकाओं को संयोजित करने का कार्य करता है, Table_1 और Table_2 . उपरोक्त उदाहरण तालिकाओं से, यदि आपको Employees . पर क्रॉस जॉइन करने की आवश्यकता है और Address टेबल, निम्न SQL कोड का उपयोग करें:

SELECT EmployeeName, State
FROM Employees
CROSS JOIN Address

उपरोक्त SQL कोड का आउटपुट निम्न के जैसा होता है:

+--------------+--------------+
| EmployeeName | State        |
+---------------+-------------+
| John         |   New York   |
| John         |   New Jersey |
| John         |   Idaho      |
| John         |   Hawaii     |
| John         |   New York   |
| Mary         |   New York   |
| Mary         |   New Jersey |
| Mary         |   Idaho      |
| Mary         |   Hawaii     |
| Robert       |   New York   |
| Robert       |   New Jersey |
| Robert       |   Idaho      |
| Robert       |   Hawaii     |
+------------+----------------+

SQL इनर जॉइन

एक इनर जॉइन उन पंक्तियों को लौटाता है जिनमें दोनों तालिकाओं में मेल खाने वाले मान होते हैं। यदि कोई मिलान रिकॉर्ड नहीं है, तो परिणामों में कोई पंक्तियाँ नहीं दी जाती हैं।

इनर जॉइन के लिए SQL सिंटैक्स इस प्रकार है:

SELECT ColumnName_1,
       ColumnName_2,
       ColumnName_N
FROM Table_1
INNER JOIN Table_2
ON Table_1.key = Table_2.key;

ऊपर के उदाहरण में, key तालिकाओं की संबंधित कुंजी है। अगर आपको Employees . पर एक आंतरिक जुड़ाव करने की आवश्यकता है और Address टेबल, निम्न SQL कोड का उपयोग करें:

SELECT EmployeeName, State
FROM Employees
INNER JOIN Address
ON Employees.EmployeeId = Address.Id

उपरोक्त SQL कोड का आउटपुट निम्न के जैसा होता है:

+--------------+--------------+
| EmployeeName | State        |
+---------------+-------------+
| John         |   New York   |
| Mary         |   New Jersey |
+------------+----------------+

SQL बायां (बाहरी) शामिल हों

एक लेफ्ट जॉइन, लेफ्ट टेबल से पंक्तियों का एक पूरा सेट देता है, साथ ही राइट टेबल से मैचिंग रो भी देता है। यदि कोई मिलान रिकॉर्ड नहीं है, तो NULL मान दाएँ तालिका से लौटाए जाते हैं।

नोट कुछ रिलेशनल डेटाबेस कार्यान्वयन "लेफ्ट जॉइन" के विपरीत "लेफ्ट आउटर जॉइन" कीवर्ड का उपयोग करते हैं, लेकिन वे कार्यात्मक रूप से समकक्ष हैं।

लेफ्ट जॉइन के लिए SQL सिंटैक्स इस प्रकार है:

SELECT * FROM Table_1
LEFT JOIN Table_2
ON Table_1.key = Table_2.key

ऊपर के उदाहरण में, key तालिकाओं की संबंधित कुंजी है। अगर आपको Employees . पर लेफ्ट जॉइन करना है तो और Address टेबल, निम्न SQL कोड का उपयोग करें:

SELECT EmployeeName, State
FROM Employees
LEFT JOIN Address
ON Employees.EmployeeId = Address.Id

उपरोक्त SQL कोड का आउटपुट इस प्रकार है:

+--------------+--------------+
| EmployeeName | State        |
+---------------+-------------+
| John         |   New York   |
| Mary         |   New Jersey |
| Robert       |   NULL       |
+------------+----------------+

SQL दाएं (बाहरी) शामिल हों

राइट जॉइन राइट टेबल से पंक्तियों का एक पूरा सेट और लेफ्ट टेबल से मेल खाने वाली पंक्तियों को लौटाता है। इसे राइट आउटर जॉइन के रूप में भी जाना जाता है। यदि कोई मिलान रिकॉर्ड नहीं है, तो NULL बाईं तालिका में प्रभावित पंक्तियों के लिए मान दाएँ तालिका से लौटाए जाते हैं।

नोट कुछ रिलेशनल डेटाबेस कार्यान्वयन "राइट जॉइन" के विपरीत "राइट आउटर जॉइन" कीवर्ड का उपयोग करते हैं, लेकिन वे कार्यात्मक रूप से समकक्ष हैं।

राइट जॉइन के लिए SQL सिंटैक्स इस प्रकार है:

SELECT * FROM Table_1
RIGHT JOIN Table_2
ON Table_1.key = Table_2.key

उपरोक्त कोड से, key तालिकाओं की संबंधित कुंजी है। अगर आपको Employees पर सही जॉइन करने की आवश्यकता है और Address टेबल, निम्न SQL कोड का उपयोग करें:

SELECT EmployeeName, State
FROM Employees
RIGHT JOIN Address
ON Employees.EmployeeId = Address.Id

उपरोक्त SQL कोड का आउटपुट निम्न है:

+--------------+--------------+
| EmployeeName | State        |
+---------------+-------------+
| John         |   New York   |
| Mary         |   New Jersey |
| NULL         |   Idaho      |
| NULL         |   Hawaii     |
+------------+----------------+

SQL Full (Outer) join

एक पूर्ण जॉइन बाईं तालिका से सभी पंक्तियों, दाएँ तालिका से सभी पंक्तियों को लौटाता है। इसे फुल आउटर जॉइन के रूप में भी जाना जाता है। एक पूर्ण जॉइन भी उपलब्ध दोनों तालिकाओं से सभी मिलान रिकॉर्ड लौटाता है। यदि कोई मिलान रिकॉर्ड नहीं है, तो NULL मान बाईं तालिका से लौटाए जाते हैं। यह NULL . भी लौटाता है सही तालिका से मान।

नोट कुछ रिलेशनल डेटाबेस कार्यान्वयन "फुल जॉइन" के विपरीत "फुल आउटर जॉइन" कीवर्ड का उपयोग करते हैं, लेकिन वे कार्यात्मक रूप से समकक्ष हैं।

फुल जॉइन के लिए SQL सिंटैक्स इस प्रकार है:

SELECT * FROM Table1
FULL JOIN Table2
ON Table1.key = Table2.key

उपरोक्त कोड में, key तालिकाओं की संबंधित कुंजी है। यदि आपको Employees . पर पूर्ण रूप से शामिल होने की आवश्यकता है और Address टेबल, निम्न SQL कोड का उपयोग करें:

SELECT EmployeeName, State
FROM Employees
FULL JOIN Address
ON Employees.EmployeeId = Address.Id

उपरोक्त SQL कोड का आउटपुट निम्न है:

+--------------+--------------+
| EmployeeName | State        |
+---------------+-------------+
| John         |   New York   |
| Mary         |   New Jersey |
| Robert       |   NULL       |
| NULL         |   Idaho      |
| NULL         |   Hawaii     |
+------------+----------------+
नोट शामिल होने की गणना के दौरान, यदि आप तालिका डेटा की तुलना NULL . से करते हैं मूल्य, वे एक दूसरे से मेल नहीं खाते। इसलिए, NULL मान केवल सम्मिलित परिणामों के भाग के रूप में लौटाए जाते हैं और सम्मिलित गणनाओं के दौरान अनदेखा किए जाते हैं।

SQL जॉइन की परफ़ॉर्मेंस तुलना

उपरोक्त उदाहरण तालिकाओं को ध्यान में रखते हुए, डेटाबेस प्रदर्शन के संदर्भ में इनर जॉइन आमतौर पर पांच जॉइन क्लॉज में सबसे तेज है। दो तालिकाओं के आकार के आधार पर लेफ्ट जॉइन और राइट जॉइन अगले सबसे तेज हैं। फुल जॉइन आमतौर पर लेफ्ट जॉइन या राइट जॉइन की तुलना में धीमा होता है। दो तालिकाओं के कार्टेशियन उत्पाद पर निर्भर क्रॉस जॉइन, आमतौर पर डेटाबेस प्रदर्शन के मामले में सबसे धीमा है। निर्दिष्ट प्रदर्शन पदानुक्रम तालिका स्तंभ लंबाई, स्तंभ डेटा प्रकार और मुख्य परिभाषाओं के आधार पर भिन्न हो सकता है।

निष्कर्ष

SQL जॉइन का उपयोग पारंपरिक WHERE पर तालिका पंक्तियों की तुलना करने में सक्षम होने की कार्यक्षमता को बढ़ाता है खंड प्रश्न। दो या दो से अधिक तालिकाओं में बीजगणितीय तर्क लागू करने के लिए जुड़ना एक मूल्यवान तंत्र है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या मैं PHP में PDO का उपयोग करके एक डेटाबेस बना सकता हूँ?

  2. नोडज में mysql क्वेरी कॉलबैक के लिए पैरामीटर कैसे पास करें

  3. MySQL त्रुटि 150

  4. MySQL त्रुटि 2006:mysql सर्वर चला गया है

  5. सॉकेट के माध्यम से स्थानीय MySQL सर्वर से कनेक्ट नहीं हो सकता '/tmp/mysql.sock