MySQL 通配符教程:LIKE、NOT LIKE、ESCAPE、( % )、( _ )
什么是 MySQL 通配符?
MySQL 通配符是用于帮助根据复杂条件搜索数据的字符。通配符与 LIKE 比较运算符或 NOT LIKE 比较运算符一起使用。
为什么要使用通配符?
如果您熟悉使用 SQL,您可能会认为可以使用 SELECT 和 WHERE 子句搜索任何复杂数据。那么为什么要使用通配符呢?
在回答这个问题之前,让我们看一个例子。假设 Myflix 视频库的营销部门在德克萨斯州进行了营销推广,并希望获得有关注册会员数量的一些反馈。
您可以使用以下 SELECT 语句和 WHERE 子句来获取所需信息。
SELECT * FROM members WHERE postal_address = 'Austin , TX' OR postal_address = Dallas , TX OR postal_address = Iola,TX OR postal_adress = Houston ,TX';
如您从上面的查询中看到的,“WHERE 子句”变得很复杂。但是,使用通配符可以简化查询,因为我们可以使用下面显示的脚本这样的简单方法。
SELECT * FROM members WHERE postal_address like '% TX';
简而言之,通配符允许我们在数据驱动的应用程序中构建强大的搜索引擎。
通配符类型
% 百分号
% 百分号字符用于指定零个 (0) 或多个字符的模式。它具有以下基本语法。
SELECT statements... WHERE fieldname LIKE 'xxx%';
HERE
- “SELECT statement…” 是标准的 SQL SELECT 命令。
- “WHERE”是用于应用过滤器的关键字。
- “LIKE”是与通配符一起使用的比较运算符。
- ‘xxx’ 是任何指定的起始模式,例如单个字符或多个字符,而 “%” 匹配从零 (0) 开始的任意数量的字符。
为了完全理解上述陈述,让我们看一个实际的例子。
假设我们想要获取标题中包含“code”一词的所有电影,我们将使用百分号通配符在“code”一词的两侧执行模式匹配。以下是可用于实现所需结果的 SQL 语句。
SELECT * FROM movies WHERE title LIKE '%code%';
在 myflixdb 上对 MySQL workbench 执行上述脚本,可以得到如下结果。
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
4 | Code Name Black | Edgar Jimz | 2010 | NULL |
7 | Davinci Code | NULL | NULL | 6 |
请注意,即使搜索关键字“code”出现在标题的开头或结尾,它仍然会显示在我们的结果集中。这是因为我们的代码在开头包含任意数量的字符,然后匹配模式“code”,后面跟着任意数量的字符。
现在让我们修改上面的脚本,只在搜索条件开头包含百分号通配符。
SELECT * FROM movies WHERE title LIKE '%code';
在 MySQL workbench 上对 myflixdb 执行上述脚本,可以得到如下结果。
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
7 | Davinci Code | NULL | NULL | 6 |
请注意,数据库中只返回了一条记录。这是因为我们的代码匹配了电影标题开头的任意数量的字符,并且只获取以“code”模式结尾的记录。
现在让我们将百分号通配符移动到要匹配的指定模式的末尾。修改后的脚本如下所示。
SELECT * FROM movies WHERE title LIKE 'code%';
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
4 | Code Name Black | Edgar Jimz | 2010 | NULL |
请注意,数据库中只返回了一条记录。这是因为我们的代码匹配了所有以“code”模式开头,后面跟着任意数量字符的标题。
_ 下划线通配符
下划线通配符用于匹配一个确切的字符。假设我们要搜索所有在 200x 年份发行的电影,其中 x 是一个可以取任何值的确切字符。我们将使用下划线通配符来实现这一点。下面的脚本选择所有在“200x”年份发行的电影。
SELECT * FROM movies WHERE year_released LIKE '200_';
在 MySQL workbench 上对 myflixdb 执行上述脚本,可以得到如下结果。
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
9 | Honey mooners | Jhon Shultz | 2005 | 8 |
请注意,只有在发行年份中包含 200 后面跟任何字符的电影才会在我们的结果集中返回。这是因为下划线通配符匹配了模式 200 后面跟任何单个字符。
NOT Like
NOT 逻辑运算符可以与通配符一起使用,以返回与指定模式不匹配的行。
假设我们想要获取未在 200x 年份发行的电影。我们将使用 NOT 逻辑运算符和下划线通配符来获取结果。以下是执行此操作的脚本。
SELECT * FROM movies WHERE year_released NOT LIKE '200_';
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
4 | Code Name Black | Edgar Jimz | 2010 | NULL |
8 | Underworld-Awakeninh | Michahel Eal | 2012 | 6 |
请注意,只有发行年份中不以 200 开头的电影才会在我们的结果集中返回。这是因为我们在通配符模式搜索中使用了 NOT 逻辑运算符。
Escape 关键字
ESCAPE 关键字用于转义模式匹配字符,例如 (%) 百分号和下划线 (_),如果它们是数据的一部分。
假设我们要检查字符串“67%”,我们可以使用:
LIKE '67#%%' ESCAPE '#';
如果我们想搜索电影“67% Guilty”,我们可以使用下面的脚本来完成。
SELECT * FROM movies WHERE title LIKE '67#%%' ESCAPE '#';
请注意,LIKE 子句中有两个“%%”。第一个红色“%”被视为要搜索的字符串的一部分。另一个用于匹配后面的任意数量的字符。
使用类似的方法,相同的查询也将起作用
SELECT * FROM movies WHERE title LIKE '67=%%' ESCAPE '=';
摘要
- LIKE 和通配符是强大的工具,可帮助搜索匹配复杂模式的数据。
- 有许多通配符,包括百分号、下划线和字符列表(MySQL 不支持)等。
- 百分号通配符用于匹配从零 (0) 开始的任意数量的字符及更多。
- 下划线通配符用于精确匹配一个字符。