📜  MySQL通配符

📅  最后修改于: 2020-11-19 02:11:22             🧑  作者: Mango

MySQL通配符

MySQL中的通配符是使我们能够非常轻松,快速地从表中搜索复杂数据的字符。它通过替换一个或多个字符处理字符串,并在将字符串匹配到表中后产生结果。

在正常的比较,我们使用两个字符串,其中两个字符串的每一个字符,应给予输出之前完全匹配。在通配符中,它们提供了在字符串中使用单个字符或一组字符的灵活性,这对于另一个字符串是可以接受的。

MySQL使用通配符与LIKE或NOT LIKE比较运算符相结合。 LIKE运算符与WHERE子句一起使用,以查找列中指定模式的结果。

通配符的优点

MySQL具有通配符的以下优点:

  • 它提高了应用程序的性能。
  • 它节省了从表中过滤记录的时间。
  • 它可以非常轻松,快速地将复杂查询使用到简单查询中。
  • 它使我们能够将强大的搜索引擎开发到大型数据驱动的应用程序中。

通配符的类型

以下是MySQL中常用的通配符类型,这些通配符可以单独使用,也可以组合使用通配符:

SN Wildcard Symbol Descriptions
1. % This symbol indicates zero or more characters.
2. _ This symbol is used to match exactly one(single) character.

现在,我们将通过以下示例来了解MySQL中这些通配符的用法:

让我们首先创建一个名为“ employee”的表,其中包含以下数据:

1.百分号(%)

它用于从指定0、1或更多字符的表中搜索或过滤记录。我们可以使用LIKE子句在字符串的开头,结尾或两端使用它。

句法

使用此字符的基本语法是:

SELECT * FROM tab_name WHERE column_name LIKE 'X%';
OR,
SELECT * FROM tab_name WHERE column_name LIKE '%X';
OR,
SELECT * FROM tab_name WHERE column_name LIKE 'X%X';

在以上语法中,“ X”指定任何单个字符,%与任意数量的字符匹配。

该语句返回其城市名称以'F'字符开头的所有雇员。

mysql> SELECT * FROM employees WHERE city LIKE 'F%';

它将给出以下输出:

同样,这个语句返回其城市的名字开始与“A”与“A”字符结尾的表中的所有员工:

mysql> SELECT * FROM employees WHERE city LIKE 'a%a';

成功执行后,我们将得到以下结果:

此语句返回X值可以在任何位置的所有雇员:

mysql> SELECT * FROM employees WHERE city LIKE '%n%';

它将给出如下输出:

如果我们想回报从其城市不以“A”与“A”字符结尾启动表中的所有员工,执行以下语句:

mysql> SELECT * FROM employees WHERE city NOT LIKE 'a%a';

我们将得到以下结果,可以看到没有城市名称以'a'开头和'a'字符结尾。

2.下划线符号(_)

当需要从与任何位置的单个字符完全匹配的表中返回结果时,我们可以使用它。

句法

使用此字符的基本语法是:

SELECT * FROM tab_name WHERE column_name LIKE 'X_';
OR,
SELECT * FROM tab_name WHERE column_name LIKE '_X';

在以上语法中,“ X”指定任何字符串模式,而_符号恰好匹配一个字符。

此语句返回年龄在40至49岁之间的所有雇员:

SELECT * FROM employees WHERE emp_age LIKE '4_';

我们将看到如下结果:

该语句从表中返回所有员工,其城市名称以任何字符开头,后跟“ lorida”字符:

mysql> SELECT * FROM employees WHERE city LIKE '_lorida';

成功执行后,我们将得到以下结果:

如果我们要从表中返回城市不以任何字符开头,后跟“ lorida”字符开头的所有雇员,请执行以下语句:

mysql> SELECT * FROM employees WHERE city NOT LIKE '_lorida';

出现以下输出:

组合通配符

我们已经了解到通配符也可以结合使用,下面的示例让我们理解通配符。

此语句返回名称以X开头且长度至少两个字符的所有雇员:

mysql> SELECT * FROM employees WHERE city LIKE 'a_%_';

我们将获得以下输出:

这是另一个产生输出的示例,在该输出中,所有在收入列中第二个位置均具有“ 5”的雇员:

mysql> SELECT * FROM employees WHERE income LIKE '_5%';

我们可以得到以下输出:

3.连字符(-)

当我们需要在某个范围内从表中过滤记录时,使用此符号返回结果。它是使用了REGEXP_LIKE()函数字符的扩展版本。

该语句从雇员表中获取其城市包含字母“ b”,“ c”或“ d”的所有记录,如下所示:

mysql> SELECT * FROM employees WHERE REGEXP_LIKE(city, '[b-d]');

输出量

成功执行后,我们将得到以下结果:

如果要从表中返回城市不包含字母“ b”,“ c”或“ d”的所有雇员,如下所示:

mysql> SELECT * FROM employees WHERE NOT REGEXP_LIKE(city, '[b-d]');

输出量