如何使用SQL LIKE运算符来测试表达式是否与模式匹配
在本教程中,您将学习如何使用SQL LIKE
运算符来测试表达式是否与模式匹配。更多教程请访问http://www.manongzj.com
1. 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 '%yiibai_' |
包含yiibai ,以任意数量的字符开头,最多以一个字符结尾。 |
LIKE '_yiibai%' |
包含yiibai ,最多以一个字符开头,以任意数量的字符结尾。 |
如果要匹配通配符%
或_
,则必须使用反斜杠字符\
来对其进行转义。 如果要使用其它的转义字符而不是反斜杠,可以在LIKE
表达式中使用ESCAPE
子句,如下所示:
expression LIKE pattern ESCAPE escape_character
2. SQL LIKE运算符示例
我们将使用示例数据库中的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
3. SQL NOT LIKE运算符
要否定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
运算符选择与特定模式匹配的值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!