SQL 模糊查询LIKE的用法介绍


在本教程中,您将学习如何使用SQL LIKE运算符来测试表达式是否与模式匹配。

1. SQL LIKE运算符简介

有时,测试表达式是否与特定模式匹配很有用,例如,查找名字以YiiSu开头的所有员工。 在这些情况下,需要使用LIKE运算符。

LIKE运算符测试表达式是否与特定模式匹配。 请参阅以下语法:

expression LIKE pattern 
SQL

如果表达式与模式匹配,则LIKE运算符返回true。 否则它返回false

LIKE运算符通常用于SELECTUPDATEDELETE语句的WHERE子句中。

要构造模式,请使用两个SQL通配符:

  • %百分号匹配零个,一个或多个字符。
  • _下划线符号匹配单个字符。

下表说明了一些模式及其含义:

模式 含义
LIKE 'Yii%' 匹配以Yii开始的字符串
LIKE '%su' 匹配以su结尾的字符串
LIKE '%ch% 匹配包含ch的字符串
LIKE 'Luc_' Luc开始,后面只有一个字符,例如:LucyLucc
LIKE '_cy' cy结尾,前面只有一个字符,例如:Lcyucy
LIKE '%yiibai_' 包含yiibai,以任意数量的字符开头,最多以一个字符结尾。
LIKE '_yiibai%' 包含yiibai,最多以一个字符开头,以任意数量的字符结尾。

如果要匹配通配符%_,则必须使用反斜杠字符\来对其进行转义。 如果要使用其它的转义字符而不是反斜杠,可以在LIKE表达式中使用ESCAPE子句,如下所示:

expression LIKE pattern ESCAPE escape_character 
SQL

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 
SQL

要查找名字以Sh开头的所有员工,请使用Sh%模式,如以下语句所示:

SELECT employee_id, first_name, last_name FROM employees WHERE first_name LIKE 'Sh%'; 
SQL

执行上面查询语句,得到以下结果 -

+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
|         116 | Shelli     | Zhang     |
|         123 | Shanta     | Liu       |
|         205 | Shelley    | Wu        |
+-------------+------------+-----------+
3 rows in set
Shell

执行上面查询语句,得到以下结果 -

SELECT
    employee_id,
    first_name,
    last_name
FROM
    employees
WHERE
    first_name LIKE '%na';
Shell

执行上面查询语句,得到以下结果 -

以下语句查找姓氏包含字符:en的所有员工:

SELECT employee_id, first_name, last_name FROM employees WHERE last_name LIKE '%en%'; 
SQL

执行上面查询语句,得到以下结果 -

以下语句检索名字以Jo开头且后跟最多2个字符的员工:

SELECT employee_id, first_name, last_name FROM employees WHERE first_name LIKE 'Jo__'; 
SQL

执行上面查询语句,得到以下结果 -

+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
|         110 | John       | Chen      |
|         145 | John       | Liu       |
+-------------+------------+-----------+
2 rows in set
Shell

以下语句选择名字以任意数字开头且后跟最多一个字符的员工。

SELECT employee_id, first_name, last_name FROM employees WHERE first_name LIKE '%are_'; 
SQL

执行上面查询语句,得到以下结果 -

+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
|         119 | Karen      | Zhang     |
|         146 | Karen      | Liu       |
+-------------+------------+-----------+
2 rows in set
Shell

3. SQL NOT LIKE运算符

要否定LIKE运算符的结果,可以使用NOT运算符,如下所示:

expression NOT LIKE pattern ESCAPE escape_character 
SQL

例如,要查找名字以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; 
SQL

执行上面查询语句,得到以下结果 -

+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
|         201 | Michael    | Zhou      |
|         113 | Min        | Su        |
|         122 | Min        | Liu       |
+-------------+------------+-----------+
3 rows in set
Shell

在本教程中,您学习了如何使用SQL LIKE运算符选择与特定模式匹配的值。

原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/sql/sql-like.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM