在本教程中,您将学习如何使用sql like
运算符来测试表达式是否与模式匹配。
有时,测试表达式是否与特定模式匹配很有用,例如,查找名字以yii
或su
开头的所有员工。 在这些情况下,需要使用like
运算符。
like
运算符测试表达式是否与特定模式匹配。 请参阅以下语法:
expression like pattern
如果表达式与模式匹配,则like
运算符返回true
。 否则它返回false
。
like
运算符通常用于select,update或delete语句的where
子句中。
要构造模式,请使用两个sql
通配符:
%
百分号匹配零个,一个或多个字符。_
下划线符号匹配单个字符。下表说明了一些模式及其含义:
模式 | 含义 |
---|---|
like 'yii%' |
匹配以yii 开始的字符串 |
like '%su' |
匹配以su 结尾的字符串 |
like '%ch% |
匹配包含ch 的字符串 |
like 'luc_' |
以luc 开始,后面只有一个字符,例如:lucy ,lucc 等 |
like '_cy' |
以cy 结尾,前面只有一个字符,例如:lcy ,ucy 等 |
like '%h3_' |
包含h3 ,以任意数量的字符开头,最多以一个字符结尾。 |
like '_h3%' |
包含h3 ,最多以一个字符开头,以任意数量的字符结尾。 |
如果要匹配通配符%
或_
,则必须使用反斜杠字符\
来对其进行转义。 如果要使用其它的转义字符而不是反斜杠,可以在like
表达式中使用escape
子句,如下所示:
expression like pattern escape escape_character
我们将使用示例数据库中的employees
表进行演示。
mysql> desc employees;
+---------------+--------------+------+-----+---------+----------------+
| field | type | null | key | default | extra |
+---------------+--------------+------+-----+---------+----------------+
| employee_id | int(11) | no | pri | null | auto_increment |
| first_name | varchar(20) | yes | | null | |
| last_name | varchar(25) | no | | null | |
| email | varchar(100) | no | | null | |
| phone_number | varchar(20) | yes | | null | |
| hire_date | date | no | | null | |
| job_id | int(11) | no | mul | null | |
| salary | decimal(8,2) | no | | null | |
| manager_id | int(11) | yes | mul | null | |
| department_id | int(11) | yes | mul | null | |
+---------------+--------------+------+-----+---------+----------------+
10 rows in set
要查找名字以sh
开头的所有员工,请使用sh%
模式,如以下语句所示:
select
employee_id,
first_name,
last_name
from
employees
where
first_name like 'sh%';
执行上面查询语句,得到以下结果 -
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 116 | shelli | zhang |
| 123 | shanta | liu |
| 205 | shelley | wu |
+-------------+------------+-----------+
3 rows in set
执行上面查询语句,得到以下结果 -
select
employee_id,
first_name,
last_name
from
employees
where
first_name like '%na';
执行上面查询语句,得到以下结果 -
以下语句查找姓氏包含字符:en
的所有员工:
select
employee_id,
first_name,
last_name
from
employees
where
last_name like '%en%';
执行上面查询语句,得到以下结果 -
以下语句检索名字以jo
开头且后跟最多2
个字符的员工:
select
employee_id,
first_name,
last_name
from
employees
where
first_name like 'jo__';
执行上面查询语句,得到以下结果 -
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 110 | john | chen |
| 145 | john | liu |
+-------------+------------+-----------+
2 rows in set
以下语句选择名字以任意数字开头且后跟最多一个字符的员工。
select
employee_id,
first_name,
last_name
from
employees
where
first_name like '%are_';
执行上面查询语句,得到以下结果 -
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 119 | karen | zhang |
| 146 | karen | liu |
+-------------+------------+-----------+
2 rows in set
要否定like
运算符的结果,可以使用not
运算符,如下所示:
expression not like pattern escape escape_character
例如,要查找名字以m
开头但不以ma
开头的所有员工,请使用以下语句:
select
employee_id, first_name, last_name
from
employees
where
first_name like 'm%'
and first_name not like 'ma%'
order by
first_name;
执行上面查询语句,得到以下结果 -
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 201 | michael | zhou |
| 113 | min | su |
| 122 | min | liu |
+-------------+------------+-----------+
3 rows in set
在本教程中,您学习了如何使用sql like
运算符选择与特定模式匹配的值。