注意:搜索可以区分大小写,也可以不区分大小写。

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]%';