06 用通配符进行过滤

1.LIKE操作符

通配符:用来匹配值的一部分的特殊字符。实际上是SQLWHERE子句中含有特殊含义的字符,在搜索子句中使用通配符,必须使用LIKE操作符指示DBMS,后跟的搜索模式利用通配符匹配而不是简单的相等匹配进行比较。

搜索模式:由字面值、通配符或者两者组合构成的搜索条件。

谓词:LIKE是谓词而不是操作符。操作法作为谓词时不是操作符。

通配符搜索只能用于文本字段(字符串),不能用于非文本数据类型字段。

(1)百分号(%)通配符

%表示任何字符出现任意次数,表示搜索模式中给定位置的0个、1个或多个字符,是最常用的通配符。

输入:

SELECT prod_id, prod_name

FROM Products

WHERE prod_name LIKE 'Fish%';

输出:

搜索模式为'Fish%',检索任意Fish开头的词。根据DBMS的不同及其配置,搜索可以区分大小写,不过这里使用的MySQL没有区分。

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

下面使用两个位于模式两端的通配符,输入:

SELECT prod_id, prod_name

FROM Products

WHERE prod_name LIKE '%bean bag%';

输出:

搜索模式'%bean bag%'表示匹配任何位置上包含文本bean bag的值,不管它之前或之后出现什么字符。

通配符也可以出现在搜索模式的中间,下面找出以F开头,以y结尾的所有产品,输入:

SELECT prod_name

FROM Products

WHERE prod_name LIKE 'F%y';

输出:

注意,通配符%不能匹配NULL。子句WHERE prod_name LIKE '%'不会匹配产品名次为NULL的行。

(2)下划线(_)通配符

只能匹配单个字符。

输入:

SELECT prod_id, prod_name

FROM Products

WHERE prod_name LIKE '__ inch teddy bear';

输出:

该搜索模式只能匹配两个通配符。下面的SELECT语句使用%通配符,返回三行产品,输入:

SELECT prod_id, prod_name

FROM Products

WHERE prod_name LIKE '% inch teddy bear';

输出:

(3)方括号([])通配符

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

注意:MySQL不支持集合,因此以下检索不附上执行结果。

为了找出所有名字以JM开头的联系人,可输入:

SELECT cust_contact

FROM Customers

WHERE cust_contact LIKE '[JM]%'

ORDER BY cust_contact;

此通配符可以用前缀字符^(脱字号)来否定,优点是使用多个WHERE子句时可以简化语法。

输入:

SELECT cust_contact

FROM Customers

WHERE cust_contact LIKE '[^JM]%'

ORDER BY cust_contact;

也可以使用NOT操作符来否定,输入:

SELECT cust_contact

FROM Customers

WHERE NOT cust_contact LIKE '[JM]%'

ORDER BY cust_contact;

2.使用通配符的技巧

(1)不要过度使用通配符。若有操作符能达到相同目的,应该使用操作符。

(2)确实需要通配符时,尽量不要放在搜索模式的开始处,这样搜索速度很慢。

(3)仔细注意通配符的位置。

原文地址:https://www.cnblogs.com/Sumomo0516/p/6131521.html