EXCEPT और NOT IN दोनों ऑपरेटरों का उपयोग किसी विशिष्ट मानदंड के आधार पर किसी तालिका से रिकॉर्ड फ़िल्टर करने के लिए किया जाता है। इस लेख में, हम इन ऑपरेटरों को विस्तार से देखेंगे और उनके बीच के अंतरों की जांच करेंगे।
इससे पहले कि हम आगे बढ़ें, आइए कुछ डमी डेटा बनाएं जिनका उपयोग हम इस उदाहरण में करेंगे:
डमी डेटा तैयार करना
एक डमी डेटाबेस और टेबल बनाने के लिए निम्न स्क्रिप्ट को निष्पादित करें जिसका उपयोग हम इस लेख में करेंगे।
CREATE Database ShowRoom; GO USE ShowRoom; CREATE TABLE Cars1 ( id INT, name VARCHAR(50) NOT NULL, company VARCHAR(50) NOT NULL, power INT NOT NULL ) CREATE TABLE Cars2 ( id INT, name VARCHAR(50) NOT NULL, company VARCHAR(50) NOT NULL, power INT NOT NULL )
ऊपर की स्क्रिप्ट में, हम दो टेबल, Cars1 और Cars2 के साथ एक शोरूम डेटाबेस बनाते हैं।
आइए Cars1 और Cars2 टेबल में कुछ डमी रिकॉर्ड जोड़ें।
निम्न स्क्रिप्ट निष्पादित करें:
USE ShowRoom INSERT INTO Cars1 VALUES (1, 'Corrolla', 'Toyota', 1800), (2, 'City', 'Honda', 1500), (3, 'C200', 'Mercedez', 2000), (4, 'Vitz', 'Toyota', 1300), (5, 'Baleno', 'Suzuki', 1500), (6, 'C500', 'Mercedez', 5000), (7, '800', 'BMW', 8000), (8, 'Mustang', 'Ford', 5000), (9, '208', 'Peugeot', 5400), (10, 'Prius', 'Toyota', 3200) INSERT INTO Cars2 VALUES (6, 'C500', 'Mercedez', 5000), (7, '800', 'BMW', 8000), (8, 'Mustang', 'Ford', 5000), (9, '208', 'Peugeot', 5400), (10, 'Prius', 'Toyota', 3200), (11, 'Atlas', 'Volkswagen', 5000), (12, '110', 'Bugatti', 8000), (13, 'Landcruiser', 'Toyota', 3000), (14, 'Civic', 'Honda', 1800), (15, 'Accord', 'Honda', 2800)
अब हमारे पास एक उपयोगी डेटा सेट है।
आइए देखें कि कैसे EXCEPT और NOT IN ऑपरेटर इस डेटा का उपयोग करके एक दूसरे से भिन्न होते हैं।
ऑपरेटर को छोड़कर
EXCEPT ऑपरेटर बाएँ क्वेरी परिणाम से सभी रिकॉर्ड फ़िल्टर करता है, जो दाएँ क्वेरी के परिणाम में भी मौजूद होते हैं और बाएँ क्वेरी से शेष परिणाम लौटाते हैं।
EXCEPT ऑपरेटर का सिंटैक्स इस प्रकार है:
Right_Query EXCEPT Left_Query
EXCEPT ऑपरेटर के निष्पादन से पहले दो शर्तें पूरी करने की आवश्यकता होती है। वे हैं:
- दोनों प्रश्नों द्वारा दिए गए कॉलम का क्रम और संख्या समान होनी चाहिए।
- कॉलम के डेटा प्रकार मेल खाने चाहिए या संगत होने चाहिए।
यह मुश्किल लग सकता है। हालांकि, निम्न उदाहरण इसे स्पष्ट कर देगा।
Cars1 और Cars2 टेबल में, id 6 से id 10 तक के रिकॉर्ड सामान्य हैं। यदि हम बाईं ओर Cars1 तालिका और दाईं ओर Cars2 तालिका से रिकॉर्ड के साथ EXCEPT ऑपरेटर का उपयोग करते हैं, तो Cars1 तालिका से वे रिकॉर्ड वापस कर दिए जाएंगे जो Cars2 में नहीं हैं।
आइए EXCEPT ऑपरेटर को कार्रवाई में देखें।पी>
USE ShowRoom SELECT id, name, company, power FROM Cars1 Except SELECT id, name, company, power FROM Cars2
उपरोक्त क्वेरी का परिणाम इस तरह दिखेगा:
बाईं ओर की क्वेरी Cars1 तालिका से सभी रिकॉर्ड पुनर्प्राप्त करती है जबकि दाईं ओर Cars2 तालिका से सभी रिकॉर्ड पुनर्प्राप्त करती है। Cars1 तालिका में आईडी 6 से 10 तक के रिकॉर्ड भी Cars2 तालिका में मौजूद हैं, इसलिए, EXCEPT ऑपरेटर ने Cars1 तालिका से केवल पहली पांच पंक्तियों को वापस किया है।
इसी तरह, यदि आप Cars2 तालिका से सभी रिकॉर्ड वापस करना चाहते हैं जो Cars1 तालिका में मौजूद नहीं हैं, तो आप बस Cars2 तालिका को EXCEPT ऑपरेटर के बाईं ओर ले जा सकते हैं जैसा कि निम्न क्वेरी में दिखाया गया है:
USE ShowRoom SELECT id, name, company, power FROM Cars2 Except SELECT id, name, company, power FROM Cars1का इस्तेमाल करें
एकल टेबल पर EXCEPT ऑपरेटर का उपयोग करना
पिछले उदाहरणों में, हमने EXCEPT ऑपरेटर को दो तालिकाओं पर लागू किया था। हालाँकि, EXCEPT ऑपरेटर का उपयोग एकल तालिका से रिकॉर्ड को फ़िल्टर करने के लिए भी किया जा सकता है। उदाहरण के लिए, यदि आप Cars1 टेबल से सभी रिकॉर्ड्स को फ़िल्टर करना चाहते हैं, जहां पावर वैल्यू 3,000 से अधिक है, तो आप EXCEPT ऑपरेटर का उपयोग निम्नानुसार कर सकते हैं:
USE ShowRoom SELECT id, name, company, power FROM Cars1 Except SELECT id, name, company, power from Cars1 WHERE power < 3000
उपरोक्त स्क्रिप्ट में, EXCEPT ऑपरेटर के बाईं ओर की क्वेरी Cars1 तालिका से सभी रिकॉर्ड पुनर्प्राप्त करती है। EXCEPT ऑपरेटर के दाईं ओर की क्वेरी Cars1 टेबल से केवल उन रिकॉर्ड्स को पुनः प्राप्त करती है जहां पावर वैल्यू 3,000 से कम है। EXCEPT ऑपरेटर बाईं ओर की क्वेरी से रिकॉर्ड फ़िल्टर करता है जो दाईं ओर क्वेरी से परिणामों में मौजूद है। इसलिए, Cars1 तालिका में सभी रिकॉर्ड जहां बिजली 3,000 से कम है, फ़िल्टर किए जाएंगे और शेष रिकॉर्ड नीचे दिए गए आउटपुट में दिखाए गए अनुसार वापस कर दिए जाएंगे:
ऑपरेटर में नहीं है
NOT IN ऑपरेटर का उपयोग पंक्तियों को फ़िल्टर करने के लिए भी किया जाता है। आइए Cars1 तालिका से सभी रिकॉर्ड खोजें जो Cars2 तालिका में भी मौजूद हैं और NOT IN ऑपरेटर का उपयोग करके शेष रिकॉर्ड लौटाते हैं।
USE ShowRoom SELECT id, name, company, power FROM Cars1 WHERE id NOT IN (SELECT id from Cars2)का इस्तेमाल करें
उपरोक्त क्वेरी का परिणाम इस तरह दिखता है:
यह EXCEPT ऑपरेटर का उपयोग करके प्राप्त परिणामों के समान है।
ऑपरेटर में छोड़कर और नहीं के बीच अंतर
हम देख सकते हैं कि EXCEPT और NOT IN ऑपरेटर का उपयोग करके प्राप्त परिणाम समान हैं। हालांकि, EXCEPT और NOT IN ऑपरेटरों के बीच दो प्रमुख अंतर हैं:
1- रिटर्न डुप्लीकेट रिकॉर्ड्स में नहीं, केवल अलग रिकॉर्ड्स को छोड़कर
EXCEPT ऑपरेटर परिणामों से डुप्लिकेट पंक्तियों को हटा देता है और केवल DISTINCT रिकॉर्ड लौटाता है। दूसरी ओर, NOT IN ऑपरेटर डुप्लीकेट रिकॉर्ड लौटाएगा।
आइए इसे एक उदाहरण की मदद से देखते हैं। Cars1 तालिका में डुप्लिकेट रिकॉर्ड सम्मिलित करने के लिए निम्न क्वेरी निष्पादित करें।
INSERT INTO Cars1 VALUES (1, 'Corrolla', 'Toyota', 1800)
अब Cars1 तालिका में दो डुप्लिकेट रिकॉर्ड हैं। आप निम्न क्वेरी निष्पादित करके इसे सत्यापित कर सकते हैं:
SELECT * FROM Cars1
Cars1 टेबल कुछ इस तरह दिखेगी:
आप देख सकते हैं कि पंक्तियाँ 1 और 11 एक दूसरे की डुप्लीकेट हैं।
आइए पहले कार1 तालिका से सभी रिकॉर्ड फ़िल्टर करने के लिए EXCEPT ऑपरेटर का उपयोग करें जो Cars2 तालिका में मौजूद हैं।
USE ShowRoom SELECT id, name, company, power FROM Cars1 Except SELECT id, name, company, power FROM Cars2
परिणाम इस तरह दिखता है:
आप देख सकते हैं कि हालांकि पंक्ति 1 और 11 Cars1 तालिका में डुप्लिकेट थे और वे Cars2 तालिका में मौजूद नहीं थे, EXCEPT ऑपरेटर ने इन दोनों पंक्तियों को वापस नहीं किया। इसने केवल विशिष्ट पंक्तियों को लौटाया है।
अब इसी कार्य के लिए NOT IN ऑपरेटर का उपयोग करते हैं:
USE ShowRoom SELECT id, name, company, power FROM Cars1 WHERE id NOT IN (SELECT id from Cars2)का इस्तेमाल करें
उपरोक्त क्वेरी का आउटपुट इस तरह दिखता है:
आप देख सकते हैं कि NOT IN डुप्लीकेट पंक्तियों यानी पंक्ति 1 और पंक्ति 6 लौटाता है।
2- EXCEPT स्तंभों की तुलना करता है जबकि NOT IN किसी एकल मान की तुलना करता है
EXCEPT ऑपरेटर एक या एक से अधिक कॉलम में मानों की तुलना करता है। इसका मतलब है कि स्तंभों की संख्या समान होनी चाहिए। दूसरी ओर, NOT IN ऑपरेटर एक कॉलम में मानों की तुलना करता है।
उदाहरण के लिए, आपके पास EXCEPT ऑपरेटर के बाएँ और दाएँ प्रश्नों के लिए असमान संख्या में कॉलम नहीं हो सकते, जैसा कि निम्नलिखित उदाहरण में दिखाया गया है:
USE ShowRoom SELECT id, name, company, power FROM Cars1 Except SELECT id, name,power FROM Cars2
उपरोक्त क्वेरी निम्न त्रुटि लौटाती है:
NOT IN ऑपरेटर के लिए, आपके पास उप-क्वेरी में एक से अधिक कॉलम नहीं हो सकते। इसका अर्थ है कि निम्न क्वेरी एक त्रुटि लौटाएगी:
USE ShowRoom SELECT id, name, company, power FROM Cars1 WHERE id NOT IN (SELECT id, name from Cars2)
उपरोक्त लिपि में, उप-क्वेरी में दो कॉलम हैं यानी आईडी और नाम। इसलिए एक त्रुटि दी जाएगी:
आगे पढ़ना:
- W3 स्कूल:उदाहरणों में IN और NOT IN
- TechontheNet:ऑपरेटर को छोड़कर
- यूट्यूब:ऑपरेटर को छोड़कर