परिचय
MySQL में NOT LIKE ऑपरेटर का उपयोग करके उन रिकॉर्ड्स को बाहर रखा जा सकता है जो किसी पैटर्न से मेल खाते हैं। यह विशिष्ट मानदंडों वाले रिकॉर्ड्स को फ़िल्टर आउट (eliminate) करने के लिए उपयोगी है।
उदाहरण: टेबल बनाना और डेटा डालना
mysql> CREATE TABLE DemoTable (
-> StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName VARCHAR(20),
-> StudentAdmissionYear VARCHAR(20)
-> );
Query OK, 0 rows affected (1.22 sec)
mysql> INSERT INTO DemoTable(StudentName, StudentAdmissionYear) VALUES('Chris', '2017');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable(StudentName, StudentAdmissionYear) VALUES('David', '2015');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable(StudentName, StudentAdmissionYear) VALUES('Bob', '2019');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO DemoTable(StudentName, StudentAdmissionYear) VALUES('Carol', '2015');
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable(StudentName, StudentAdmissionYear) VALUES('Sam', '2018');
Query OK, 1 row affected (0.12 sec)
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable;
आउटपुट:
+-----------+-------------+----------------------+
| StudentId | StudentName | StudentAdmissionYear |
+-----------+-------------+----------------------+
| 1 | Chris | 2017 |
| 2 | David | 2015 |
| 3 | Bob | 2019 |
| 4 | Carol | 2015 |
| 5 | Sam | 2018 |
+-----------+-------------+----------------------+
5 rows in set (0.00 sec)
2015 प्रवेश वर्ष वाले रिकॉर्ड हटाने की क्वेरी
mysql> SELECT * FROM DemoTable
-> WHERE StudentAdmissionYear NOT LIKE '%2015%';
परिणाम
+-----------+-------------+----------------------+
| StudentId | StudentName | StudentAdmissionYear |
+-----------+-------------+----------------------+
| 1 | Chris | 2017 |
| 3 | Bob | 2019 |
| 5 | Sam | 2018 |
+-----------+-------------+----------------------+
3 rows in set (0.04 sec)
व्याख्या
NOT LIKE '%2015%'- '2015' उपस्ट्रिंग न रखने वाले मान%वाइल्डकार्ड: किसी भी संख्या में अक्षर (शून्य सहित)- David (2015) और Carol (2015) बाहर हो गए
- Chris (2017), Bob (2019), Sam (2018) बने रहे
समान ऑपरेटर्स
| ऑपरेटर | विवरण | उदाहरण |
|---|---|---|
LIKE | पैटर्न मेल | name LIKE 'J%' |
NOT LIKE | पैटर्न नॉट मेल | name NOT LIKE 'J%' |
RLIKE / REGEXP | रेगेक्स मेल | name REGEXP '^J' |
NOT REGEXP | रेगेक्स नॉट मेल | name NOT REGEXP '^J' |
प्रदर्शन नोट
LIKE 'prefix%'(अग्रणी वाइल्डकार्ड नहीं) इंडेक्स उपयोग कर सकता हैLIKE '%suffix'याLIKE '%middle%'फुल टेबल स्कैन करता हैNOT LIKEभी इंडेक्स उपयोग नहीं कर सकता- बड़े डेटा के लिए: फुलटेक्स्ट सर्च या एप्लिकेशन-लेवल फ़िल्टरिंग पर विचार करें
डेटा टाइप सुधार
StudentAdmissionYear के लिए VARCHAR(20) के बजाय YEAR या INT उपयोग करें:
StudentAdmissionYear YEAR -- या SMALLINT
WHERE StudentAdmissionYear != 2015 -- सरल, तेज, इंडेक्स योग्य