SQL学习:四


用通配符进行过滤

通配符本身实际上是SQL的WHERE子句中由特殊含义的字符,SQL支持几种通配符。在搜索子句中使用通配符,必须使用LIKE操作符。
通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索。

任何通配符前面必须配合LIKE 关键字使用

1、百分号%通配符

%表示任何字符出现任意次数。

SELECT prod_id,prod_name FROM Products WHERE prod_name LIKE 'Fish%';

通配符可在搜索模式中的任意位置使用,并且可以使用过多个通配符。

SELECT prod_id,prod_name FROM Products WHERE prod_name LIKE '%bean bag%';

注意
①%代表搜索模式中给定位置的0个、1个或多个字符。
②有些DBMS用空格来填补字段的内容,例如某列有20个字符,而存储的文本为10个字符,则会添加10个空格。但是使用'k%j%'这样的搜索方式是不会匹配后面带有空格的字符串(kaij空格空格)。简单的解决办法是在后面在加入一个百分号('k%j%%')。或者使用函数。
③通配符%不能匹配产品名称为NULL的行。

2、下划线 _ 通配符

只匹配单个字符,而不是多个字符

SELECT prod_id,prod_name FROM Products WHERE prod_name LIKE '_ inch teddy BEAR';

3、方括号[]通配符

用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符。

SELECT cust_contact FROM Customers WHERE cust_contact LIKE '[JM]%';

^此通配符表示 否定,也可以理解为NOT

SELECT cust_contact FROM Customers WHERE cust_contact LIKE '[^JM]%';
SELECT cust_contact FROM Customers WHERE NOT cust_contact LIKE '[JM]%';

4、使用技巧

查询prod_desc中包含toy的描述

SELECT prod_name,prod_desc FROM Products WHERE prod_desc LIKE '%toy%%';

查询prod_desc中不包含toy的描述

SELECT prod_name,prod_desc FROM Products WHERE NOT prod_desc LIKE '%toy%%' ORDER BY prod_desc;

查询prod_desc中包含toy和carrots的描述

SELECT prod_name,prod_desc FROM Products WHERE prod_desc LIKE '%toy%%' AND  prod_desc LIKE '%carrots%%';

查询prod_desc中包含以先后顺序同时出现的toy和carrots的描述

SELECT prod_name,prod_desc FROM Products WHERE prod_desc LIKE '%toy%carrots%%';

为啥后面加了两个百分号,是为了防止DBMS填充空格,使用通配符检索不出来或者漏查。也可以使用要给百分号。

SQL