क्यों NOT IN?
NOT IN ऑपरेटर पर ध्यान केंद्रित करने का कारण यह है कि यह डेटा बहिष्करण की स्थितियों में उपयोगी है। चाहे आप डेटा साफ़ कर रहे हों, रिपोर्ट तैयार कर रहे हों, या जटिल विश्लेषण कर रहे हों—विशिष्ट डेटा बिंदुओं को प्रभावी ढंग से बाहर करना समझना अमूल्य है। इस ऑपरेटर का सिंटैक्स सीधा है, लेकिन इसमें कुछ बारीकियाँ हैं जो प्रदर्शन और सटीकता को प्रभावित कर सकती हैं।
हमारा उद्देश्य NOT IN को गहराई से समझाना है ताकि आप इसे अपनी SQL क्वेरीज़ में प्रभावी ढंग से इस्तेमाल कर सकें।
SQL NOT IN को समझना
NOT IN की बुनियाद
NOT IN ऑपरेटर का उपयोग WHERE क्लॉज़ में उन पंक्तियों को बाहर करने के लिए किया जाता है जहाँ किसी निर्दिष्ट कॉलम का मान दी गई मानों की सूची में किसी से भी मेल खाता हो। इसका मूल सिंटैक्स इस प्रकार है:
SELECT column_names
FROM table_name
WHERE column_name NOT IN (value1, value2, ...);
यह सिंटैक्स ऑपरेटर की डेटा फ़िल्टरिंग में भूमिका को रेखांकित करता है—जो डेटा विश्लेषण और डेटाबेस प्रबंधन में एक अहम कदम है।
NOT IN के व्यावहारिक उपयोग
मान लें कि आपके पास ग्राहक जानकारी वाली एक तालिका है। यदि आप ऐसे ग्राहकों का चयन करना चाहते हैं जो कुछ विशिष्ट शहरों से नहीं हैं, तो NOT IN एक अमूल्य उपकरण बन जाता है, जो आपको परिणाम सेट से उन शहरों को आसानी से बाहर करने देता है।
कदम-दर-कदम NOT IN उदाहरण
उदाहरण 1: विशिष्ट मानों को बाहर करना
मान लें कि हमारे पास Customers नाम की तालिका है, जिसमें CustomerID, CustomerName, और City कॉलम हैं। ऐसे ग्राहकों को ढूँढने के लिए जो 'New York' या 'Los Angeles' में नहीं हैं, क्वेरी होगी:
|
CustomerlD |
CustomerName |
City |
|
1 |
John Doe |
New York |
|
2 |
Jane Smith |
Los Angeles |
|
3 |
Emily Jones |
Chicago |
|
4 |
Chris Brown |
Miami |
|
5 |
Alex Johnson |
San Francisco |
|
6 |
Jessica White |
New York |
Customers तालिका
SELECT CustomerName, City
FROM Customers
WHERE City NOT IN ('New York', 'Los Angeles');
|
CustomerName |
City |
|
Emily Jones |
Chicago |
|
Chris Brown |
Miami |
|
Alex Johnson |
San Francisco |
उदाहरण 2: Subqueries के साथ NOT IN का उपयोग
NOT IN subqueries के साथ भी काम कर सकता है। उदाहरण के लिए, ऐसे उत्पाद ढूँढने के लिए जिनका कभी ऑर्डर नहीं हुआ:
|
ProductID |
ProductName |
|
1 |
Apple |
|
2 |
Banana |
|
3 |
Orange |
|
4 |
Pear |
|
5 |
Grape |
Products तालिका
|
OrderID |
ProductID |
|
101 |
2 |
|
102 |
4 |
|
103 |
2 |
|
104 |
3 |
Orders तालिका
SELECT ProductName
FROM Products
WHERE ProductID NOT IN (
SELECT ProductID
FROM Orders
);
|
ProductName |
|
Apple |
|
Grape |
सामान्य गलतियाँ और उनसे कैसे बचें
NULL मानों को संभालना
NOT IN के साथ एक आम समस्या तब आती है जब मानों की सूची में NULL हो। क्योंकि NULL एक अज्ञात मान का प्रतिनिधित्व करता है, NOT IN के साथ NULL की कोई भी तुलना कोई पंक्ति वापस नहीं करेगी, भले ही कुछ पंक्तियाँ तार्किक रूप से सूची से बाहर होनी चाहिए।
इसे टालने के लिए, सुनिश्चित करें कि मानों की सूची में NULL शामिल न हो, या NOT EXISTS जैसे वैकल्पिक तरीक़े अपनाएँ।
उदाहरण:
मान लें कि हमारे पास Orders तालिका है जिसमें CustomerID कॉलम है, जिनमें से कुछ NULL हैं जो अतिथि ऑर्डर दर्शाते हैं। यदि आप कुछ ग्राहकों द्वारा न किए गए ऑर्डर ढूँढने की क्वेरी चलाते हैं, और सूची में NULL शामिल करते हैं, तो कोई परिणाम नहीं मिलेगा।
|
OrderID |
CustomerID |
|
101 |
3 |
|
102 |
4 |
|
103 |
2 |
|
104 | |
|
106 |
1 |
Orders तालिका
-- Assume we want to exclude CustomerID 1, 2, and unknown (NULL) customers
SELECT OrderID
FROM Orders
WHERE CustomerID NOT IN (1, 2, NULL);
यह क्वेरी कोई पंक्ति वापस नहीं करेगी, जो संभवतः इच्छित परिणाम नहीं है।
समाधान: सटीक परिणाम सुनिश्चित करने के लिए, NOT IN की सूची में NULL शामिल न करें। वैकल्पिक रूप से, ज्ञात मानों के लिए NOT IN और IS NOT NULL का संयोजन उपयोग करें ताकि NULL को प्रभावी ढंग से संभाला जा सके।
SELECT OrderID
FROM Orders
WHERE CustomerID NOT IN (1, 2) AND CustomerID IS NOT NULL;
|
OrderID |
|
101 |
|
102 |
प्रदर्शन संबंधी विचार
बड़े डेटासेट या subqueries के लिए, NOT IN अक्सर NOT EXISTS या LEFT JOIN /IS NULL जैसे विकल्पों से कम कुशल हो सकता है। यह कमी इसलिए होती है क्योंकि NOT IN तालिका की हर पंक्ति की तुलना सूची के हर मान से करता है, जो बड़े डेटासेट पर धीमे प्रदर्शन का कारण बन सकता है।
SQL NOT IN के विकल्प
NOT EXISTS का उपयोग
जब ऐसे subqueries होते हैं जो NULL मान लौटा सकते हैं, तो NOT EXISTS को अक्सर NOT IN से बेहतर माना जाता है। यह सामान्यतः अधिक कुशल होता है क्योंकि मिलान मिलते ही यह रुक जाता है।
उदाहरण:
ऐसे उत्पाद ढूँढने के लिए जिनका कभी ऑर्डर नहीं हुआ, NOT EXISTS का उपयोग:
SELECT ProductName
FROM Products p
WHERE NOT EXISTS (
SELECT 1
FROM Orders o
WHERE o.ProductID = p.ProductID
);
|
ProductName |
|
Apple |
|
Grape |
यह क्वेरी orders तालिका में किसी उत्पाद के न होने की जाँच करती है, जो NOT IN के साथ संभावित रूप से बड़ी ID सूची से तुलना करने की तुलना में अधिक कुशल हो सकती है।
LEFT JOIN / IS NULL
पंक्तियों को बाहर करने का एक और कुशल तरीका LEFT JOIN के साथ WHERE ... IS NULL क्लॉज़ का उपयोग करना है। यह तरीका विशेष रूप से बड़े डेटासेट के लिए प्रभावी है।
उदाहरण:
उसी उद्देश्य—ऐसे उत्पाद ढूँढना जिनका कभी ऑर्डर नहीं हुआ—को पाने के लिए:
SELECT p.ProductName
FROM Products p
LEFT JOIN Orders o ON p.ProductID = o.ProductID
WHERE o.ProductID IS NULL;
|
ProductName |
|
Apple |
|
Grape |
यह विधि LEFT JOIN का लाभ लेती है ताकि सभी उत्पाद और उनसे मिलते-जुलते ऑर्डर शामिल हों, फिर WHERE o.ProductID IS NULL का उपयोग करके उन उत्पादों को फ़िल्टर कर देती है जिनके ऑर्डर हैं, यानी उन्हें प्रभावी ढंग से बाहर करती है।
NOT IN का उपयोग करने के सर्वोत्तम अभ्यास
NULLमानों के लिए सूची की जाँच करें: अनपेक्षित परिणामों से बचने के लिए सुनिश्चित करें किNOT INमें प्रयुक्त सूची में NULL मान न हों।- डेटासेट आकार पर विचार करें: बड़े डेटासेट या subqueries के लिए जाँचें कि क्या
NOT EXISTSजैसे विकल्प बेहतर प्रदर्शन दे सकते हैं। - इंडेक्सिंग: जहाँ संभव हो,
NOT INक्लॉज़ में उपयोग किए गए कॉलम पर इंडेक्स सुनिश्चित करें ताकि क्वेरी प्रदर्शन सुधरे।
वास्तविक जीवन के डेटा प्रोजेक्ट में NOT IN का उपयोग
डेटा विश्लेषण में "Not IN" SQL कमांड का अक्सर उपयोग विशिष्ट डेटा प्राप्त करने के लिए किया जाता है। इस खंड में, हम एक बुकस्टोर डेटाबेस के साथ काम करेंगे जो अपने स्टॉक (स्टोर में उपलब्ध किताबें) और बिक्री (बेची गई किताबें) को ट्रैक करता है। हमारा लक्ष्य यह पहचानना है कि कौन-सी किताबें कभी बेची नहीं गईं।
हमारे पास दो तालिकाएँ हैं:
- Inventory: बुकस्टोर में उपलब्ध किताबों की जानकारी रखने के लिए।
- Sales: बेची गई किताबों के अभिलेख रखने के लिए।

