इस MySQL श्रृंखला की पिछली किस्त में, मैंने दिखाया कि आप MySQL क्लॉज का उपयोग करके डेटा कैसे प्राप्त कर सकते हैं। इस भाग में हम MySQL में Joins फंक्शन के बारे में जानेंगे कि उनका उपयोग क्यों किया जाता है और उनका उपयोग कैसे किया जाता है। आइए शुरू करें।
मैं MySQL में दो तालिकाओं को कैसे लिंक कर सकता हूं
MySQL जॉइन आपको कई टेबल से डेटा एक्सेस करने देता है। जब भी SQL स्टेटमेंट में दो या दो से अधिक टेबल जुड़ते हैं तो एक MySQL जॉइन किया जाता है। MySQL जॉइन में शामिल हैं:MySQL इनर जॉइन (जिसे सिंपल जॉइन के रूप में भी जाना जाता है), MySQL लेफ्ट आउटर जॉइन (जिसे लेफ्ट जॉइन भी कहा जाता है, यह लेफ्ट टेबल से मैचिंग रिकॉर्ड देता है), राइट जॉइन (इससे मैचिंग रिकॉर्ड्स लौटाता है) राइट टेबल), और फुल जॉइन (यह सभी टेबल से मिलान रिकॉर्ड देता है)। MySQL जॉइन का उपयोग करके, आप दो से अधिक तालिकाओं में शामिल हो सकेंगे।
MySQL में, इनर जॉइन डिफ़ॉल्ट जॉइन है। उस बिंदु पर दिए गए कीवर्ड पर, यह दोनों तालिकाओं से सभी पंक्तियों को चुनता है, जब तक कि दोनों तालिकाओं में स्तंभों के बीच समन्वय होता है।
SQL के विपरीत, MySQL Outer Join को एक अलग Join प्रकार के रूप में नहीं मानता है। आउटर जॉइन के समान परिणाम प्राप्त करने के लिए, आपको लेफ्ट आउटर जॉइन और राइट आउटर जॉइन में शामिल होना होगा।
MySQL में कितनी टेबल्स को जोड़ा जा सकता है
MySQL 8.0 के आधिकारिक दस्तावेज़ीकरण के अनुसार, जॉइन स्टेटमेंट में टेबल की अधिकतम संख्या 61 है। हालांकि, ध्यान दें कि जॉइन स्टेटमेंट में बहुत सारे सर्वर संसाधनों की आवश्यकता हो सकती है क्योंकि टेबल की संख्या बढ़ जाती है। यदि आपकी क्वेरी के साथ ऐसा है, तो मैं सर्वर पर लोड को कम करने के लिए इसे कई प्रश्नों में विभाजित करने की अत्यधिक अनुशंसा करता हूं।
आइए अपने डेटाबेस में एक नई तालिका जोड़कर शुरू करें जिसमें उपयोगकर्ता आईडी के साथ संदेश होगा जिसने यह संदेश भेजा है, हम इसे संदेश नाम देंगे। हमारी तालिका का स्कीमा है:
तालिका `संदेश` बनाएं (
`id` int(11) न्यूल नहीं,
`message` varchar(255) NOT NULL
)
हम उसी चयनडेटा फ़ंक्शन . का उपयोग करेंगे जिसे हमने अपने crud.php . में बनाया है फ़ाइल। आइए अब इन दो तालिकाओं को मिलाकर आरंभ करते हैं। आप अपनी तालिका भी भर सकते हैं ताकि आप इसका अभ्यास कर सकें।
सर्वर पर समय बर्बाद करना बंद करें
Cloudways आपके लिए सर्वर प्रबंधन को संभालता है ताकि आप बेहतरीन ऐप्स बनाने और अपने ग्राहकों को खुश रखने पर ध्यान केंद्रित कर सकें।
नि:शुल्क प्रारंभ करेंइनर जॉइन
इनर जॉइन टेबल में इस तरह से जुड़ता है कि यह केवल उन परिणामों को दिखाता है जो दी गई स्थिति से मेल खाते हैं और दूसरों को छिपाते हैं। इनर जॉइन क्वेरी की संरचना इस प्रकार है:
कॉलम_नाम चुनें
तालिका1 से
INNER जॉइन टेबल2
टेबल1.column_name=table2.column_name पर;
इनर जॉइन और सिंपल जॉइन दोनों समान हैं। आप अपनी क्वेरी इस तरह भी लिख सकते हैं:
कॉलम_नाम चुनें
तालिका1 से
तालिका2 में शामिल हों
टेबल1.column_name=table2.column_name पर;
अब हम इनर जॉइन का उपयोग करके अपने डेटाबेस से नाम और संदेश प्राप्त करते हैं। क्वेरी इस तरह होगी
$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message From myguests INNER JOIN messages ON myguests.id = messages.id";
CONCAT फ़ंक्शन का उपयोग MySQL में दो स्ट्रिंग्स कॉलम को जोड़ने के लिए किया जाता है। अब अपना index.php खोलें जिसे हमने पहले बनाया है, उसमें निम्नलिखित कोड कॉपी करें।
<table> <tr> <td> Name</td> <td> Email</td> <td> Message</td> <!-- <td> Message</td> <td> Date</td>!--> </tr> <?php include 'crud.php'; $sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message From myguests INNER JOIN messages ON myguests.id = messages.id"; $result = selectdata($sql); if($result != "zero") { while($row = $result->fetch_assoc()) { echo "<tr>"; echo "<td>" . $row['name'] . "</td>"; echo "<td>" . $row['email'] . "</td>"; if($row['message'] === null){echo "<td>" . 'null'. "</td>";} else { echo "<td>" . $row['message']. "</td>"; } ; echo "</tr>"; } } else { echo $result; } ?> </table> ?>
जब आप इस पेज को अपने PHP वेब होस्टिंग सर्वर पर चलाते हैं, तो आपका परिणाम इस तरह दिखेगा:
जैसा कि आप स्पष्ट रूप से देख सकते हैं कि इसने केवल उन्हीं परिणामों को लौटाया है जो user_id से मेल खाते हैं और जहां संदेश शून्य नहीं है।
राइट जॉइन
राइट जॉइन दो तालिकाओं को इस तरह से जोड़ता है कि यह बाएं टेबल से दाएं और मिलान किए गए मान से सभी मान लौटाता है और जब कोई मिलान नहीं मिलता है तो बाएं टेबल पर भी शून्य हो जाता है। राइट जॉइन की संरचना है:
कॉलम_नाम चुनें
तालिका1 से
टेबल 2 में राइट जॉइन करें
टेबल1.column_name=table2.column_name पर;
अब हम संदेश . बनाने वाले हमारे डेटाबेस से नाम और संदेश प्राप्त करते हैं हमारी दाहिनी तालिका में और myguests हमारी बाईं तालिका में।
$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message From myguests RIGHT JOIN messages ON messages.id = myguests.id";
अब index.php खोलें और $sql . को बदलें उपरोक्त के साथ क्वेरी। जब आप इसे चलाते हैं, तो आपका परिणाम होगा:
अगर आप संदेशों . पर एक नज़र डालते हैं तालिका में, आप कुछ आईडी देखेंगे जो किसी भी उपयोगकर्ता आईडी से मेल नहीं खाएंगे, इसलिए यह क्वेरी नाम और ईमेल कॉलम में शून्य हो जाती है जहां इसे बाएं कॉलम में कोई मिलान नहीं मिलेगा।
बाएं शामिल हों
LEFT जॉइन दो टेबल को इस तरह से जोड़ता है कि यह सभी वैल्यू को लेफ्ट और मैचेड वैल्यू से राइट टेबल से लौटाता है और जब कोई मैच नहीं मिलता है तो राइट टेबल पर भी अशक्त हो जाता है। LEFT JOIN की संरचना है:
कॉलम_नाम चुनें
तालिका1 से
बाएं जॉइन टेबल2
टेबल1.column_name=table2.column_name पर;
अब हम अपने डेटाबेस से संदेश . बनाने से नाम और संदेश प्राप्त करते हैं हमारी दाहिनी मेज और मेरे मेहमान हमारी बाईं टेबल.
$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message From myguests LEFT JOIN messages ON messages.id = myguests.id";
अब $sql . के स्थान पर index.php और query खोलें उपरोक्त के साथ। जब आप इसे चलाते हैं, तो आपका परिणाम होगा:
अगर आप संदेशों . पर एक नज़र डालते हैं तालिका में, आपको कुछ आईडी मिलेंगे जो किसी भी उपयोगकर्ता आईडी से मेल नहीं खाएंगे, इसलिए यह क्वेरी संदेश कॉलम में शून्य हो जाती है जहां उसे दाएं कॉलम में कोई मिलान नहीं मिलेगा।
यूनियन
MySQL में UNION का उपयोग अलग-अलग टेबल से कई कॉलम को एक कॉलम में जोड़ने के लिए किया जाता है। अद्वितीय मानों के चयन के लिए UNION क्वेरी की संरचना है:
तालिका 1 से कॉलम_नाम चुनें
यूनियन
तालिका 2 से कॉलम_नाम चुनें;
और कॉलम से दोहराए गए मानों का चयन करने के लिए है:
तालिका 1 से कॉलम_नाम चुनें
सभी को यूनियन करें
तालिका 2 से कॉलम_नाम चुनें;
अब हम अपने टेबल से आईडी प्राप्त करते हैं।
$sql = "SELECT id FROM myguests UNION SELECT id FROM messages";
अब index.php खोलें और $sql . को बदलें उपरोक्त के साथ क्वेरी। जब आप इसे चलाते हैं तो आपका परिणाम होगा:
क्वेरी ने हमें वे सभी विशिष्ट आईडी प्राप्त कर ली हैं जो दोनों तालिकाओं में पाई जाती हैं।
क्रॉस जॉइन या कार्टेशियन उत्पाद
इस प्रकार का जॉइन जॉइन में टेबल से पंक्तियों का कार्टेशियन उत्पाद लौटाता है। यह एक तालिका लौटाएगा जिसमें रिकॉर्ड होते हैं जो पहली तालिका से प्रत्येक पंक्ति को दूसरी तालिका की प्रत्येक पंक्ति के साथ जोड़ते हैं।
क्रॉस जॉइन सिंटैक्स है,
SELECT column-name-list from table-name1 CROSS JOIN table-name2;
सेल्फ़ जॉइन
सेल्फ जॉइन एक नियमित जॉइन है, लेकिन टेबल खुद से जुड़ जाती है।
SELECT column_name(s) FROM table1 T1, table1 T2 WHERE condition;
पूर्ण बाहरी जॉइन
FULL OUTER JOIN कीवर्ड बाएं (तालिका 1) या दाएं (तालिका 2) तालिका रिकॉर्ड में कोई मिलान होने पर सभी रिकॉर्ड लौटाता है।
नोट:FULL OUTER JOIN संभावित रूप से बहुत बड़े परिणाम-सेट लौटा सकता है!
SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;
एकाधिक तालिकाओं में शामिल हों
पिछले ब्लॉगों में, आपने सीखा कि अलग-अलग SQL जॉइन क्वेरीज़ का उपयोग करके दो तालिकाओं को एक साथ कैसे जोड़ा जाए। लेकिन अगर आप एक बड़े एप्लिकेशन पर काम कर रहे हैं यानी ई-कॉमर्स स्टोर बना रहे हैं और उसमें कई टेबल बना रहे हैं जैसे कि ग्राहक, ऑर्डर और उत्पाद, तो टेबल में शामिल होने में जटिलता निश्चित रूप से पैदा हो सकती है। इसे हल करने के लिए, आपको विशिष्ट ग्राहकों द्वारा ऑर्डर किए गए सभी उत्पादों को प्राप्त करने की आवश्यकता है। स्कीमा वही है, इसलिए मैं इसे यहां घोषित नहीं कर रहा हूं। आइए क्वेरी देखें:
SELECT * FROM table1 LEFT JOIN table2 ON table2.id = table1.id LEFT JOIN table3 ON table3.id = table1.id
हम पहले तालिका 1 और तालिका 2 से जुड़ते हैं जो तालिका 1 और तालिका 2 से संयुक्त डेटा के साथ एक अस्थायी तालिका प्रदान करती है, जो उस बिंदु पर तालिका 3 में शामिल हो जाती है। इस समीकरण को 3 से अधिक तालिकाओं से N तालिकाओं तक बढ़ाया जा सकता है, आपको बस यह सुनिश्चित करने की आवश्यकता है कि SQL क्वेरी में N-1 तालिका में शामिल होने की व्यवस्था में N-1 शामिल होना चाहिए।
उपरोक्त क्वेरी आपको तालिका 1 (किसी भी स्थिति में) से अन्य दो तालिकाओं की पंक्तियों से मिलान करने की अनुमति देगी। लेफ्ट जॉइन का उपयोग करने से आप टेबल 2 और टेबल 3 को टेबल 1 के साथ जोड़ सकते हैं (न केवल टेबल 2 के साथ टेबल 1 और टेबल 3 टेबल 2 के साथ)।
आप WHERE, AND, और ORDERBY जैसी शर्तें भी जोड़ सकते हैं
SELECT * FROM table1 LEFT JOIN table2 ON table2.id = table1.id LEFT JOIN table3 ON table3.id = table2.id WHERE month = 'numberHere' AND (table2.email IS NOT NULL OR table3.email IS NOT NULL) ORDER BY submitdate DESC
निष्कर्ष:
इस ट्यूटोरियल में, हमने जॉइन के बारे में सीखा जो रिलेशनल डेटाबेस में बहुत अधिक उपयोग किया जाता है। जॉइन का उपयोग केवल दो टेबल के लिए ही नहीं किया जाता है और आप एक ही तकनीक का उपयोग करके दो से अधिक टेबल में शामिल हो सकते हैं। इस MySQL श्रृंखला की आठवीं और अंतिम किस्त में, मैं चर्चा करूंगा कि MySQL में डेटा लाने और सॉर्ट करने के लिए रेगुलर एक्सप्रेशन (REGEX) का उपयोग कैसे करें। उसके लिए, हमारे ब्लॉग न्यूज़लेटर की सदस्यता लें और आप हमारे प्रबंधित PHP स्टैक के लिए भी साइन अप कर सकते हैं और हमारे PHP अनुकूलित सर्वर पर इन ट्यूटोरियल्स का परीक्षण शुरू कर सकते हैं।
सामान्यतःपूछे जाने वाले प्रश्नप्र. मैं दो तालिकाओं को एक साथ कैसे जोड़ूं?
उत्तर: SQL में दो तालिकाओं को जोड़ना चार प्रमुख तरीकों से किया जा सकता है:इनर जॉइन (मिलान कॉलम के साथ पंक्तियों को लौटाता है), लेफ्ट जॉइन (बाएं टेबल में सभी रिकॉर्ड और राइट टेबल में मैचिंग रिकॉर्ड), राइट जॉइन (राइट टेबल में सभी रिकॉर्ड) और बाईं तालिका में मिलान रिकॉर्ड), और संघ (डुप्लिकेट हटाता है)।
प्र. दो तालिकाओं को जोड़ने के लिए आप किस SQL कमांड का उपयोग कर सकते हैं?
उत्तर: इनर जॉइन स्टेटमेंट का उपयोग करके दो तालिकाओं को जोड़ा जा सकता है जो दोनों तालिकाओं से मेल खाने वाले रिकॉर्ड लौटाते हैं।
प्र. मैं SQL में बिना शामिल हुए दो तालिकाओं को कैसे जोड़ूँ?
उत्तर: आप वास्तव में जॉइन स्टेटमेंट का उपयोग किए बिना टेबल में शामिल होने के लिए निम्न कथन का उपयोग कर सकते हैं
SELECT * FROM TableA a, TableB b