MySQL 通配符教程:Like、NOT Like、Escape、( %)、( _ )
是什么 MySQL 通配符?
MySQL 通配符 是帮助搜索符合复杂条件的数据的字符。通配符与 LIKE 比较运算符或 NOT LIKE 比较运算符一起使用。
为什么要使用 WildCards?
如果你熟悉使用 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%';
点击这里
- “选择语句…” 是标准 SQL SELECT 命令。
- “WHERE” 是用于应用过滤器的关键词。
- “LIKE” 是与通配符一起使用的比较运算符
- 'xxx' 是任何指定的起始模式,例如单个字符或多个字符,而“%”匹配从零 (0) 开始的任意数量的字符。
为了充分理解上述陈述,让我们看一个实际的例子
假设我们想要获取所有片名中包含“code”一词的电影,我们将使用百分比通配符对“code”一词的两边进行模式匹配。以下是可用于实现所需结果的 SQL 语句。
SELECT * FROM movies WHERE title LIKE '%code%';
在以下位置执行上述脚本 MySQL 工作台 针对 myflixdb 我们得到如下所示的结果。
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 针对 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 针对 myflixdb 的工作台为我们提供了如下所示的结果。
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
9 | Honey mooners | Jhon Shultz | 2005 | 8 |
请注意,我们的结果集中只返回了在 year release 字段中后跟任意字符 200 的电影。这是因为下划线通配符匹配了后跟任意单个字符的模式 200
不喜欢
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 '=';
结语
- 像和通配符这样的强大工具可以帮助搜索符合复杂模式的数据。
- 有许多通配符,包括百分比、下划线和字符列表(不支持 MySQL )等
- 百分比通配符用于匹配从零 (0) 开始及以上的任意数量的字符。
- 下划线通配符用于精确匹配一个字符。