REGEXP का उपयोग करके MySQL में "LIKE IN()" पैटर्न मिलान
MySQL में LIKE IN() सीधा सिंटैक्स नहीं है, लेकिन आप REGEXP (नियमित अभिव्यक्ति) का उपयोग करके समान परिणाम प्राप्त कर सकते हैं।
सिंटैक्स
SELECT * FROM टेबल_नाम WHERE कॉलम_नाम REGEXP 'मान1|मान2|मान3|...|मानN';
उदाहरण
1. टेबल बनाएं और डेटा डालें
mysql> CREATE TABLE INDemo (Id INT, Name VARCHAR(100));
mysql> INSERT INTO INDemo VALUES
-> (100, 'John'), (104, 'Carol'), (108, 'David'),
-> (112, 'Smith'), (116, 'Johnson'), (120, 'Sam');
2. REGEXP से मिलान (Id 112, 116, या 100)
mysql> SELECT * FROM INDemo WHERE Id REGEXP '112|116|100';
+------+---------+ | Id | Name | +------+---------+ | 100 | John | | 112 | Smith | | 116 | Johnson | +------+---------+
3. तुलना: IN() के साथ
mysql> SELECT * FROM INDemo WHERE Id IN(112, 116, 100);
+------+---------+ | Id | Name | +------+---------+ | 100 | John | | 112 | Smith | | 116 | Johnson | +------+---------+
REGEXP बनाम IN()
| विशेषता | IN() | REGEXP |
|---|---|---|
| प्रकार | सटीक मिलान | पैटर्न मिलान |
| प्रदर्शन | तेज़ (इंडेक्स उपयोग कर सकता है) | धीमा (फुल स्कैन) |
| लचीलापन | सटीक मान | पैटर्न, वाइल्डकार्ड |
| केस संवेदनशीलता | कॉलेशन पर निर्भर | डिफ़ॉल्ट केस-असंवेदनशील |
स्ट्रिंग कॉलम के लिए पैटर्न मिलान
-- नाम 'J' से शुरू होने वाले SELECT * FROM INDemo WHERE Name REGEXP '^J'; -- नाम 'n' पर समाप्त होने वाले SELECT * FROM INDemo WHERE Name REGEXP 'n$'; -- 'John' या 'Johnson' वाले SELECT * FROM INDemo WHERE Name REGEXP 'John|Johnson';
चेतावनी
- REGEXP इंडेक्स का उपयोग नहीं करता (MySQL 8.0 में कुछ सुधार)
- बड़े डेटासेट पर प्रदर्शन प्रभाव हो सकता है
- विशेष रेगेक्स वर्णों (., *, +, ?, ^, $, |, (), [], {}) को एस्केप करें
- सटीक मिलान के लिए
IN()पसंद करें