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%';
在以下位置执行上述脚本 MySQL 针对 myflixdb 的工作台为我们提供了如下所示的结果。
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) 开始及以上的任意数量的字符。
  • 下划线通配符用于精确匹配一个字符。