注意:搜索可以区分大小写,也可以不区分大小写。
LIKE 操作符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式或取值。
语法
SELECT 列名 FROM 表名 WHERE 列名 LIKE 模式或取值;
注意:
1、在没有通配符时,LIKE 操作符与等号(=)的效果一样,不光可以在 SELECT 语句中使用 LIKE 操作符,也可以在 UPDATE、DELETE等语句中使用 LIKE 操作符。
2、LIKE 操作符匹配整个列,如果被匹配的文本在列值中出现,LIKE 将不会找到它,相应的行也不被返回(除非使用通配符)。(也可以使用正则表达式代替 LIKE操作符)。
通配符
通配符用来匹配值的一部分的特殊字符,通配符本身实际是 SQL 的 WHERE 子句中有特殊含义的字符,使用通配符时必须使用 LIKE 操作符。
SQL支持的通配符:
通配符 | 描述 |
% | 替代0个或多个字符 |
_ | 替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist] 或者 [!charlist] | 不在字符列中的任何单一字符 |
注意:
1、MySQL 、SQLite 只支持百分号(%)和 下划线(_)通配符,不支持 [^charlist] 或 [!charlist] 通配符(微软的Access 、 SQL Server以及其他公司的数据库管理软件支持,但微软有时候的通配符不支持百分号(%),而是用星号(*),具体看对应软件说明。
2、通配符和正则不是一回事。
3、不要过度使用通配符或非必须使用通配符时尽量不要使用通配符,它会降低搜索性能,增加性能负担。
百分号(%)通配符
%表示任何字符出现任意次数。语法:
SELECT 列名 FROM 表名 WHERE 列名 LIKE '%字符';
或是
SELECT 列名 FROM 表名 WHERE 列名 LIKE '字符%';
或是
SELECT 列名 FROM 表名 WHERE 列名 LIKE '%字符%';
语法举例(以 字母A 为例):
'%A' 代表以A结尾的数据,例如:BBA、acbA、AA等都符合。
'A%' 代表以A开头的数据,例如:ACB、Add、Ab等都符合。
'%A%' 代表含有A的数据,例如:CAC,AAA,bAc等都符合。
注意:
1、除了一个或多个字符外,百分号(%)能匹配0个字符。%代表搜索模式中给定位置的0个、1个或多个字符。
2、尾空格可能会干扰通配符匹配,例如在使用 ‘%符号’ 时,若符号后面若有空格则会影响结果匹配,解决方法可以在符号后面加一个百分号(%)或是使用函数去除尾空格。
3、虽然似乎%通配符可以匹配任何东西,但是百分号(%)不能匹配 NULL ,即使使用'%'也不能匹配NULL。
下划线(_)通配符
只适用于匹配单个字符,用途与百分号(%)一样。语法:
SELECT 列名 FROM 表名 WHERE 列名 LIKE '_字符';
或是
SELECT 列名 FROM 表名 WHERE 列名 LIKE '字符_';
或是
SELECT 列名 FROM 表名 WHERE 列名 LIKE '_字符_';
语法举例(以 字母A为例):
'_A_' 代表三位且中间字母是A的。
'_A' 代表两位且结尾字母是A的。
'A_' 代表两位且开头字母是A的。
中括号([ ])通配符
用途与百分号(%)和下划线(_)一样。
注意:不是所有数据管理软件都支持中括号([ ])通配符,例如MySQL不支持。
语法
SELECT 列名 FROM 表名 WHERE 列名 LIKE '[字符]%';
或是
SELECT 列名 FROM 表名 WHERE 列名 LIKE '[字符]_';
或是
SELECT 列名 FROM 表名 WHERE 列名 LIKE '%[字符]%';
或是
SELECT 列名 FROM 表名 WHERE 列名 LIKE '_[字符]_';
或是
SELECT 列名 FROM 表名 WHERE 列名 LIKE '%[字符]_';
等等
语法举例:
1、从 city 表中搜索name列中以'A' 或 'L'或 'N' 开头的:
SELECT name
FROM city
WHERE name LIKE '[ALN]%';
2、从 city 表中搜索name列中不以'A' 或 'L'或 'N' 开头的:
SELECT name
FROM city
WHERE name LIKE '[!ALN]%';