MySQL LIKE 用法与实例
本文介绍了在 MySQL 中如何使用 LIKE
运算符查询匹配指定模式的数据。
在 MySQL 中, LIKE
运算符可以根据指定的模式过滤数据。LIKE
运算符一般用于模糊匹配字符数据。
MySQL LIKE 语法
LIKE
运算符是一个双目比较运算符,需要两个操作数。 LIKE
运算符语法如下:
expression LIKE pattern
说明:
expression
可以是一个字段名、值或其他的表达式(比如函数调用、运算等)。pattern
是一个字符串模式。MySQL 字符串模式支持两个通配符:%
和_
。%
匹配零或多个任意字符。_
匹配单个任意字符。- 如果需要匹配通配符,则需要使用
\
转义字符,如\%
和\_
。 - 使用通配符匹配文本时,不区分字母大小写。
- 如果
expression
与pattern
匹配,LIKE
运算符返回1
,否则返回0
。
比如:
a%
匹配以字符a
开头的任意长度的字符串。%a
匹配以字符a
结尾的任意长度的字符串。%a%
匹配包含字符a
的任意长度的字符串。%a%b%
匹配同时包含字符a
和b
且a
在b
前面的任意长度的字符串。a_
匹配以字符a
开头长度为 2 字符串。_a
匹配以字符a
结尾长度为 2 字符串。
MySQL LIKE 运算规则
LIKE
运算符用于模糊匹配字符串数据。它的运算规则如下:
-
当
LIKE
运算符左侧的操作数与右侧的模式匹配时,返回1
。否则,返回0
。SELECT 'a' LIKE 'a', 'a' LIKE 'a%', 'ab' LIKE 'a%', 'ab' LIKE '%a';
+--------------+---------------+----------------+----------------+ | 'a' LIKE 'a' | 'a' LIKE 'a%' | 'ab' LIKE 'a%' | 'ab' LIKE '%a' | +--------------+---------------+----------------+----------------+ | 1 | 1 | 1 | 0 | +--------------+---------------+----------------+----------------+
SELECT 'a' LIKE 'a_', 'ab' LIKE 'a_', 'abc' LIKE 'a_';
+---------------+----------------+-----------------+ | 'a' LIKE 'a_' | 'ab' LIKE 'a_' | 'abc' LIKE 'a_' | +---------------+----------------+-----------------+ | 0 | 1 | 0 | +---------------+----------------+-----------------+
-
如果
LIKE
运算符的两个操作数中任意一个为 NULL 时,返回 NULL。SELECT NULL LIKE 'a%', 'a' LIKE NULL;
+----------------+---------------+ | NULL LIKE 'a%' | 'a' LIKE NULL | +----------------+---------------+ | NULL | NULL | +----------------+---------------+
MySQL LIKE 实例
在实际开发中,我们会在 SELECT
、UPDATE
、DELETE
语句中的 WHERE 子句中使用 LIKE
运算符。
在以下实例中,我们使用 Sakila 示例数据库中的 actor
表和 category
表作为演示。
使用 %
匹配开头
以下 SQL 语句使用 LIKE
运算符匹配 first_name
以字符 P
开头的所有演员。比如: PARKER
。
SELECT * FROM actor WHERE first_name LIKE 'P%';
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update |
+----------+------------+-----------+---------------------+
| 1 | PENELOPE | GUINESS | 2006-02-15 04:34:33 |
| 46 | PARKER | GOLDBERG | 2006-02-15 04:34:33 |
| 54 | PENELOPE | PINKETT | 2006-02-15 04:34:33 |
| 104 | PENELOPE | CRONYN | 2006-02-15 04:34:33 |
| 120 | PENELOPE | MONROE | 2006-02-15 04:34:33 |
+----------+------------+-----------+---------------------+
使用 %
匹配结尾
以下 SQL 语句使用 LIKE
运算符匹配 first_name
以字符串 ES
结尾的所有演员。比如: JAMES
。
SELECT * FROM actor WHERE first_name LIKE '%ES';
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update |
+----------+------------+-----------+---------------------+
| 48 | FRANCES | DAY-LEWIS | 2006-02-15 04:34:33 |
| 84 | JAMES | PITT | 2006-02-15 04:34:33 |
| 126 | FRANCES | TOMEI | 2006-02-15 04:34:33 |
+----------+------------+-----------+---------------------+
使用 %
匹配包含字符
以下 SQL 语句使用 LIKE
运算符匹配 first_name
中包含字符串 AM
的所有演员。比如: JAMES
, WILLIAM
。
SELECT * FROM actor WHERE first_name LIKE '%AM%';
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update |
+----------+------------+-----------+---------------------+
| 24 | CAMERON | STREEP | 2006-02-15 04:34:33 |
| 63 | CAMERON | WRAY | 2006-02-15 04:34:33 |
| 71 | ADAM | GRANT | 2006-02-15 04:34:33 |
| 84 | JAMES | PITT | 2006-02-15 04:34:33 |
| 111 | CAMERON | ZELLWEGER | 2006-02-15 04:34:33 |
| 132 | ADAM | HOPPER | 2006-02-15 04:34:33 |
| 175 | WILLIAM | HACKMAN | 2006-02-15 04:34:33 |
+----------+------------+-----------+---------------------+
使用 _
匹配单个字符
通配符 _
匹配任意单个字符。以下 SQL 语句使用 LIKE
运算符查找 first_name
以字符串 AY
结尾的且长度为 3 个字符的所有演员。
SELECT * FROM actor WHERE first_name LIKE '_AY';
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update |
+----------+------------+-----------+---------------------+
| 55 | FAY | KILMER | 2006-02-15 04:34:33 |
| 64 | RAY | JOHANSSON | 2006-02-15 04:34:33 |
| 147 | FAY | WINSLET | 2006-02-15 04:34:33 |
| 156 | FAY | WOOD | 2006-02-15 04:34:33 |
+----------+------------+-----------+---------------------+
NOT LIKE
以下 SQL 使用 NOT
运算符与 LIKE
运算符从 category
表中检索那些名字不以 A
开头的分类。
SELECT * FROM category WHERE name NOT LIKE 'A%';
+-------------+-------------+---------------------+
| category_id | name | last_update |
+-------------+-------------+---------------------+
| 3 | Children | 2006-02-15 04:46:27 |
| 4 | Classics | 2006-02-15 04:46:27 |
| 5 | Comedy | 2006-02-15 04:46:27 |
| 6 | Documentary | 2006-02-15 04:46:27 |
| 7 | Drama | 2006-02-15 04:46:27 |
| 8 | Family | 2006-02-15 04:46:27 |
| 9 | Foreign | 2006-02-15 04:46:27 |
| 10 | Games | 2006-02-15 04:46:27 |
| 11 | Horror | 2006-02-15 04:46:27 |
| 12 | Music | 2006-02-15 04:46:27 |
| 13 | New | 2006-02-15 04:46:27 |
| 14 | Sci-Fi | 2006-02-15 04:46:27 |
| 15 | Sports | 2006-02-15 04:46:27 |
| 16 | Travel | 2006-02-15 04:46:27 |
+-------------+-------------+---------------------+
结论
本文通过实例介绍了 MySQL 中 LIKE
运算符的语法和用法。 LIKE
运算符的用法要点如下:
LIKE
运算符是双目运算符。LIKE
运算符来文本值是否与指定的文本模式匹配。%
通配符匹配零个或多个任意字符。_
通配符匹配单个任意字符。- 使用通配符匹配文本时,不区分字母大小写。
- 当通配字符想要作为普通字符时,使用转义字符 (
\
) 进行转义。 - 使用
NOT
运算符来否定LIKE
运算符。 - 借助通配符,可以匹配文本开头、文本结尾、包含字符串等。