MySQL | LIKE
Start your free 7-days trial now!
MySQL's LIKE
operator can be used to search for values with a particular string pattern. There are two wildcards that we can use with the 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 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.
Percentage wildcard
To return all students whose lname
starts with 'Dav'
:
SELECT * FROM students WHERE lname LIKE 'Dav%';
+------------+--------+-------+--------------+------+----------+| student_id | fname | lname | day_enrolled | age | username |+------------+--------+-------+--------------+------+----------+| 2 | Ben | Davis | 2016-04-20 | 19 | bdavis2 || 4 | Arthur | David | 2016-04-01 | 16 | adavid4 |+------------+--------+-------+--------------+------+----------+
Note that the %
represents any number of characters after 'Dav'
.
To return all usernames
that contain 'dav'
:
SELECT * FROM students WHERE username LIKE '%dav%';
+------------+--------+-------+--------------+------+----------+| student_id | fname | lname | day_enrolled | age | username |+------------+--------+-------+--------------+------+----------+| 2 | Ben | Davis | 2016-04-20 | 19 | bdavis2 || 4 | Arthur | David | 2016-04-01 | 16 | adavid4 |+------------+--------+-------+--------------+------+----------+
Placing %
at the start and end allows for a double ended search.
LIKE
is not synonymous to contains. For instance:
SELECT * FROM students WHERE lname LIKE 'Dav';
Empty set (0.00 sec)
Even though last names 'Davis'
and 'David'
contain 'Dav'
, they are not returned without the wildcard.
Underscore wildcard
To return students with three letter first names that begin with an 'S'
and end with a 'y'
:
SELECT * FROM students WHERE fname LIKE 'S_y';
+------------+-------+--------+--------------+------+----------+| student_id | fname | lname | day_enrolled | age | username |+------------+-------+--------+--------------+------+----------+| 1 | Sky | Towner | 2015-12-03 | 17 | stowner1 |+------------+-------+--------+--------------+------+----------+
Here, the second character in the three character fname
can be anything. However, the first character must be 'S'
and third character must be 'y'
.
Combining wildcards
To return students whose username
has 't'
as the second character:
SELECT * FROM students WHERE username LIKE '_t%';
+------------+----------+--------+--------------+------+----------+| student_id | fname | lname | day_enrolled | age | username |+------------+----------+--------+--------------+------+----------+| 1 | Sky | Towner | 2015-12-03 | 17 | stowner1 || 5 | Benjamin | Town | 2014-01-01 | 17 | btown5 |+------------+----------+--------+--------------+------+----------+