美文网首页
_6_ SQL 用通配符进行过滤

_6_ SQL 用通配符进行过滤

作者: changsanjiang | 来源:发表于2018-07-02 22:45 被阅读21次

本文DEMO

https://gitee.com/changsanjiang/SQLDemo/tree/master

前面的所有操作, 都是针对已知值进行过滤的. 这种过滤方法并不是任何时候都好用. 例如, 如何搜索产品名中包含bean bag的产品? 用简单的比较操作符是肯定不行的, 必须使用通配符.

通配符本身实际上是SQL的WHERE子句中有特殊含义的字符, SQL支持几种通配符. 为在搜索子句中使用通配符, 必须使用LIKE操作符.

**谓词**
从技术上说, LIKE是谓词(predicate)而不是操作符. 
虽然最终的结果是相同的, 但应该对此术语有所了解, 以免在SQL文献或手册中遇到此术语时不知所云.

% 百分号通配符

最常使用的通配符是百分号(%). 如下:

输入:

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

输出:

image.png

分析:

这条语句搜索以Fish起头的词. %告诉DBMS接收Fish之后的任意个字符.

**说明: 区分大小写**
根据DBMS的不同及其配置, 搜索可以是区分大小写的. 
如果区分大小写, 则`fish%`就不能匹配`Fish bean bag toy`.

如上, 'Fish%' 为一个搜索模式(search pattern). 搜索模式是由字面值, 通配符或两者组合构成的搜索条件. 通配符可以在搜索模式中的位置使用, 并且可以使用多个通配符. 如下:

输入:

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

输出:

image.png

通配符也可以出现在搜索模式的中间, 如下:

SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE 'F%y';

需要特别注意的是, %还能匹配0个字符. %代表搜索模式中给定位置的0个以上字符.

**说明: 请注意后面所跟的空格**
包括Access在内的许多DBMS都用空格来填补字段的内容. 
例如, 某列有50个字符, 而存储的文本仅为17个字符, 则为了填满该列, 需要在后面附加33个空格. 
这样做一般对数据及其使用没有影响, 但是可能对上述SQL语句由负面影响. 
子句 WHERE prod_name LIKE 'F%y'; 只匹配以F开头, 以y结尾的prod_name. 如果值后面跟着空格, 则该条记录无法检索. 
简单的解决办法是给搜索模式增加一个%号: 'F%y%', 还匹配y之后的字符(或空格). 
更好的解决办法是用函数去掉空格. 后面我们会使用到.
**注意: 请注意NULL**
通配符%看起来像是可以匹配任何东西, 但有个例外, 这就是NULL. 
子句 WHERE prod_name LIKE '%' 并不会匹配产品名称为NULL的行.

下划线(_)通配符

下划线的用途与%百分号一样, 但它只匹配单个字符.

**说明: Access通配符**
如果使用的是Microsoft Access, 需要使用?而不是_.

举一个例子:

SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '__ inch teddy bear';

输出:

image.png

分析:

上面WHERE子句中的搜索模式, 给出了两个下划线. 分别匹配了12和18两个字符.


使用通配符的技巧

正如所见, SQL的通配符很有用. 但这种功能是有代价的, 即通配符搜索一般比前面讨论的其他搜索要耗费更长的处理时间. 这里给出一些使用通配符时要记住的技巧.

  • 不要过度使用通配符. 如果其它操作符能达到想用目的, 应该使用其他操作符.
  • 在确实需要使用通配符时, 也尽量不要把它们用在搜索模式的开始处. 把通配符置于开始处, 搜索起来是最慢的.
  • 仔细注意通配符的位置. 如果犯错位置, 可能不会返回想要的数据.

总之, 通配符是一种极其重要和有用的工具, 以后我们经常会用到它.

相关文章

网友评论

      本文标题:_6_ SQL 用通配符进行过滤

      本文链接:https://www.haomeiwen.com/subject/czxwyftx.html