बाह्य सामील होण्याची कारणे
तसे, आम्ही आमची स्प्रेडशीट विलीन केली तेव्हा तुम्हाला आठवते का आणि आमची ऑफिस साफसफाईची कामे गायब झाली कारण तेथे अद्याप क्लिनर नव्हता?
तुम्ही अशी क्वेरी चालवल्यास:
SELECT * FROM task
मग आम्हाला हा परिणाम मिळेल:
आयडी | कर्मचारी_आयडी | नाव | अंतिम मुदत |
---|---|---|---|
१ | १ | फ्रंटएंडवरील बगचे निराकरण करा | 2022-06-01 |
2 | 2 | बॅकएंडवरील बगचे निराकरण करा | 2022-06-15 |
3 | ५ | कॉफी विकत घ्या | 2022-07-01 |
4 | ५ | कॉफी विकत घ्या | 2022-08-01 |
५ | ५ | कॉफी विकत घेईन | 2022-09-01 |
6 | (निरर्थक) | ऑफिसची साफसफाई करा | (निरर्थक) |
७ | 4 | जीवनाचा आनंद घे | (निरर्थक) |
8 | 6 | जीवनाचा आनंद घे | (निरर्थक) |
जर आपण एम्प्लॉयी_आयडी द्वारे एम्प्लॉयी टेबलसह टास्क टेबलमध्ये सामील होण्याचा प्रयत्न केला तर “क्लियर ऑफिस” टास्क गायब होईल.
या समस्येचे निराकरण करण्यासाठी, JOIN ऑपरेटरमध्ये विविध मॉडिफायर्स जोडले गेले आहेत जे अशा अनाथ पंक्ती दुसर्या टेबलमध्ये जोडल्याशिवाय संग्रहित करण्याची परवानगी देतात.
मी तुम्हाला जॉइन ऑपरेटरच्या क्लासिक फॉर्मची आठवण करून देतो:
table 1 JOIN table 2 ON
condition
डावीकडील सारणी (टेबल१) मधील सर्व डेटा जोडलेल्या टेबलमध्ये उपस्थित असल्याची खात्री करण्यासाठी आम्ही SQL सर्व्हरला सांगू शकतो. जरी त्यांच्यासाठी योग्य टेबलमध्ये कोणतीही जोडी नसली तरीही. हे करण्यासाठी, आपल्याला फक्त लिहिण्याची आवश्यकता आहे:
table 1 LEFT JOIN table 2 ON condition
जर तुम्हाला जॉईन केलेल्या टेबलमध्ये उजव्या टेबलमधील सर्व पंक्ती असाव्यात , तर तुम्हाला लिहावे लागेल:
table 1 RIGHT JOIN table 2 ON
condition
चला एक क्वेरी लिहू जी सर्व कार्ये आणि कर्मचारी एकत्र करेल जेणेकरून एक्झिक्युटरशिवाय कार्ये गमावली जाणार नाहीत. हे करण्यासाठी, एक क्वेरी लिहा:
SELECT * FROM employee e RIGHT JOIN task t ON e.id = t.emploee_id
आणि या क्वेरीचा परिणाम:
आयडी | नाव | व्यवसाय | पगार | वय | रुजू दिनांक | आयडी | कर्मचारी_आयडी | नाव |
---|---|---|---|---|---|---|---|---|
१ | इव्हानोव्ह इव्हान | प्रोग्रामर | 100000 | २५ | 2012-06-30 | १ | १ | फ्रंटएंडवरील बगचे निराकरण करा |
2 | पेट्रोव्ह पेत्र | प्रोग्रामर | 80000 | 23 | 2013-08-12 | 2 | 2 | बॅकएंडवरील बगचे निराकरण करा |
4 | राबिनोविच मोइशा | दिग्दर्शक | 200000 | 35 | 2015-05-12 | ७ | 4 | जीवनाचा आनंद घे |
५ | किरिएन्को अनास्तासिया | कार्यालय व्यवस्थापक | 40000 | २५ | 2015-10-10 | 3 | ५ | कॉफी विकत घ्या |
५ | किरिएन्को अनास्तासिया | कार्यालय व्यवस्थापक | 40000 | २५ | 2015-10-10 | 4 | ५ | कॉफी विकत घ्या |
५ | किरिएन्को अनास्तासिया | कार्यालय व्यवस्थापक | 40000 | २५ | 2015-10-10 | ५ | ५ | कॉफी विकत घ्या |
6 | वास्का | मांजर | 1000 | 3 | 2018-11-11 | 8 | 6 | जीवनाचा आनंद घे |
(निरर्थक) | (निरर्थक) | (निरर्थक) | (निरर्थक) | (निरर्थक) | (निरर्थक) | 6 | (निरर्थक) | ऑफिसची साफसफाई करा |
आमच्या टेबलमध्ये आणखी एक पंक्ती जोडली गेली आहे आणि विशेष म्हणजे त्यात बरीच NULL व्हॅल्यू आहेत. कर्मचारी टेबलमधून घेतलेला सर्व डेटा NULL म्हणून प्रदर्शित केला जातो, कारण "क्लीन ऑफिस" कार्यासाठी कर्मचारी टेबलमधून कोणताही एक्झिक्युटर नव्हता.
जॉईन प्रकार
एकूण 4 प्रकारचे JOIN आहेत. ते खालील तक्त्यामध्ये सादर केले आहेत:
थोडक्यात नोंद | लांब प्रवेश | स्पष्टीकरण | |
---|---|---|---|
१ | सामील व्हा | आतील सामील | फक्त नोंदी जे टेबल A आणि B मध्ये आहेत |
2 | डावीकडे सामील व्हा | बाहेरून डावीकडे सामील व्हा | सारणी A मधील जोडीशिवाय सर्व पंक्ती असणे आवश्यक आहे |
3 | उजवीकडे सामील व्हा | उजवीकडे बाहेरून सामील व्हा | टेबल बी मधील जोडीशिवाय सर्व पंक्ती असणे आवश्यक आहे |
4 | बाहेरून सामील व्हा | पूर्ण बाह्य सामील व्हा | टेबल A आणि B मधील बेस जोड्यांच्या सर्व पंक्ती असणे आवश्यक आहे |
साधेपणासाठी, जर आम्ही टेबल्सचे संच म्हणून प्रतिनिधित्व केले, तर JOIN हे चित्र म्हणून प्रदर्शित केले जाऊ शकते:

