Appearance
SQL LIKE
SQL LIKE 运算符用于在 WHERE 子句中进行模糊匹配,通常与通配符一起使用,用于查找列中包含指定模式的记录。
LIKE 语法
sql
SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern;通配符
LIKE 运算符通常与以下通配符一起使用:
%:表示任意长度的任意字符(包括 0 个字符)_:表示单个任意字符
示例
假设我们有一个名为 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 |
|---|---|---|---|
| 1 | 张三 | 18 | 高三 |
| 6 | 张小明 | 17 | 高二 |
示例 2:查找以 "三" 结尾的名字
sql
SELECT * FROM students WHERE name LIKE '%三';结果:
| id | name | age | grade |
|---|---|---|---|
| 1 | 张三 | 18 | 高三 |
示例 3:查找包含 "四" 的名字
sql
SELECT * FROM students WHERE name LIKE '%四%';结果:
| id | name | age | grade |
|---|---|---|---|
| 2 | 李四 | 17 | 高二 |
示例 4:查找名字长度为 2 个字符且以 "张" 开头的记录
sql
SELECT * FROM students WHERE name LIKE '张_';结果:
| id | name | age | grade |
|---|---|---|---|
| 1 | 张三 | 18 | 高三 |
示例 5:查找年级包含 "高" 的记录
sql
SELECT * FROM students WHERE grade LIKE '%高%';结果:
| id | name | age | grade |
|---|---|---|---|
| 1 | 张三 | 18 | 高三 |
| 2 | 李四 | 17 | 高二 |
| 3 | 王五 | 19 | 高三 |
| 4 | 赵六 | 16 | 高一 |
| 5 | 钱七 | 18 | 高三 |
| 6 | 张小明 | 17 | 高二 |
| 7 | 李华 | 18 | 高三 |
NOT LIKE
使用 NOT LIKE 可以查找不匹配指定模式的记录:
sql
SELECT * FROM students WHERE name NOT LIKE '张%';结果:
| id | name | age | grade |
|---|---|---|---|
| 2 | 李四 | 17 | 高二 |
| 3 | 王五 | 19 | 高三 |
| 4 | 赵六 | 16 | 高一 |
| 5 | 钱七 | 18 | 高三 |
| 7 | 李华 | 18 | 高三 |
注意事项
性能考虑:使用 LIKE 运算符(特别是以
%开头的模式)可能会导致全表扫描,影响查询性能。对于大型表,建议使用索引或其他优化方法。大小写敏感性:在某些数据库系统中,LIKE 运算符是大小写敏感的,而在其他系统中则不是。例如,在 MySQL 中,默认情况下 LIKE 是大小写不敏感的,而在 PostgreSQL 中是大小写敏感的。
转义字符:如果需要匹配通配符本身(如
%或_),需要使用转义字符。不同的数据库系统可能有不同的转义字符,例如在 MySQL 中使用\作为转义字符。
小结
SQL LIKE 运算符是一种用于模糊匹配的强大工具,通过与通配符一起使用,可以灵活地查找符合特定模式的记录。在使用时,需要注意性能影响和大小写敏感性等问题。