《SQL必知必会》--通配符

第六课 用通配符进行过滤

通配符进行过滤是是在WHERE指令中使用的对前面几章所学的过滤规则的补充,主要是由于前面所学的过滤规则必须使用已知的特定的准确的值。

当我们只知道一个词,但是想要找到包含这个词的数据值时,通配符就有了作用。

本课介绍三种用以过滤的通配符:百分号% 及下划线 _ 和方括号[]。

LIKE操作符

通配符(wildcard):用来匹配值的一部分的特殊字符。

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

为在搜索子句中使用通配符,必须使用LIKE操作符。

通配符只能用于文本字段(字符串)。

百分号(%)通配符

百分号(%)通配符表示任何字符出现任意次数。

使用方法如下:

1
2
3
select prod_name
from products
WHERE prod_name LIKE 'fish%';
  • 与前面的指令不同在于LIKE实际上是动词,因此不需要等于号(=)。
  • 有的DEMS在搜索时区分大小写,因此通配符中可能会出现’fish%’<>’Fish%’的情况。
  • 通配符不匹配空值(NULL)
  • %不仅可以放在后面,还可以放在需要匹配的单词的前面,中间,都可以。
  • 一个(%)代表多个字符。

下划线(_)通配符

下划线(_)通配符与百分号(%)通配符的作用功能一样,但它只匹配单个字符,而不是多个字符。

即每一个(_)代表一个字符,遇到特殊情况可以多写两个,但是,不好区分写了几个,最好少用。

1
2
3
select prod_name, prod_id
from products
where prod_name like '__ inch bear toy';
  • 一个(_)只能代表一个字符,比如上面指令的输出结果只能是类似于’12 inch bear toy’的prod_name被过滤出来,但是’8 inch bear toy’就被排除在外了

方括号([])通配符

只有ACCESS和SQL Sever 支持该通配符。

干巴巴的解释比较费劲,下面直接看一个例子。

1
2
3
select cust_name
from customs
where cust_name like '[JM]%';

输出结果:

1
2
3
4
5
cust_name
---------
Jone ln
Joko leon
Mike Joe

实际上也就是一个OR的功能。

‘[JM]%’ = J% OR M%

使用通配符的技巧

SQL的通配符有用但是代价就是耗时更长。

  • 不要过度使用通配符。如果其他操作符可以到达相同作用,应使用其他操作符。
  • 在确实需要使用通配符时,尽量不要放在搜索模式的开始处,在开始处搜索起来最慢。
  • 仔细注意通配符的位置以及实际数据中的空格。如果放错地方,可能不会返回想要的数据。

小结

通配符虽好,可不要贪杯哦!