📅  最后修改于: 2020-11-19 02:11:22             🧑  作者: Mango
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”的表,其中包含以下数据:
它用于从指定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'字符结尾。
当需要从与任何位置的单个字符完全匹配的表中返回结果时,我们可以使用它。
句法
使用此字符的基本语法是:
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%';
我们可以得到以下输出:
当我们需要在某个范围内从表中过滤记录时,使用此符号返回结果。它是使用了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]');
输出量