SQL LIKE 运算符
在本教程中,你将学习如何基于部分匹配来检索数据。
模式匹配
到目前为止,你已经看到了识别精确字符串的条件,例如 WHERE name='Lois Lane'
。但在 SQL 中,你也可以使用 LIKE
运算符执行部分或模式匹配。
LIKE
运算符允许你为一个或多个字符指定通配符提供模式匹配的度量。你可以使用以下两个通配符:
- 百分号(
%
) - 匹配任意数量的字符,甚至零个字符。 - 下划线(
_
) - 恰好匹配一个字符
以下是一些示例,说明如何将 LIKE
操作符与通配符一起使用。
考虑我们在数据库中有一个 employees 表,其中包含以下记录:
+--------+------------------+------------+--------+---------+
| emp_id | emp_name | hire_date | salary | dept_id |
+--------+------------------+------------+--------+---------+
| 1 | Ethan Hunt | 2001-05-01 | 5000 | 4 |
| 2 | Tony Montana | 2002-07-15 | 6500 | 1 |
| 3 | Sarah Connor | 2005-10-18 | 8000 | 5 |
| 4 | Rick Deckard | 2007-01-03 | 7200 | 3 |
| 5 | Martin Blank | 2008-06-24 | 5600 | NULL |
| 6 | simons bistro | 2009-04-01 | 6000 | 1 |
+--------+------------------+------------+--------+---------+
现在,假设你要查找名称以 S 字母开头的所有员工。
SELECT * FROM employees
WHERE emp_name LIKE 'S%';
执行查询后,你将获得如下输出:
+--------+------------------+------------+--------+---------+
| emp_id | emp_name | hire_date | salary | dept_id |
+--------+------------------+------------+--------+---------+
| 3 | Sarah Connor | 2005-10-18 | 8000 | 5 |
| 6 | simons bistro | 2009-04-01 | 6000 | 1 |
+--------+------------------+------------+--------+---------+
在 MySQL 非二进制串(CHAR
, VARCHAR
, TEXT
)比较默认是不区分大小写,而二进制字符串(BINARY
, VARBINARY
, BLOB
)比较是大小写敏感的。
这意味着如果你搜索 WHERE name LIKE 'S%'
,你得到所有以 S 或 s 开头的列值(你可以看到我们有 Sarah
和 simons
)。但是,如果你想使此搜索区分大小写,则可以使用 BINARY
运算符,如下所示:
-- Syntax for MySQL Database
SELECT * FROM employees
WHERE BINARY emp_name LIKE 'S%';
现在,此语句将仅返回名称以大写字母 S 开头的员工:
+--------+------------------+------------+--------+---------+
| emp_id | emp_name | hire_date | salary | dept_id |
+--------+------------------+------------+--------+---------+
| 3 | Sarah Connor | 2005-10-18 | 8000 | 5 |
+--------+------------------+------------+--------+---------+
注意: 如果希望始终以区分大小写的方式处理列,请使用区分大小写或二进制排序规则来声明它,以避免出现任何性能问题。
提示: 当你不知道要搜索的字符串的确切形式时,部分匹配很有用。你还可以使用部分匹配来检索表中列之一中包含类似字符串的多个行。