विषय
SQL का उपयोग करने में एक निरंतर चुनौती EXISTS और IN ऑपरेटरों के उचित उपयोग का निर्धारण करती है। दो ऑपरेटर एक ही परिणाम का उत्पादन कर सकते हैं, लेकिन हमेशा नहीं। इसके अलावा, इस बारे में काफी बहस है कि प्रत्येक ऑपरेटर को गति के लिए कैसे अनुकूलित किया जाता है। उपयोगकर्ताओं को प्रत्येक ऑपरेटर की विभिन्न विशेषताओं को समझना चाहिए और उचित उपयोग निर्धारित करने के लिए दोनों के साथ प्रयोग करना चाहिए।
EXISTS या IN चुनते समय अपने SQL लक्ष्य पर विचार करें (बृहस्पति / Photos.com / गेटी इमेजेज़)
संचालक में
यदि किसी तालिका के फ़ील्ड मान में IN मानों की सूची में WHERE शर्त को संतुष्ट करता है, तो IN ऑपरेटर एक पंक्ति देता है। यह आमतौर पर एक मुख्य क्वेरी के हिस्से के रूप में या एक उपशम के साथ संयोजन के रूप में उपयोग किया जाता है।
उदाहरण 1: WHERE टेबल.फ़ील्ड IN ('a', 'b', 'c') उदाहरण 2: WHERE टेबल.फ़ील्ड IN (उपसमुच्चय जो एक सेट लौटाता है)
EXISTS ऑपरेटर
यदि किसी उप-पंक्ति में कोई पंक्तियाँ हैं, तो EXISTS ऑपरेटर सभी प्रमुख पंक्तियों को लौटाता है। यह केवल एक उपकुंजी के साथ संयोजन में उपयोग किया जाता है। लौटी पंक्तियों को मुख्य क्वेरी में फ़िल्टर द्वारा निर्धारित किया जाता है।
उदाहरण: कहां से आए (उपसमुच्चय जो एक सेट लौटाता है)
अंतर
IN ऑपरेटर NULL मानों का मूल्यांकन नहीं कर सकता है, इसलिए ऐसी लाइनें हमेशा झूठी होंगी, और EXISTS ऑपरेटर के विपरीत नहीं लौटाई जाएंगी, जो NULL मानों के साथ लाइनों का मूल्यांकन और रिटर्न करती है।
समानता
EXISTS और IN दोनों सहसंबद्ध और असंबद्ध उपश्रेणियों का समर्थन करते हैं, और दोनों समान परिणाम उत्पन्न कर सकते हैं। जब सहसंबद्ध होते हैं, तो वे एक सबक्वेरी फ़ील्ड के लिए एक मुख्य क्वेरी फ़ील्ड को संतुष्ट करते हैं (उदाहरण के लिए: Princip.id = subquery.id)। सबक्वेरी पंक्ति द्वारा पंक्ति का मूल्यांकन करता है, प्रत्येक घटना के लिए। इस स्थिति में, IN और EXISTS समान "id" स्थितियों के आधार पर समान लाइनें लौटाएंगे। जब असंबद्ध, दोनों ऑपरेटर अपनी उपश्रेणियों को संसाधित करते हैं और फिर मुख्य क्वेरी के लिए परिणाम जोड़ते हैं।
प्रदर्शन
निष्पादन डेटाबेस ऑप्टिमाइज़र और निष्पादित कोड द्वारा उपयोग की जाने वाली निष्पादन योजना द्वारा निर्धारित किया जाता है। EXISTS और IN के लिए, अनुकूलक विभिन्न रास्तों को चुन सकता है। Oracle में, NOT EXISTS आमतौर पर IN से ज्यादा तेज नहीं है। अंत में, उपयोग किए जा रहे डेटाबेस और संस्करण के आधार पर, सबसे छोटे मार्ग को क्रमबद्ध करने के लिए कुछ प्रयासों और त्रुटियों की आवश्यकता होती है। उस ऑपरेटर का उपयोग करना सुनिश्चित करें जो पहले सही परिणाम की गारंटी देता है, और फिर ऑपरेटरों को बदलने के लिए यह देखने का प्रयास करें कि कौन सा सबसे तेज है।