MySQL में IN() ऑपरेटर का उपयोग सबक्वेरी के साथ करके एकाधिक मानों के आधार पर पंक्तियों को फ़िल्टर किया जा सकता है। यह तब उपयोगी होता है जब फ़िल्टर मान किसी अन्य क्वेरी से डायनामिक रूप से प्राप्त करने हों।
सिंटैक्स
SELECT column_list FROM table_name WHERE column_name IN (SELECT column_name FROM table_name [WHERE condition]);
व्यावहारिक उदाहरण
टेबल बनाएं:
mysql> CREATE TABLE DemoTable1317 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(20)
);
डेटा डालें:
mysql> INSERT INTO DemoTable1317(Name) VALUES('Chris Brown');
mysql> INSERT INTO DemoTable1317(Name) VALUES('John Doe');
mysql> INSERT INTO DemoTable1317(Name) VALUES('Adam Smith');
mysql> INSERT INTO DemoTable1317(Name) VALUES('John Smith');
mysql> INSERT INTO DemoTable1317(Name) VALUES('David Miller');
mysql> INSERT INTO DemoTable1317(Name) VALUES('Carol Taylor');
सभी रिकॉर्ड देखें:
mysql> SELECT * FROM DemoTable1317;
+----+--------------+ | Id | Name | +----+--------------+ | 1 | Chris Brown | | 2 | John Doe | | 3 | Adam Smith | | 4 | John Smith | | 5 | David Miller | | 6 | Carol Taylor | +----+--------------+
सबक्वेरी के साथ IN() का उपयोग
mysql> SELECT Name FROM DemoTable1317
-> WHERE Id IN (SELECT Id FROM DemoTable1317);
परिणाम
+--------------+ | Name | +--------------+ | Chris Brown | | John Doe | | Adam Smith | | John Smith | | David Miller | | Carol Taylor | +--------------+
व्याख्या
- सबक्वेरी
(SELECT Id FROM DemoTable1317)सभीIdमान लौटाती है:1, 2, 3, 4, 5, 6 - बाहरी क्वेरी उन
Idमानों से मेल खाने वाली पंक्तियों का चयन करती है - परिणामस्वरूप सभी पंक्तियां लौटाई जाती हैं (क्योंकि सभी Id सबक्वेरी में हैं)
व्यावहारिक उपयोग केस
यह पैटर्न तब शक्तिशाली होता है जब सबक्वेरी में WHERE क्लॉज हो:
-- केवल 'John' से शुरू होने वाले नामों वाले Id प्राप्त करें SELECT Name FROM DemoTable1317 WHERE Id IN (SELECT Id FROM DemoTable1317 WHERE Name LIKE 'John%');
+------------+ | Name | +------------+ | John Doe | | John Smith | +------------+
महत्वपूर्ण नोट्स
- सबक्वेरी को **एक ही कॉलम** लौटाना चाहिए
IN()NULLमानों को अलग तरह से संभालता है - यदि सबक्वेरीNULLलौटाती है, तो तुलनाUNKNOWNदेती है- बड़े डेटासेट के लिए
EXISTSयाJOINबेहतर प्रदर्शन दे सकते हैं - MySQL 8.0+ में
CTE (WITH क्लॉज)पठनीयता में सुधार करता है
आधुनिक विकल्प (MySQL 8.0+)
WITH filtered_ids AS (
SELECT Id FROM DemoTable1317 WHERE Name LIKE 'John%'
)
SELECT Name FROM DemoTable1317 WHERE Id IN (SELECT Id FROM filtered_ids);
IN() के साथ सबक्वेरी जटिल फ़िल्टरिंग तर्क को सरल, पठनीय SQL में व्यक्त करने का एक शक्तिशाली तरीका है।