mysql join tutorial inner
इनर, आउटर, क्रॉस, लेफ्ट, राईट, और सेल्फैक्स और प्रोग्रामिंग उदाहरणों के साथ MySQL JOIN स्टेटमेंट के बारे में जानें:
इस ट्यूटोरियल में, हम MySQL JOIN के बारे में जानेंगे और MySQL में समर्थित विभिन्न प्रकार के Joins को भी समझेंगे। अपने सरलतम रूप में शामिल होने को एकल क्वेरी के खिलाफ कई तालिकाओं से डेटा को पुनः प्राप्त / अपडेट करने या हटाने के साधन के रूप में सोचा जा सकता है।
तो, संक्षेप में, JOIN किसी दी गई स्थिति के विरुद्ध डेटा लाने के लिए 2 या अधिक तालिकाओं को जोड़ता है।
MySQL कई अलग-अलग तरीकों से डेटा का उपयोग करने के लिए अलग-अलग तरीकों का भी समर्थन करता है - सबक्वेरीज़ और UNION का उपयोग करके कई प्रश्नों को मिलाकर
आप क्या सीखेंगे:
सामान्यीकृत टेबल्स
सामान्यीकृत MySQL डेटाबेस में, तालिकाओं में विदेशी कुंजी जैसे प्रमुख बाधाओं के माध्यम से सामान्य स्तंभों के बीच संबंध होते हैं।
उदाहरण की सहायता से इसे समझने का प्रयास करते हैं - मान लीजिए कि 2 टेबल हैं, EMPLOYEE और EMPLOYEE_DEPARTMENT। अब एक अपभ्रंश डेटाबेस में - अर्थात सभी स्तंभों वाली एक एकल तालिका, उदाहरण के लिए विभाग के बारे में बहुत सारी जानकारी डुप्लिकेट की जाएगी क्योंकि बहुत सारे कर्मचारी हो सकते हैं जो एक ही विभाग का हिस्सा हैं।
इसलिए उन दोहराव को कम करने और भंडारण पर बचत करने के लिए, डेटाबेस को सामान्यीकृत स्थिति में रखा जाता है।
तो इस मामले में, हम EMPLOYEE तालिका में एक विभाग Department_id द्वारा विभाग को संदर्भित करेंगे और विभाग से संबंधित सभी प्रासंगिक जानकारी जैसे - विभाग की जानकारी, विभाग प्रमुख, आदि को EMPLOYEE_DEPMENTMENT तालिका के भाग के रूप में रखा जा सकता है।
तो संक्षेप में - EMPLOYEE और EMPLOYEE_DEPARTMENT एक दूसरे से Department_id फ़ील्ड के माध्यम से जुड़े हुए हैं, जो EMPLOYEE_DEPARTMENT टेबल के लिए EMPLOYEE टेबल और PRIMARY KEY के लिए एक प्रमुख कुंजी के रूप में कार्य कर रहा है।
छवि के नीचे इन दोनों तालिकाओं के बीच एक संबंध होने वाला एक चित्रात्मक प्रतिनिधित्व है विदेशी कुंजी बाधा
MySQL JOIN
MySQL JOIN का उपयोग किसी दी गई स्थिति के विरुद्ध 2 या अधिक तालिकाओं से डेटा प्राप्त करने, अपडेट करने या हटाने के लिए किया जाता है। इसलिए, JOIN को हमेशा SELECT, UPDATE या DELETE कथनों के संयोजन में प्रयोग किया जाता है
जॉय कमांड का सिंटैक्स:
चयन के साथ शामिल हों
SELECT {column_list} FROM tableName1 {joinType} tableName2 ON {joinCondition}
अद्यतन के साथ शामिल हों
DELETE FROM tableName1 {joinType} tableName2 ON {joinCondition} WHERE {condition}
DELETE के साथ शामिल हों
UPDATE tableName1 SET targetColumn = targetValue FROM tableName1 {joinType} tableName2 ON {joinCondition} WHERE {condition}
कृपया ध्यान दें कि JOIN को एक ही क्वेरी में कई तालिकाओं पर लागू किया जा सकता है, लेकिन सादगी के लिए पहले 2 तालिकाओं के साथ Joins का उपयोग करके समझने की कोशिश करें।
वाक्य रचना के विभिन्न भागों में शामिल हैं:
- {कॉलम_लिस्ट} - यह उन स्तंभों के नामों का प्रतिनिधित्व करता है जिन्हें हम अपनी क्वेरी के परिणाम के रूप में प्राप्त करना चाहते हैं।
- {JoinType} - यह इंगित करता है कि हम किस प्रकार का आवेदन कर रहे हैं। निम्नलिखित विभिन्न प्रकार के JOINS हैं जो डेटा ला सकते हैं:
- आंतरिक रूप से जुड़ा
- उमर जोइन
- बाईं ओर का बाहरी जोड़
- राइट कंप्यूटर शामिल हैं
- क्रोस जॉइन
हम ट्यूटोरियल के आगामी अनुभागों में MySQL JOINS के इन सभी विभिन्न प्रकारों के बारे में जानेंगे।
- {JoinCondition} - यह कॉलम की स्थितियां हैं जिनका उपयोग जॉइन के लिए डेटा को क्वेरी और लाने के लिए किया जाएगा।
अगले भाग में, हम MySQL में उपलब्ध विभिन्न प्रकार के जॉइन के बारे में चर्चा करेंगे।
MySQL JOIN के प्रकार
नमूना डेटा तैयार करना
JOINS का उपयोग करने के लिए, हम नीचे दिए गए विवरण के साथ 2 टेबल कर्मचारी और कर्मचारी_डेपबॉक्स का उपयोग करेंगे। आप किसी सहायक साइट का उपयोग / संदर्भ कर सकते हैं यहाँ स्कीमा के लिए डमी डेटा उत्पन्न करने के लिए।
तालिका निर्माण और सम्मिलन के लिए सूचीबद्ध सूची:
CREATE TABLE IF NOT EXISTS Employee_Department ( name varchar(100), id INT NOT NULL auto_increment, PRIMARY KEY (id) ); CREATE TABLE IF NOT EXISTS Employee ( name varchar(100), id int not null auto_increment, address varchar(100), Department_id int, PRIMARY KEY (id), FOREIGN KEY (Department_id) references Employee_Department(id) ); INSERT INTO `Employee_Department` VALUES ('Information Technology','1'), ('HR','2'), ('Finance','3'), ('Accounting','4'), ('Housekeeping','5'), ('Security','6'), ('Support','7'), ('Contract Staff','8'), ('Sales','9'), ('Management','10'); INSERT INTO `Employee` VALUES ('Veniam','1','640 Damon Junction
East Mathew, NY 68818','3'), ('Molestiae','2','6658 Hollis Club
Ernamouth, TX 19743','10'), ('Officiis','3','59965 Mason Neck Apt. 985
Kareemborough, NV 85535','9'), ('Rerum','4','91067 Geovany Fort
Hanefort, WA 92863','6'), ('Et','5','7647 Reva Shores Suite 970
New Audrafort, OH 17846-5397','2'), ('Et','6','9419 Carmela Burg Apt. 687
Aimeebury, SD 32389-4489','8'), ('Laborum','7','6961 Weissnat Drive
Donnellyfort, MT 53947','6'), ('Cupiditate','8','117 Nellie Summit Suite 982
South Heavenfurt, CA 45675','8'), ('Eveniet','9','9086 Mariam Square Suite 698
South Dulce, MT 82861-3079','2'), ('Rerum','10','783 Goodwin Burgs Apt. 429
Willmsfort, UT 42820-1019','9'), ('Quis','11','42928 Ernesto Trail
East Jules, WV 87169-2851','1'), ('Esse','12','161 Kassulke Stravenue Apt. 937
Williamsonton, MS 62622','7'), ('Dolores','13','22811 Liliana Trail Apt. 890
South Ernesto, MT 04134','10'), ('Ut','14','981 Laron Overpass Suite 361
West Olahaven, FL 46982-7801','10'), ('Mollitia','15','411 Louisa Mill
South Maximefort, MA 04903','8'), ('Necessitatibus','16','2853 Jonathon Turnpike
Quitzonville, KY 54776','4'), ('Fugit','17','3647 Rosalinda Corner
Maureenstad, RI 96605','5'), ('Corporis','18','03559 Nicholas Circle Apt. 364
West Zettaberg, ID 58592-3447','8'), ('Neque','19','56111 Alysson Gateway Apt. 212
Leschbury, VT 90605-2306','8'), ('Velit','20','263 O'Keefe Avenue Apt. 884
West Missouri, IL 50303','6'),
आंतरिक रूप से जुड़ा
INNER JOIN, JOIN का सबसे सामान्य रूप है और इसका बहुत उपयोग किया जाता है। आप में से लगभग सभी को किसी न किसी बिंदु पर इसका उपयोग करना चाहिए था। हमें सिंटैक्स और फिर कुछ सैंपल क्वेश्चन देखें।
वाक्य - विन्यास:
SELECT {column_list} FROM tableName1 INNER JOIN tableName2 ON {joinCondition}
उपर्युक्त तालिका (कर्मचारी और कर्मचारी_डिपबॉक्स) से सभी कर्मचारियों के लिए विभाग_नाम लाने की क्वेरी:
SELECT Employee.name as Employee_name, Employee_Department.name as Department_name FROM Employee INNER JOIN Employee_Department ON Employee.Department_id = Employee_Department.id
यहाँ उपरोक्त क्वेरी का आउटपुट है:
कर्मचारी का नाम | विभाग का नाम |
---|---|
चीज़ें | सुरक्षा |
Who | सूचान प्रौद्योगिकी |
तथा | मानव संसाधन |
घटित होना | मानव संसाधन |
मैं | वित्त |
ज़रूरत | लेखांकन |
Fgit | गृह व्यवस्था |
नाश्ता | सुरक्षा |
कृप्या अ | सुरक्षा |
उस | सहयोग |
तथा | संविदा कर्मचारी |
उत्सुकता | संविदा कर्मचारी |
लचीलाता | संविदा कर्मचारी |
तन | संविदा कर्मचारी |
निष्पक्ष | संविदा कर्मचारी |
कार्यालयों | बिक्री |
चीज़ें | बिक्री |
खीज | प्रबंध |
दर्द | प्रबंध |
बाहर | प्रबंध |
ध्यान दें: यहां हमने कॉलम नाम उपनामों का उपयोग किया है। उदाहरण: Employee.name के रूप में Employee_name - बस परिणामों को अधिक पठनीय और व्यापक बनाने के लिए।
अक्षर 'm' से शुरू होने वाले नामों को लाने के लिए इस क्वेरी को संशोधित करें।
SELECT Employee.name as Employee_name, Employee_Department.name as Department_name FROM Employee INNER JOIN Employee_Department ON Employee.Department_id = Employee_Department.id WHERE Employee.name like 'm%'
नीचे उत्पादन है:
कर्मचारी का नाम | विभाग का नाम | |||||
---|---|---|---|---|---|---|
नाश्ता | । | 6961 वीस्नाट ड्राइव डोनलीफोर्ट, एमटी 53947 | ६ | शून्य | शून्य | शून्य |
खीज | प्रबंध | |||||
लचीलाता | संविदा कर्मचारी |
और अब नीचे दिए गए Venn Diagram की मदद से INNER JOIN को समझें। परिणामी पंक्तियों में दोनों तालिका के बीच ओवरलैपिंग डेटा होता है जैसा कि JOIN स्थिति के विरुद्ध होता है।
उमर जोइन
OUTER JOIN का उपयोग 2 या अधिक तालिकाओं से डेटा प्राप्त करने के लिए किया जाता है, जिसमें एक बेजोड़ पंक्तियाँ (या पंक्तियों के साथ अशक्त स्तंभों के लिए अशक्त डेटा) को शामिल किया जाता है।
आउटर को बेहतर ढंग से समझने के लिए, एक नया टेबल ऑफ़िस_लोकेशन वाले फ़ील्ड - आईडी और एड्रेस को जोड़ें और मूल रूप से बनाए गए कर्मचारी टेबल में `office_id` नामक एक नया कॉलम जोड़ें।
यहाँ उसी के लिए प्रश्न हैं:
CREATE TABLE IF NOT EXISTS office_locations ( address varchar(100), id INT NOT NULL auto_increment, PRIMARY KEY (id) ); ALTER TABLE Employee ADD COLUMN office_id int; INSERT INTO `office_locations`(address) VALUES('Bangalore'), ('Mumbai'), ('Seattle'), ('Santa Clara'); UPDATE Employee SET office_id=1 where id % 2 = 0; UPDATE Employee SET office_id=2 where id % 3 = 0;
कृपया नीचे दिए गए आरेख को समझने के लिए वेन आरेख का संदर्भ लें:
OUTER JOINs के 2 प्रकार हैं
ए) छोड़ दिया जॉय शामिल हैं
जैसा कि नाम से पता चलता है, इस प्रकार की जॉइन तालिका से सभी पंक्तियों (NULL मानों सहित) को जोड़ेगी जो कि JOIN क्वेरी के बाईं ओर है। सरल शब्दों में, सभी परिणाम / पंक्तियाँ जो JOIN स्थिति से मेल नहीं खा रही हैं, उन्हें सही तालिका के लिए NULL मान रखने के परिणाम के साथ लौटा दिया जाएगा।
उदाहरण के लिए, हमें सभी कर्मचारियों के लिए स्थान डेटा की आवश्यकता है - अर्थात यह पता करें कि सभी कर्मचारियों का कार्यालय पता क्या है।
SELECT * from Employee LEFT OUTER JOIN office_locations ON Employee.office_id = office_locations.id
उपरोक्त क्वेरी का आउटपुट:
नाम | ईद | पता | विभाग_विद | Office_id | कार्यालय का पता | ईद |
---|---|---|---|---|---|---|
मैं | एक | 640 डेमन जंक्शन ईस्ट मैथ्यू, एनवाई 68818 | ३ | शून्य | शून्य | शून्य |
खीज | दो | 6658 हॉलिस क्लब एरनामाउथ, TX 19743 | १० | एक | बैंगलोर | एक |
कार्यालयों | ३ | 59965 मेसन नेक एप। 985 कारेम्बोरो, एनवी 85535 | ९ | दो | मुंबई | दो |
चीज़ें | ४ | 91067 जियोवनी फोर्ट) हैनफोर्ट, डब्ल्यूए 92863 | ६ | एक | बैंगलोर | एक |
तथा | ५ | 7647 रेवा शोर सूट 970 न्यू ऑड्राफोर्ट, ओह 17846-5397 | दो | शून्य | शून्य | शून्य |
तथा | ६ | 9419 कार्मेला बर्ग एप्ट। 687 ऐमीबरी, एसडी 32389-4489 | । | दो | मुंबई | दो |
उत्सुकता | । | 117 नेल्ली समिट सूट 982 दक्षिण स्वर्ग, सीए 45675 | । | एक | बैंगलोर | एक |
घटित होना | ९ | 9086 मरियम स्क्वायर सुइट 698 साउथ डुलस, एमटी 82861-3079 | दो | दो | मुंबई | दो |
चीज़ें | १० | 783 गुडविन बर्ग्स एप। 429 विलसफोर्ट, यूटी 42820-1019 | ९ | एक | बैंगलोर | एक |
Who | ग्यारह | 42928 अर्नेस्टो ट्रेल ईस्ट जूल्स, डब्ल्यूवी 87169-2851 | एक | शून्य | शून्य | शून्य |
उस | १२ | 161 कास्सुलेके स्ट्रैटेज एप। 937 विलियमसन, एमएस 62622 | । | दो | मुंबई | दो |
दर्द | १३ | 22811 लिलियाना ट्रेल एप। 890 है साउथ अर्नेस्टो, एमटी 04134 | १० | शून्य | शून्य | शून्य |
बाहर | १४ | 981 लारोन ओवरपास सुइट 361 वेस्ट ओलेहवेन, एफएल 46982-7801 | १० | एक | बैंगलोर | एक |
लचीलाता | पंद्रह | 411 लुइसा मिल साउथ मैक्सिमफ़ोर्ट, एमए 04903 | । | दो | मुंबई | दो |
ज़रूरत | १६ | 2853 जोनाथन टर्नपाइक क्विट्जोनविले, केवाई 54776 | ४ | एक | बैंगलोर | एक |
भाग गए | १। | 3647 रोसलिंडा कॉर्नर मॉरेनस्टैड, आरआई 96605 | ५ | शून्य | शून्य | शून्य |
तन | १। | 03559 निकोलस सर्कल एप। 364 वेस्ट ज़ेटाबर्ग, आईडी 58592-3447 | । | दो | मुंबई | दो |
या | १ ९ | 56111 एल्ससन गेटवे एप। 212 लेस्बरी, वीटी 90605-2306 | । | शून्य | शून्य | शून्य |
कृप्या अ | बीस | 263 ओ कीफे एवेन्यू एप्ट। 884 है वेस्ट मिसौरी, IL 50303 | ६ | एक | बैंगलोर | एक |
बी) सही जॉय शामिल हैं
इस तरह के LEFT JOIN के समान, इस प्रकार के सभी रिकॉर्ड्स से जुड़ें जो कि राइट टेबल से मैच नहीं करते हैं, लेफ्ट साइड टेबल के कॉलम पर NULL मानों के साथ लौटे हैं।
सी ++ स्टैक डेटा संरचना
उदाहरण के लिए, अपने नमूना तालिकाओं के साथ, अगर हम उसी जिव के खिलाफ RIGHT JOIN चलाते हैं, जिसका उपयोग हमने LEFT JOIN के लिए किया था, तो हमें शहरों के 'सिएटल' और 'सांता क्लारा' के लिए NULL मान मिलेंगे, क्योंकि उस स्थान पर सेट की गई कर्मचारी तालिका में कोई पंक्तियाँ नहीं हैं इन मूल्यों के लिए।
SELECT * from Employee RIGHT OUTER JOIN office_locations ON Employee.office_id = office_locations.id
उपरोक्त क्वेरी का आउटपुट:
नाम | ईद | पता | विभाग_विद | Office_id | कार्यालय का पता | ईद |
---|---|---|---|---|---|---|
कृप्या अ | बीस | 263 ओ कीफे एवेन्यू एप्ट। 884 है वेस्ट मिसौरी, IL 50303 | ६ | एक | बैंगलोर | एक |
खीज | दो | 6658 हॉलिस क्लब एरनामाउथ, TX 19743 | १० | एक | बैंगलोर | एक |
चीज़ें | ४ | 91067 जियोवनी का किला हैनफोर्ट, डब्ल्यूए 92863 | ६ | एक | बैंगलोर | एक |
उत्सुकता | । | 117 नेल्ली समिट सूट 982 दक्षिण स्वर्ग, सीए 45675 | । | एक | बैंगलोर | एक |
चीज़ें | १० | 783 गुडविन बर्ग्स एप। 429 विलसफोर्ट, यूटी 42820-1019 | ९ | एक | बैंगलोर | एक |
बाहर | १४ | 981 लारोन ओवरपास सुइट 361 वेस्ट ओलेहवेन, एफएल 46982-7801 | १० | एक | बैंगलोर | एक |
ज़रूरत | १६ | 2853 जोनाथन टर्नपाइक क्विट्जोनविले, केवाई 54776 | ४ | एक | बैंगलोर | एक |
कार्यालयों | ३ | 59965 मेसन नेक एप। 985 कारेम्बोरो, एनवी 85535 | ९ | दो | मुंबई | दो |
तथा | ६ | 9419 कार्मेला बर्ग एप्ट। 687 ऐमीबरी, एसडी 32389-4489 | । | दो | मुंबई | दो |
घटित होना | ९ | 9086 मरियम स्क्वायर सुइट 698 साउथ डुलस, एमटी 82861-3079 | दो | दो | मुंबई | दो |
उस | १२ | 161 कास्सुलेके स्ट्रैटेज एप। 937 विलियमसन, एमएस 62622 | । | दो | मुंबई | दो |
लचीलाता | पंद्रह | 411 लुइसा मिल साउथ मैक्सिमफ़ोर्ट, एमए 04903 | । | दो | मुंबई | दो |
तन | १। | 03559 निकोलस सर्कल एप। 364 वेस्ट ज़ेटाबर्ग, आईडी 58592-3447 | । | दो | मुंबई | दो |
शून्य | शून्य | शून्य | शून्य | शून्य | सिएटल | ३ |
शून्य | शून्य | शून्य | शून्य | शून्य | सांता क्लारा | ४ |
नोट्स / टिप्स:
- Microsoft SQL जैसे अन्य रिलेशनल डेटाबेस में - आपको एक और प्रकार का OUTER JOIN मिल सकता है जिसे FULL OUTER JOIN कहा जाता है। यह INNER और OUTER Joins - के संयोजन के अलावा कुछ भी नहीं है, यानी यह LEFT और RIGHT तालिकाओं दोनों से NULL मान लौटाएगा।
- INNER और OUTER JOINS के बीच अंतर के बारे में स्पष्टीकरण और उदाहरणों के साथ एक विस्तृत चर्चा के लिए कृपया हमारे ट्यूटोरियल को देखें यहां।
- OUTER JOIN प्रश्नों में - RIGHT OUTER JOIN और LEFT OUTER JOIN को अधिक पठनीयता के लिए क्रमशः RIGHT JOIN और LEFT JOIN के रूप में निर्दिष्ट किया जा सकता है।
क्रोस जॉइन
CROSS JOIN को कार्टेशियन प्रोडक्ट भी कहा जाता है। यह मिलान के विरुद्ध परिणाम देता है, कुल मी x n पंक्तियों के साथ शर्तों को मिलाएँ, जहाँ m और n, JOIN स्थिति के विरुद्ध तालिका 1 और तालिका 2 में मेल खाने वाली पंक्तियों की संख्या हैं।
वाईफाई के लिए नेटवर्क सुरक्षा कुंजी कैसे प्राप्त करें
चलिए CROSS JOIN के लिए नमूना तालिका देखें - 2 तालिकाओं और कर्मचारियों से कार्यालय परिणाम प्राप्त करने के लिए
SELECT * from Employee CROSS JOIN office_locations
लौटे आउटपुट में कुल 80 पंक्तियाँ होंगी जो दोनों तालिकाओं में पंक्तियों के उत्पाद के अलावा और कुछ नहीं है - कर्मचारी (20) x office_locations (4) => 80
कृपया ध्यान दें कि, क्रोस जॉइन करते समय आपको कोई भी जॉइन कंडीशन निर्दिष्ट करने की आवश्यकता नहीं है क्योंकि आपको वैसे भी एम x n परिणाम मिलेगा।
नोट्स / टिप्स:
आपने CROSS JOIN का उपयोग करते हुए बहुत बार नहीं पाया, क्योंकि इसमें कई उपयोग के मामले जुड़े नहीं हैं। इस जॉइन को आमतौर पर तब निष्पादित किया जाता है जब कोई व्यक्ति 2 टेबलों के डेटा के खिलाफ सभी संभावित संयोजनों को प्राप्त करना चाहता है।
उदाहरण के लिए: मान लीजिए कि आप एक कपड़ा निर्यातक हैं और आपके पास 2 टेबल हैं - एक का रंग डेटा और दूसरा आकार का डेटा है। यहां, इन्वेंट्री को सुनिश्चित करने के लिए, आप यह सुनिश्चित करने के लिए दोनों तालिकाओं का एक CROSS JOIN करने पर विचार कर सकते हैं कि सभी वस्त्र सभी आकार और रंग संयोजनों के लिए खरीदे जाते हैं।
जॉय का चयन करें
SELF JOIN किसी भी अन्य INNER या OUTER जॉइन की तरह ही है, केवल अपवादों के साथ कि दोनों टेबल यानी जॉइनिंग और जॉइन टेबल एक ही हैं।
जब हम उसी तालिका की पंक्तियों के बीच संबंध का पता लगाना चाहते हैं तो हम आम तौर पर SELF Joins का उपयोग करते हैं। उदाहरण के लिए, यदि किसी तालिका में कर्मचारी आईडी और पर्यवेक्षक कर्मचारी आईडी दोनों हैं, तो हम कर्मचारी के नाम के खिलाफ प्रबंधक का नाम पता लगाना चाहते हैं, तो हम खुद के खिलाफ तालिका में शामिल हो सकते हैं।
कृपया ध्यान दें कि SELF JOIN के लिए आपको टेबल अलायस का उपयोग करना चाहिए ताकि जॉइन की गई शर्तों को सही टेबल की ओर निर्दिष्ट किया जा सके।
आइए एक उदाहरण यहां देखें:
SELECT e1.name as Employee1, e2.name as Employee2 from Employee e1 inner join Employee e2 on e1.office_id = e2.office_id where e1.Department_id = e2.Department_id
यहाँ, हम कर्मचारी तालिका में शामिल हो गए हैं ताकि वे कर्मचारी के नाम का पता लगा सकें, जिनका कार्यालय स्थान और विभाग समान हो
कर्मचारी १ | कर्मचारी २ |
---|---|
तथा | लचीलाता |
खीज | खीज |
खीज | बाहर |
के | कार्यालयों |
चीज़ें | चीज़ें |
चीज़ें | कृप्या अ |
तथा | तथा |
तथा | तन |
उत्सुकता | उत्सुकता |
घटित होना | घटित होना |
चीज़ें | चीज़ें |
उस | उस |
बाहर | खीज |
बाहर | बाहर |
लचीलाता | तथा |
लचीलाता | लचीलाता |
लचीलाता | तन |
ज़रूरत | ज़रूरत |
तन | तथा |
तन | लचीलाता |
तन | तन |
कृप्या अ | चीज़ें |
कृप्या अ | कृप्या अ |
जैसा कि हमने चर्चा की थी, SELF JOIN सिर्फ ज्वाइनिंग है और उसी के साथ तालिकाओं को मिलाया है, हम SELF JOIN को INNER या OUTER Joins के साथ उपयोग कर सकते हैं।
MySQL के साथ अद्यतन और DELETE
अब तक, हमने जॉइन सिलेक्ट स्टेटमेंट्स के साथ चर्चा की है। हालाँकि, Joins को MySQL DELETE और UPDATE स्टेटमेंट्स के साथ भी इस्तेमाल किया जा सकता है।
सिंटैक्स यहाँ एक ही रहता है। आइए अवधारणा को बेहतर ढंग से समझने के लिए कुछ उदाहरण देखें।
अद्यतन के साथ अद्यतन करें
मान लीजिए कि हम कर्मचारी तालिका में उस पते को कार्यालय स्थान के नाम से बदलना चाहते हैं जो कार्यालय_लोकेशन तालिका में मौजूद है। यहाँ हम INNER JOIN का उपयोग करके office_locations से शहर का नाम प्राप्त कर सकते हैं और उसी क्वेरी को अपडेट कर सकते हैं।
नमूना प्रश्न:
UPDATE Employee emp inner join office_locations off_loc on emp.office_id = off_loc.id set emp.address = off_loc.address;
इसके समान, विशिष्ट उपयोग के मामलों की आवश्यकता के आधार पर, UPDATE का उपयोग अन्य प्रकार के जोड़ों के साथ भी किया जा सकता है।
ININ JOIN के साथ DELETE करें
हम उदाहरण के रूप में तालिकाओं, कर्मचारी और कर्मचारी_डिपार्टमेंट का उपयोग करेंगे। मान लीजिए कि हम उन सभी कर्मचारी रिकॉर्ड को हटाना चाहते हैं जो बिक्री विभाग के हैं और हम बिक्री विभाग के लिए भी प्रविष्टि को हटाना चाहते हैं।
चूंकि हमने FOR_IGN KEY बाधा के रूप में Department_id का उपयोग किया है, इसलिए हमें कई तालिकाओं के लिए JOIN के साथ DELETE का उपयोग करने से पहले उस बाधा को रोकना चाहिए।
आइए सबसे पहले उस कर्मचारी के नाम का पता लगाएं, जो कर्मचारी तालिका में Department_id के लिए बनाया गया है। क्रिएट टेबल कमांड प्राप्त करने के लिए बस कमांड चलाएं।
show create table Employee
आपको आउटपुट इस प्रकार मिलेगा:
CREATE TABLE `Employee` ( `name` varchar(100) DEFAULT NULL, `id` int NOT NULL AUTO_INCREMENT, `address` varchar(100) DEFAULT NULL, `Department_id` int DEFAULT NULL, `office_id` int DEFAULT NULL, PRIMARY KEY (`id`), KEY `Department_id` (`Department_id`), CONSTRAINT `Employee_ibfk_1` FOREIGN KEY (`Department_id`) REFERENCES `Employee_Department` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
अब आप उपरोक्त कमांड से IGN Employee_ibfk_1 ’के लिए FOREIGN_KEY बाधा का नाम उल्लेख कर सकते हैं और हम नीचे दिए गए आदेश को चलाकर इस नाम को कर्मचारी तालिका से हटा सकते हैं।
alter table Employee drop constraint Employee_ibfk_1
अब INNER JOIN के साथ DELETE कमांड को रन करें
delete emp_dept, emp from Employee emp inner join Employee_Department emp_dept on emp.Department_id = emp_dept.id where emp.Department_id = 9
इस कमांड का आउटपुट नहीं होगा। हटाए गए पंक्तियों (और यह सफलतापूर्वक ऊपर की ओर क्वेरी में संदर्भित दोनों तालिकाओं से पंक्तियों को हटाना चाहिए)
बार बार पूछे जाने वाले प्रश्न
Q # 1) MySQL में कितने प्रकार के Joins हैं?
उत्तर: MySQL मुख्य रूप से 3 प्रकार के Joins को सपोर्ट करता है। ये:
- आंतरिक रूप से जुड़ा
- आउटर जॉइन - लेफ्ट आउटर जॉइन और राइट आउटर जॉइन
- क्रॉस जॉइन करें
Q # 2) जॉइन सिर्फ 2 टेबल के लिए इस्तेमाल किया जा सकता है?
उत्तर: जोड़ों को 2 या 2 से अधिक तालिकाओं पर लागू किया जा सकता है। ज्यादातर समय 2 टेबल के लिए जॉइन किया जाता है।
नीचे 3 टेबल का उपयोग कर INNER JOIN का एक उदाहरण दिया गया है:
select Employee.name as emp_name, Employee_Department.name as dept_name, office_locations.address as office_location from Employee inner join Employee_Department on Employee.Department_id = Employee_Department.id inner join office_locations on Employee.office_id = office_locations.id
उपरोक्त क्वेरी का आउटपुट:
emp_name | dept_name | कार्यालय स्थान |
---|---|---|
बाहर | प्रबंध | बैंगलोर |
खीज | प्रबंध | बैंगलोर |
चीज़ें | सुरक्षा | बैंगलोर |
तथा | संविदा कर्मचारी | मुंबई |
उत्सुकता | संविदा कर्मचारी | बैंगलोर |
घटित होना | मानव संसाधन | मुंबई |
उस | सहयोग | मुंबई |
लचीलाता | संविदा कर्मचारी | मुंबई |
ज़रूरत | लेखांकन | बैंगलोर |
तन | संविदा कर्मचारी | मुंबई |
कृप्या अ | सुरक्षा | बैंगलोर |
Q # 3) जॉइन के साथ टेबल एलियसेस का उपयोग कैसे करें?
उत्तर: उपनाम एक तालिका के लिए एक अस्थायी नाम रखने का एक तरीका है जिसे क्वेरी के भीतर संदर्भित किया जाना है। चूंकि JOIN प्रश्न कई बार जटिल होते हैं और प्रश्नों को पठनीय बनाने के लिए और प्रत्येक कॉलम संदर्भ के लिए टेबल नामों का संदर्भ देने से बचते हैं, इसलिए हम उपनामों को छोटा कर सकते हैं।
आइए एक इंमरिन जॉइन क्वेरी को सभी कर्मचारी नामों और विभागों के नामों के डेटा को क्रमशः टेबल एम्प्लाई और एम्प्लॉई_डिपार्टमेंट से प्राप्त करने के लिए लिखें।
select emp.name as emp_name, Department.name as dept_name from Employee emp inner join Employee_Department as Department on emp.Department_id = Department.id
उपरोक्त क्वेरी में, आप देख सकते हैं कि हमारे पास एम्प्लॉई टेबल को एम्पायर और एम्प्लॉई_डैप टेबल के रूप में विभाग के रूप में अलियास किया गया है और कॉलम नामों और जॉइन की शर्तों को संदर्भित करने के लिए उपनाम का उपयोग किया है।
Q # 4) क्रॉस जॉइन क्या है?
उत्तर: क्रोस जॉइन एक प्रकार का जॉइन है, जहां उपयोगकर्ता टेबल्स के कार्टेशियन उत्पाद को शामिल करना चाहता है।
CROSS JOIN का परिणाम m x n है जहाँ m पहली तालिका में मिलान पंक्तियों की संख्या नहीं है और n दूसरी तालिका में मिलान पंक्तियों की संख्या नहीं है।
Q # 5) MySQL में FULL OUTER JOIN कैसे करें
उत्तर: MySQL Microsoft SQL जैसे अन्य डेटाबेस के विपरीत एक अलग जॉइन प्रकार के रूप में पूर्ण OUTER JOIN प्रदान नहीं करता है। हालाँकि, पूर्ण OOO JOIN के रूप में परिणाम प्राप्त करने के लिए, हम LEFT OUTER JOIN और RIGHT OUTER JOIN के परिणामों को मिला सकते हैं।
उदाहरण के लिए, हम कर्मचारी और विभाग का विवरण प्राप्त कर सकते हैं और लेफ्ट और राईट आउटर जॉइन में संघ को लागू कर सकते हैं।
अनुशंसित पढ़ना = >> MySQL Union Operator
निष्कर्ष
इस ट्यूटोरियल में, हमने विभिन्न प्रकार के Joins के बारे में सीखा जो MySQL में उपलब्ध हैं।
हमने INNER, OUTER, CROSS और SELF जॉइन पर चर्चा की और यह भी देखा कि कैसे JOIN प्रश्नों को UPDATE और DELETE कथनों के साथ प्रयोग किया जा सकता है जिनमें 2 या 2 से अधिक टेबलों के बीच सम्मिलित डेटा के लिए कुशल और अनुकूलित क्वेरीज़ हैं।
जॉइन सबसे बुनियादी उपयोग किए गए प्रश्नों में से एक है और SQL आधारित डेटाबेस का उपयोग करने या सीखने वाले किसी व्यक्ति को SQL जॉइन की पूरी समझ होनी चाहिए।
अनुशंसित पाठ
- इनर ज्वाइन Vs Vs आउटर जॉइन: एक्सेप्ट डिफरेंस विथ एग्जाम्पल्स
- कोड उदाहरणों के साथ MySQL क्रिएट ट्यूटोरियल देखें
- MySQL Delete स्टेटमेंट - डिलीट कमांड सिंटैक्स और उदाहरण
- MySQL तालिका में सम्मिलित करें - स्टेटमेंट सिंटैक्स और उदाहरण डालें
- MySQL अपडेट स्टेटमेंट ट्यूटोरियल - अपडेट सिंटैक्स और उदाहरण
- SQL बनाम MySQL बनाम SQL सर्वर के बीच अंतर (उदाहरण के साथ)
- MySQL क्या है और इसका उपयोग क्यों किया जाता है?
- 20+ MongoDB शुरुआती के लिए ट्यूटोरियल: नि: शुल्क MongoDB कोर्स