MySQL में किसी मानों के सेट (सरणी) में नहीं मौजूद रिकॉर्ड्स प्राप्त करने के लिए NOT IN() ऑपरेटर का उपयोग किया जाता है। यह बहिष्करण फ़िल्टरिंग के लिए बहुत उपयोगी है।
सिंटैक्स
SELECT * FROM table_name WHERE column_name NOT IN (value1, value2, ...);
व्यावहारिक उदाहरण
1. टेबल बनाएं और डेटा डालें
mysql> CREATE TABLE DemoTable718 (
Id INT,
FirstName VARCHAR(100),
Age INT
);
Query OK, 0 rows affected (0.59 sec)
mysql> INSERT INTO DemoTable718 VALUES
(101, 'Chris', 26),
(102, 'Robert', 24),
(103, 'David', 27),
(104, 'Mike', 28),
(105, 'Sam', 23);
Query OK, 5 rows affected (0.15 sec)
2. सभी रिकॉर्ड्स देखें
mysql> SELECT * FROM DemoTable718; +------+-----------+------+ | Id | FirstName | Age | +------+-----------+------+ | 101 | Chris | 26 | | 102 | Robert | 24 | | 103 | David | 27 | | 104 | Mike | 28 | | 105 | Sam | 23 | +------+-----------+------+ 5 rows in set (0.00 sec)
3. विशिष्ट IDs को छोड़कर रिकॉर्ड्स प्राप्त करें
mysql> SELECT * FROM DemoTable718 WHERE Id NOT IN ('101', '103', '104');
+------+-----------+------+
| Id | FirstName | Age |
+------+-----------+------+
| 102 | Robert | 24 |
| 105 | Sam | 23 |
+------+-----------+------+
2 rows in set (0.00 sec)
महत्वपूर्ण विचार
NULL मानों के साथ सावधानी
-- यदि सूची में NULL है, तो NOT IN अप्रत्याशित परिणाम दे सकता है SELECT * FROM table WHERE col NOT IN (1, 2, NULL); -- कोई पंक्ति नहीं लौटाएगा! -- समाधान: NOT EXISTS उपयोग करें या NULL को बाहर करें SELECT * FROM table WHERE col NOT IN (1, 2) AND col IS NOT NULL;
सबक्वेरी के साथ उपयोग
SELECT * FROM orders WHERE customer_id NOT IN (SELECT customer_id FROM vip_customers);
NOT IN vs NOT EXISTS
| NOT IN | NOT EXISTS |
|---|---|
| मानों की सूची के साथ सरल | सबक्वेरी के साथ बेहतर प्रदर्शन |
| NULL मानों के साथ समस्या | NULL सुरक्षित |
| छोटी सूचियों के लिए ठीक | बड़े डेटासेट के लिए अनुशंसित |
सर्वोत्तम अभ्यास
- छोटी, स्थिर सूचियों के लिए
NOT INउपयोग करें - सबक्वेरी या बड़ी सूचियों के लिए
NOT EXISTSप्राथमिकता दें - हमेशा NULL संभावना पर विचार करें