छेदनबिंदू सेट करा म्हणजे एका टेबलसाठी दुसर्या सारणीवरून संबंधित रेकॉर्ड आहे ज्याचा संदर्भ आहे.
मुलाखतीतील प्रश्न
कधीकधी नवशिक्या प्रोग्रामरवर मुलाखतीत अगदी सोप्या प्रश्नाचा भडिमार केला जातो. आमच्या सारण्या दिल्यास, ते खालीलप्रमाणे तयार केले जाऊ शकते:
"एक क्वेरी लिहा जी सर्व कर्मचार्यांची सूची प्रदर्शित करेल ज्यांच्यासाठी कोणतीही कार्ये नाहीत ." प्रथम, हा प्रश्न थोडासा पुन्हा सांगण्याचा प्रयत्न करूया: "एक क्वेरी लिहा जी कर्मचारी टेबलमधील सर्व कर्मचार्यांची सूची प्रदर्शित करेल ज्यासाठी कार्य सारणीमध्ये कोणतीही कार्ये नाहीत ." आम्हाला हा संच मिळणे आवश्यक आहे:
या समस्येचे निराकरण करण्याचे अनेक मार्ग आहेत, परंतु मी सर्वात सोप्या मार्गाने सुरुवात करेन: प्रथम, तुम्ही आमच्या टेबलमध्ये डाव्या जोडणीसह सामील होऊ शकता आणि नंतर जेथे गहाळ डेटा NULL ने पॅड केला होता त्या सर्व पंक्ती वगळण्यासाठी WHERE वापरा.
SELECT * FROM employee e LEFT JOIN task t ON e.id = t.emploee_id
WHERE t.id IS NULL
आणि या क्वेरीचा परिणाम:
आयडी | नाव | व्यवसाय | पगार | वय | रुजू दिनांक | आयडी | कर्मचारी_आयडी | नाव |
---|---|---|---|---|---|---|---|---|
3 | इव्हानोव्ह सेर्गे | परीक्षक | 40000 | तीस | 2014-01-01 | (निरर्थक) | (निरर्थक) | (निरर्थक) |
या सोल्यूशनचा एकमात्र तोटा असा आहे की येथे टेबलमधील पंक्तींमध्ये NULL आहे आणि अटीनुसार आम्हाला कर्मचार्यांची सूची प्रदर्शित करणे आवश्यक आहे.
हे करण्यासाठी, तुम्हाला एकतर कर्मचारी टेबलचे आवश्यक स्तंभ SELECT मध्ये सूचीबद्ध करावे लागतील किंवा तुम्हाला ते सर्व प्रदर्शित करायचे असल्यास, तुम्ही खालील बांधकाम लिहू शकता:
SELECT e.* FROM employee e, task t
संपूर्ण विनंती असे दिसेल:
SELECT e.*
FROM employee e RIGHT JOIN task t ON e.id = t.emploee_id
WHERE t.id IS NULL
या क्वेरीचा परिणाम:
आयडी | नाव | व्यवसाय | पगार | वय | रुजू दिनांक |
---|---|---|---|---|---|
3 | इव्हानोव्ह सेर्गे | परीक्षक | 40000 | तीस | 2014-01-01 |
बाकीच्या पद्धती गृहपाठासाठी तुमच्यावर सोडल्या आहेत. त्यांना स्वतःला शोधण्याचा आनंद मी तुम्हाला हिरावून घेऊ इच्छित नाही.
GO TO FULL VERSION