Appearance
SQL 通配符
SQL 通配符用于在 LIKE 运算符中进行模糊匹配,它们可以替代一个或多个字符。
常用通配符
| 通配符 | 描述 | 示例 |
|---|---|---|
| % | 替代任意长度的任意字符(包括 0 个) | LIKE '张%' 匹配以 "张" 开头的字符串 |
| _ | 替代单个任意字符 | LIKE '张_' 匹配以 "张" 开头且长度为 2 的字符串 |
| [charlist] | 匹配字符列表中的任意一个字符 | LIKE '[张李]%' 匹配以 "张" 或 "李" 开头的字符串 |
| [^charlist] 或 [!charlist] | 匹配不在字符列表中的任意一个字符 | LIKE '[^张李]%' 匹配不以 "张" 或 "李" 开头的字符串 |
注意事项
%和_是标准的 SQL 通配符,被所有关系型数据库支持。[charlist]和[^charlist]是 SQL Server 和 MS Access 支持的通配符,在 MySQL 中不支持。- 在 MySQL 中,可以使用正则表达式来实现类似的功能。
示例
假设我们有一个名为 students 的表,包含以下数据:
| id | name | age | grade |
|---|---|---|---|
| 1 | 张三 | 18 | 高三 |
| 2 | 李四 | 17 | 高二 |
| 3 | 王五 | 19 | 高三 |
| 4 | 赵六 | 16 | 高一 |
| 5 | 钱七 | 18 | 高三 |
| 6 | 张小明 | 17 | 高二 |
| 7 | 李华 | 18 | 高三 |
示例 1:使用 % 通配符
查找名字中包含 "小" 的学生:
sql
SELECT * FROM students WHERE name LIKE '%小%';结果:
| id | name | age | grade |
|---|---|---|---|
| 6 | 张小明 | 17 | 高二 |
示例 2:使用 _ 通配符
查找名字长度为 2 个字符的学生:
sql
SELECT * FROM students WHERE name LIKE '__';结果:
| id | name | age | grade |
|---|---|---|---|
| 1 | 张三 | 18 | 高三 |
| 2 | 李四 | 17 | 高二 |
| 3 | 王五 | 19 | 高三 |
| 4 | 赵六 | 16 | 高一 |
| 5 | 钱七 | 18 | 高三 |
| 7 | 李华 | 18 | 高三 |
示例 3:使用 [charlist] 通配符(SQL Server/MS Access)
查找名字以 "张" 或 "李" 开头的学生:
sql
SELECT * FROM students WHERE name LIKE '[张李]%';结果:
| id | name | age | grade |
|---|---|---|---|
| 1 | 张三 | 18 | 高三 |
| 2 | 李四 | 17 | 高二 |
| 6 | 张小明 | 17 | 高二 |
| 7 | 李华 | 18 | 高三 |
示例 4:使用 [^charlist] 通配符(SQL Server/MS Access)
查找名字不以 "张" 或 "李" 开头的学生:
sql
SELECT * FROM students WHERE name LIKE '[^张李]%';结果:
| id | name | age | grade |
|---|---|---|---|
| 3 | 王五 | 19 | 高三 |
| 4 | 赵六 | 16 | 高一 |
| 5 | 钱七 | 18 | 高三 |
示例 5:MySQL 中的正则表达式
在 MySQL 中,可以使用 REGEXP 或 RLIKE 操作符来使用正则表达式:
查找名字以 "张" 或 "李" 开头的学生:
sql
SELECT * FROM students WHERE name REGEXP '^[张李]';结果:
| id | name | age | grade |
|---|---|---|---|
| 1 | 张三 | 18 | 高三 |
| 2 | 李四 | 17 | 高二 |
| 6 | 张小明 | 17 | 高二 |
| 7 | 李华 | 18 | 高三 |
通配符的使用技巧
精确匹配:如果需要匹配包含通配符本身的字符串,需要使用转义字符。不同的数据库系统可能有不同的转义字符,例如在 MySQL 中使用
\作为转义字符。性能考虑:使用通配符(特别是以
%开头的模式)可能会导致全表扫描,影响查询性能。对于大型表,建议使用索引或其他优化方法。组合使用:可以组合使用多个通配符来实现更复杂的匹配模式。
小结
SQL 通配符是一种用于模糊匹配的强大工具,通过与 LIKE 运算符一起使用,可以灵活地查找符合特定模式的记录。不同的数据库系统可能支持不同的通配符,需要根据实际使用的数据库系统选择正确的语法。