MySQL - 通配符
- MySQL 通配符
- MySQL 百分号 % 通配符
- MySQL 下划线 _ 通配符
MySQL 通配符
MySQL wildcards 是与 LIKE 操作符结合使用的特殊字符,用于在表列中搜索文本模式。MySQL 提供了两种通配符:percent (%) 和 underscore (_)。
下表列出了 MySQL 中两种通配符的使用场景 −
| 序号 | 通配符 & 描述 |
|---|---|
| 1 | 百分号 (%) 匹配零个或多个字符。例如,'a%' 匹配以 'a' 开头的字符串,如 'android' 或 'aeroplane'。 |
| 2 | 下划线 (_) 匹配单个字符。例如,'_un' 匹配以 'un' 结尾的三个字符字符串,如 'gun' 或 'bun'。 |
语法
以下是 MySQL 中 % 和 _ 通配符的语法 −
SELECT * FROM table_name WHERE column_name LIKE wildcard;
通配符字符可以相互组合使用。下表演示了在 WHERE 子句中使用 '%' 和 '_' 与 LIKE 操作符的不同方式 −
| 序号 | 语句 & 描述 |
|---|---|
| 1 | WHERE SALARY LIKE '200%' 查找以 200 开头的所有值。 |
| 2 | WHERE SALARY LIKE '%200%' 查找任意位置包含 200 的所有值。 |
| 3 | WHERE SALARY LIKE '_00%' 查找第二和第三位为 00 的所有值。 |
| 4 | WHERE SALARY LIKE '2_%_%' 查找以 2 开头且长度至少为 3 个字符的所有值。 |
| 5 | WHERE SALARY LIKE '%2' 查找以 2 结尾的所有值。 |
| 6 | WHERE SALARY LIKE '2%0' 查找以 2 开头且以 0 结尾的所有值。 |
| 7 | WHERE SALARY LIKE '_2%3' 查找第二位为 2 且以 3 结尾的所有值。 |
| 8 | WHERE SALARY LIKE '2___3' 查找五位数字中以 2 开头且以 3 结尾的所有值。 |
MySQL 百分号 % 通配符
MySQL % 通配符是 SQL 查询中用于模式匹配的符号。它表示字符串中任意字符序列(包括零个字符)。
当与 WHERE 子句中的 LIKE 操作符一起使用时,% 允许您搜索匹配指定模式的值。
示例
首先,使用以下查询创建一个名为 CUSTOMERS 的表 −
CREATE TABLE CUSTOMERS( ID INT NOT NULL, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(25) NOT NULL, SALARY DECIMAL(18, 2), PRIMARY KEY(ID) );
现在,使用以下 INSERT 语句向上面创建的表中插入值 −
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ), (2, 'Khilan', 25, 'Delhi', 1500.00 ), (3, 'Kaushik', 23, 'Kota', 2000.00 ), (4, 'Chaitali', 25, 'Mumbai', 6500.00 ), (5, 'Hardik', 27, 'Bhopal', 8500.00 ), (6, 'Komal', 22, 'Hyderabad', 4500.00 ), (7, 'Muffy', 24, 'Indore', 10000.00 );
得到的 CUSTOMERS 表如下 −
| ID | NAME | AGE | ADDRESS | SALARY |
|---|---|---|---|---|
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | Kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | Hyderabad | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
这里,我们检索 CUSTOMERS 表中 SALARY 以 2000 开头的记录 −
SELECT * FROM CUSTOMERS WHERE SALARY LIKE '2000%';
输出
上述查询的输出如下 −
| ID | NAME | AGE | ADDRESS | SALARY |
|---|---|---|---|---|
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 3 | Kaushik | 23 | Kota | 2000.00 |
示例
在以下查询中,我们检索 ADDRESS 以 'D' 开头并以 'i' 结尾的所有记录 −
SELECT * FROM CUSTOMERS WHERE ADDRESS LIKE 'D%i';
输出
执行给定查询后,输出显示如下 −
| ID | NAME | AGE | ADDRESS | SALARY |
|---|---|---|---|---|
| 2 | Khilan | 25 | Delhi | 1500.00 |
示例
这里,我们查找 ADDRESS 以 'd' 结尾的所有记录 −
SELECT * FROM CUSTOMERS WHERE ADDRESS LIKE '%d';
输出
执行上述查询后,得到的输出如下 −
| ID | NAME | AGE | ADDRESS | SALARY |
|---|---|---|---|---|
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 6 | Komal | 22 | Hyderabad | 4500.00 |
示例
在以下查询中,我们尝试检索 SALARY 中任意位置包含 '1' 的所有记录 −
SELECT * FROM CUSTOMERS WHERE SALARY LIKE '%1%';
输出
上述查询产生的输出如下 −
| ID | NAME | AGE | ADDRESS | SALARY |
|---|---|---|---|---|
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
MySQL 下划线 _ 通配符
MySQL 下划线通配符表示其使用位置的一个单个字符。当与 WHERE 子句中的 LIKE 操作符结合使用时,下划线通配符允许您搜索匹配特定模式的值,其中包含单个字符占位符。
示例
这里,我们检索所有 NAME 以一个字符开头,后跟 'ardik' 的 CUSTOMERS −
SELECT * FROM CUSTOMERS WHERE NAME LIKE '_ardik';
输出
让我们编译并运行查询,以产生以下结果 −
| ID | NAME | AGE | ADDRESS | SALARY |
|---|---|---|---|---|
| 5 | Hardik | 27 | Bhopal | 8500.00 |
示例
现在,我们检索所有 NAME 以 'M' 开头,后跟任意字符,后跟 'f',后跟任意字符,后跟 'y' 的 CUSTOMERS −
SELECT * FROM CUSTOMERS WHERE NAME LIKE 'M_f_y';
输出
执行上述查询时,输出如下 −
| ID | NAME | AGE | ADDRESS | SALARY |
|---|---|---|---|---|
| 7 | Muffy | 24 | Indore | 10000.00 |
示例
在下面的查询中,我们检索所有 SALARY 在第二、第三和第四位置包含 '500' 的记录 −
SELECT * FROM CUSTOMERS WHERE SALARY LIKE '_500%';
输出
执行给定查询后,输出显示如下 −
| ID | NAME | AGE | ADDRESS | SALARY |
|---|---|---|---|---|
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | Hyderabad | 4500.00 |
示例
在以下查询中,我们检索所有 ADDRESS 以 'M' 开头且长度至少为 3 个字符的记录 −
SELECT * FROM CUSTOMERS WHERE ADDRESS LIKE 'M_%_%';
输出
上述查询的输出如下 −
| ID | NAME | AGE | ADDRESS | SALARY |
|---|---|---|---|---|
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
示例
以下查询检索所有 NAME 在第二位置有 'h' 并以 'i' 结尾的记录 −
SELECT * FROM CUSTOMERS WHERE NAME LIKE '_h%i';
输出
如果我们编译并运行查询,结果如下 −
| ID | NAME | AGE | ADDRESS | SALARY |
|---|---|---|---|---|
| 4 | Chaitali | 25 | Mumbai | 6500.00 |