通配符(wildcard)
用来匹配值的一部分的特殊字符。
搜索模式(search pattern)
由字面值、通配符或两者组合构成的搜索条件。
通配符本身实际上是SQL的WHERE子句中有特殊含义的字符,SQL支持几种通配符。为在搜索子句中使用通配符,必须使用LIKE操作符。LIKE指示DBMS,后跟的搜索模式利用通配符匹配而不是简单的相等匹配进行比较。
谓词(predicate)
操作符何时不是操作符?答案是,它作为谓词时。从技术上说,LIKE是谓词而不是操作符。虽然最终的结果是相同的,但应该对此术语有所了解,以免在SQL文献或手册中遇到此术语时不知所云。
通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索。
百分号(%)通配符
%表示任何字符出现任意次数
所有以词Fish起头的产品,可发布以下SELECT语句:
SELECT prod_id,prod_name
FROM Products
WHERE prod_name LIKE'Fish%';
需要特别注意,除了能匹配一个或多个字符外,%还能匹配0个字符。%代表搜索模式中给定位置的0个、1个或多个字符。
说明:请注意后面所跟的空格
包括Access在内的许多DBMS都用空格来填补字段的内容。例如,如果某列有50个字符,而存储的文本为Fish bean bag toy(17个字符),则为填满该列需要在文本后附加33个空格。这样做一般对数据及其使用没有影响,但是可能对上述SQL语句有负面影响。子句WHERE prod_name LIKE 'F%y'只匹配以F开头、以y结尾的prod_name。如果值后面跟空格,则不是以y结尾,所以Fish bean bag toy就不会检索出来。简单的解决办法是给搜索模式再增加一个%号:'F%y%'还匹配y之后的字符(或空格)。更好的解决办法是用函数去掉空格。请参阅第8课。
警告:请注意NULL
通配符%看起来像是可以匹配任何东西,但有个例外,这就是NULL。子句WHERE prod_name LIKE '%'不会匹配产品名称为NULL的行。
下划线(_)通配符
只匹配单个字符,而不是多个字符。
方括号([ ])通配符
说明:并不总是支持集合
它也只能匹配单个字符
与前面描述的通配符不一样,并不是所有DBMS都支持用来创建集合的[]。只有微软的Access和SQL Server支持集合。为确定你使用的DBMS是否支持集合,请参阅相应的文档。
例如,找出所有名字以J或M起头的联系人,可进行如下查询:
SELECT cust_contact
FROM Customers
WHERE cust_contact LIKE'[JM]%' --'[^JM]%' 表否定
ORDER BY cust_contact;
此通配符可以用前缀字符^(脱字号)来否定。
当然,也可以使用NOT操作符得出类似的结果。^的唯一优点是在使用多个WHERE子句时可以简化语法:
SELECT cust_contact
FROM Customers
WHERE NOT cust_contact LIKE'[JM]%'
ORDER BY cust_contact;