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 |+------------+--------+-------+--------------+------+----------+