Inventory तालिका

Sales तालिका
अब, हम यह पता लगाना चाहते हैं कि कौन-सी किताबें कभी नहीं बिकीं।
SELECT Title, Author
FROM Inventory
WHERE BookID NOT IN (
SELECT BookID
FROM Sales
);

अगले चरण में, हम अपनी इन्वेंट्री में ऐसी किताबों की पहचान करना चाहते हैं जो पिछले महीने में नहीं बिकीं, यह मानते हुए कि आज 7 फ़रवरी, 2024 है। इसमें Sales तालिका में SaleDate को वर्तमान तिथि से तुलना करना शामिल है।
SELECT Title, Author
FROM Inventory
WHERE BookID NOT IN (
SELECT BookID
FROM Sales
WHERE SaleDate >= date('now', '-1 month')
);

निष्कर्ष
NOT IN ऑपरेटर SQL में आपकी क्वेरी के परिणामों से विशिष्ट मानों को बाहर करने का एक बहुमुखी उपकरण है। इसके सिंटैक्स, व्यावहारिक उपयोग, और संभावित जोखिमों को समझकर, आप इसे अपनी डेटा प्रोसेसिंग कार्यों में प्रभावी ढंग से इस्तेमाल कर सकते हैं।
प्रदर्शन और सटीकता को बेहतर बनाने के लिए NULL मानों और डेटासेट के आकार पर अवश्य विचार करें। जैसे-जैसे आप NOT IN से अधिक परिचित होते जाएँगे, यह आपके SQL टूलकिट में एक अमूल्य जोड़ साबित होगा, जो अधिक सटीक और कुशल डेटा विश्लेषण और प्रबंधन में मदद करेगा।
आप Improving Query Performance in SQL Server पाठ्यक्रम में NOT IN और NOT EXISTS के बारे में और जान सकते हैं, और हमारे SQL Basics Cheat Sheet और SQL Fundamentals स्किल ट्रैक में SQL ऑपरेटरों सहित बहुत कुछ खोज सकते हैं।
एक प्रमाणित डेटा साइंटिस्ट के रूप में, मैं अत्याधुनिक तकनीक का उपयोग करके नवाचारी मशीन लर्निंग अनुप्रयोग बनाने के लिए उत्साहित रहता/रहती हूँ। स्पीच रिकॉग्निशन, डेटा विश्लेषण और रिपोर्टिंग, MLOps, संवादात्मक AI और NLP में मजबूत पृष्ठभूमि के साथ, मैंने ऐसे बुद्धिमान सिस्टम विकसित करने में अपनी विशेषज्ञता निखारी है जो वास्तविक प्रभाव डाल सकें। तकनीकी दक्षता के अलावा, मैं जटिल अवधारणाओं को स्पष्ट और संक्षिप्त भाषा में प्रस्तुत करने में भी निपुण हूँ। परिणामस्वरूप, मैं डेटा साइंस पर एक मांग में रहने वाला/वाली ब्लॉगर बन गया/गई हूँ, और डेटा प्रोफेशनलों के बढ़ते समुदाय के साथ अपने अनुभव और विचार साझा करता/करती हूँ। वर्तमान में, मैं कंटेंट निर्माण और संपादन पर केंद्रित हूँ, बड़े भाषा मॉडलों के साथ काम करते हुए ऐसा प्रभावशाली और आकर्षक कंटेंट विकसित कर रहा/रही हूँ जो व्यवसायों और व्यक्तियों दोनों को अपने डेटा का अधिकतम लाभ उठाने में मदद कर सके।

डेटा विश्लेषण और प्रबंधन के क्षेत्र में, SQL (Structured Query Language) डेटाबेस सिस्टम तक पहुँचने और उन्हें संसाधित करने के लिए एक महत्वपूर्ण उपकरण है। इसकी कई क्षमताओं में,
NOT INऑपरेटर डेटा सेट को फ़िल्टर करने का एक शक्तिशाली साधन है, जो उपयोगकर्ताओं को उन पंक्तियों को बाहर करने देता है जिनका मिलान निर्दिष्ट मानों की सूची से होता है। यह ट्यूटोरियल शुरुआती लोगों और डेटा प्रैक्टिशनरों के लिएNOT INऑपरेटर को सरल बनाने के उद्देश्य से बनाया गया है, ताकि इसके उपयोग में स्पष्टता बनी रहे और इसके संभावित जोखिमों को समझा जा सके।