MySQL | NOT LIKE
Start your free 7-days trial now!
MySQL's NOT LIKE operator can be used to search for values that do not match a particular string pattern. There are two wildcards that we can use with the NOT LIKE operator: % (percent) and _ (underscore).
Wildcard | Description |
|---|---|
| Takes the place of zero, one or multiple characters |
| Takes the place of one character |
Syntax
SELECT column_name(s)FROM table_nameWHERE column_name NOT LIKE value;
Examples
Consider the following table about some students:
student_id | fname | lname | day_enrolled | age | username |
|---|---|---|---|---|---|
1 | Sky | Towner | 2015-12-03 | 17 | stowner1 |
2 | Ben | Davis | 2016-04-20 | 19 | bdavis2 |
3 | Travis | Apple | 2018-08-14 | 18 | tapple3 |
4 | Arthur | David | 2016-04-01 | 16 | adavid4 |
5 | Benjamin | Town | 2014-01-01 | 17 | btown5 |
The above sample table can be created using the code here.
Percent wildcard
To return all rows where the lname does not start with 'Dav':
SELECT * FROM students WHERE lname NOT LIKE 'Dav%';
+------------+----------+--------+--------------+------+----------+| student_id | fname | lname | day_enrolled | age | username |+------------+----------+--------+--------------+------+----------+| 1 | Sky | Towner | 2015-12-03 | 17 | stowner1 || 3 | Travis | Apple | 2018-08-14 | 18 | tapple3 || 5 | Benjamin | Town | 2014-01-01 | 17 | btown5 |+------------+----------+--------+--------------+------+----------+
Note that the % represents any number of characters after 'Dav'.
To return all rows where the username does not contain 'dav':
SELECT * FROM students WHERE username NOT LIKE '%dav%';
+------------+----------+--------+--------------+------+----------+| student_id | fname | lname | day_enrolled | age | username |+------------+----------+--------+--------------+------+----------+| 1 | Sky | Towner | 2015-12-03 | 17 | stowner1 || 3 | Travis | Apple | 2018-08-14 | 18 | tapple3 || 5 | Benjamin | Town | 2014-01-01 | 17 | btown5 |+------------+----------+--------+--------------+------+----------+
Placing % at the start and end allows for a double ended search.
Underscore wildcard
To return students that do not have three letter first names beginning with an 'S' and ending with a 'y':
SELECT * FROM students WHERE fname NOT LIKE 'S_y';
+------------+----------+-------+--------------+------+----------+| student_id | fname | lname | day_enrolled | age | username |+------------+----------+-------+--------------+------+----------+| 2 | Ben | Davis | 2016-04-20 | 19 | bdavis2 || 3 | Travis | Apple | 2018-08-14 | 18 | tapple3 || 4 | Arthur | David | 2016-04-01 | 16 | adavid4 || 5 | Benjamin | Town | 2014-01-01 | 17 | btown5 |+------------+----------+-------+--------------+------+----------+
This query returns students with first names that do not start with 'S', end with 'y' and have 3 characters. We return all students except 'Sky Towner'.
Combining wildcards
To return students whose username does not have 't' as the second character:
SELECT * FROM students WHERE username NOT LIKE '_t%';
+------------+--------+-------+--------------+------+----------+| student_id | fname | lname | day_enrolled | age | username |+------------+--------+-------+--------------+------+----------+| 2 | Ben | Davis | 2016-04-20 | 19 | bdavis2 || 3 | Travis | Apple | 2018-08-14 | 18 | tapple3 || 4 | Arthur | David | 2016-04-01 | 16 | adavid4 |+------------+--------+-------+--------------+------+----------+