SQL IN बनाम SQL EXISTS
यह लेख IN और SQL में EXISTS ऑपरेटरों के बारे में विस्तार से चर्चा करता है . डेवलपर्स के बीच यह एक आम सवाल है कि इन दोनों ऑपरेटरों के बीच क्या अंतर है। अंतर जानने के लिए, आइए पहले इनमें से प्रत्येक ऑपरेटर के बारे में विस्तार से चर्चा करें।
इन ऑपरेटर
IN ऑपरेटर का उपयोग परिणाम प्राप्त करने के लिए किया जाता है जब एक निर्दिष्ट मान मानों के एक सेट में किसी मान से मेल खाता है या किसी आंतरिक क्वेरी द्वारा लौटाया जाता है। इस ऑपरेटर का उपयोग WHERE . के साथ भी किया जा सकता है एक से अधिक मान निर्दिष्ट करने के लिए खंड। IN ऑपरेटर को अक्सर OR ऑपरेटर के संक्षिप्त नाम के रूप में संदर्भित किया जाता है क्योंकि यह SELECT, INSERT, UPDATE या DELETE क्वेरी में एकाधिक OR शर्तों के उपयोग को कम करता है ।
इस ऑपरेटर में, सबक्वायरी को पहले हल किया जाता है और फिर उस परिणाम का उपयोग बाहरी क्वेरी को हल करने के लिए किया जाता है।
आईएन ऑपरेटर का सामान्य सिंटैक्स निम्नलिखित है:
SELECT column_name FROM table_name WHERE column_name IN (value1, value2, …);
उदाहरण:
आइए निम्नलिखित ग्राहक तालिका पर विचार करें।
Cust_id | Cust_name | शहर | व्यवसाय |
1 | हैरी | कोलकाता | व्यवसाय |
2 | रॉन | मुंबई | डॉक्टर |
3 | एल्बस | दिल्ली | इंजीनियर |
4 | डॉबी | पुणे | वैज्ञानिक |
5 | स्नेप | बैंगलोर | विद्यार्थी |
प्रश्न:
SELECT * FROM Customer WHERE Occupation IN ('Doctor', 'Scientist', 'Engineer');
उपरोक्त क्वेरी उन सभी ग्राहकों को वापस कर देगी जो डॉक्टर या वैज्ञानिक या इंजीनियर हैं।
आउटपुट:
Cust_id | Cust_name | शहर | व्यवसाय |
2 | रॉन | मुंबई | डॉक्टर |
3 | एल्बस | दिल्ली | इंजीनियर |
4 | डॉबी | पुणे | वैज्ञानिक |
मौजूद ऑपरेटर
EXISTS ऑपरेटर, IN ऑपरेटर के विपरीत, बूलियन मान देता है। यह ऑपरेटर आंतरिक क्वेरी के परिणाम की जांच करता है और एक बूलियन मान लौटाता है, या तो सही या गलत। यदि आंतरिक क्वेरी एकल या एकाधिक रिकॉर्ड लौटाती है, तो ऑपरेटर सही लौटाता है अन्यथा कोई रिकॉर्ड नहीं मिलने पर यह गलत लौटाता है।
यह ऑपरेटर भी कुशल है क्योंकि जैसे ही पहली सच्ची घटना का पता चलता है, यह आगे की प्रक्रिया को रोक देता है।
EXISTS ऑपरेटर का सिंटैक्स निम्नलिखित है:
SELECT column_names FROM table_name WHERE NOT EXISTS ( SELECT column_names FROM table_name WHERE condition );
उदाहरण:
आइए निम्नलिखित ग्राहक तालिका पर विचार करें।
Cust_id | नाम | व्यवसाय | आयु |
101 | हैरी | इंजीनियर | 32 |
102 | रॉन | डेवलपर | 30 |
103 | डॉबी | नेता | 28 |
104 | एल्बस | वैज्ञानिक | 45 |
105 | स्नेप | बढ़ई | 26 |
106 | अदरक | अभिनेता | 25 |
107 | शून्य | शून्य | शून्य |
आइए एक और टेबल ऑर्डर पर विचार करें।
Order_id | Cust_id | Product_name | आदेश_तिथि |
1 | 101 | लैपटॉप | 2021-01-10 |
2 | 103 | डेस्कटॉप | 2021-02-12 |
3 | 106 | आईफोन | 2021-02-15 |
4 | 104 | मोबाइल | 2021-03-05 |
5 | 102 | टीवी | 2021-03-20 |
प्रश्न:
SELECT Name, Occupation FROM Customer WHERE EXISTS ( SELECT * FROM Orders WHERE Customer.Cust_id = Orders.Cust_id );
उपरोक्त प्रश्न उन सभी ग्राहकों का नाम और व्यवसाय लौटाएगा जिन्होंने कम से कम एक आदेश दिया है।
आउटपुट:
नाम | व्यवसाय |
हैरी | इंजीनियर |
रॉन | डेवलपर |
डॉबी | नेता |
एल्बस | वैज्ञानिक |
अदरक | अभिनेता |
IN और EXISTS ऑपरेटर के बीच अंतर तालिका
IN ऑपरेटर और EXISTS ऑपरेटर के बीच मुख्य अंतर नीचे सारणीबद्ध तरीके से सूचीबद्ध हैं:
IN ऑपरेटर | मौजूद ऑपरेटर |
यह OR शर्तों के उपयोग को कम करता है। | यह आंतरिक क्वेरी में एक रिकॉर्ड के अस्तित्व की जाँच करता है। |
यह बाहरी क्वेरी के मान के साथ आंतरिक क्वेरी के मानों की तुलना करता है। | यह आंतरिक क्वेरी और उप क्वेरी के बीच के मानों की तुलना नहीं करता है। |
यह IN खंड के ब्लॉक के अंदर सभी मानों की जाँच करता है। | पहली सही शर्त पूरी होते ही यह किसी भी आगे के निष्पादन को रोक देता है। |
यह TRUE, FALSE या NULL लौटा सकता है। | यह या तो TRUE या FALSE लौटाता है। |
इसका उपयोग NULL मानों की जांच के लिए किया जा सकता है। | इसका उपयोग NULL मानों की जांच के लिए नहीं किया जा सकता है। |
इसका उपयोग सबक्वेरी और वैल्यू दोनों के साथ किया जाता है। | इसका उपयोग केवल सबक्वेरी के साथ किया जाता है। |
आंतरिक क्वेरी का परिणाम कम होने पर निष्पादन तेज होता है। | आंतरिक क्वेरी का परिणाम बड़ा होने पर भी निष्पादन तेज होता है। यह IN ऑपरेटर से अधिक कुशल है। |
वाक्यविन्यास :table_name से column_names चुनें जहां column_name IN (सबक्वेरी); | सिंटैक्स :चुनें column_namesFROM table_nameWHERE [NOT] EXISTS (सबक्वेरी); |
निष्कर्ष:
इस विषय में, IN ऑपरेटर और SQL के EXISTS ऑपरेटरों के बीच तुलना की गई है। दोनों ऑपरेटर एक ही ऑपरेशन करते हैं लेकिन उनकी आंतरिक कार्यप्रणाली अलग होती है। उनके पास अलग-अलग तार्किक कार्य हैं। उनमें से किसी एक को आवश्यकता के अनुसार चुना जा सकता है। लेकिन, यदि डेटा का सेट बड़ा है, तो हमेशा EXISTS ऑपरेटर के लिए जाने की अनुशंसा की जाती है।