SQL

SQL 知识量:22 - 44 - 129

6.1 使用通配符进行过滤><

LIKE操作符- 6.1.1 -

如果要查询的信息没有确切的过滤条件,只有一部分过滤条件已知,例如:查找名字中包含“on”的学生信息,这时必须使用通配符。

通配符就是用来匹配值的一部分的特殊字符,实际上就是SQL的where子句中有特殊含义的字符。

利用通配符可以构建比较特定数据的搜索模式,搜索模式就是由字面值、通配符或者两者组合构成的搜索条件。

要在where子句中使用通配符,必须使用like操作符。like操作符告诉DBMS:后面的搜索模式利用通配符进行匹配,而不是简单的相等匹配。

需要注意的是:

  • 从技术上来说,其实like是谓词而不是操作符。

  • 通配符查询只能用于文本字段,非文本数据类型字段不能使用通配符进行查询。

百分号(%)通配符- 6.1.2 -

百分号(%)是最常用的通配符,%表示任何字符出现任意次数。

例如:查找名字中以“ob”结束的学生信息。

select * from student where name like '%ob';

结果:

+----+------+-----+------+
| id | name | age | sex  |
+----+------+-----+------+
|  3 | Bob  |  11 | male |
+----+------+-----+------+

以上搜索模式将查询名字以“ob”结束的学生信息。如果要查询名字中包含“ob”的学生信息时,可以同时应用两个%来实现。

select * from student where name like '%ob%';

结果:

+----+-------+-----+------+
| id | name  | age | sex  |
+----+-------+-----+------+
|  3 | Bob   |  11 | male |
|  4 | Robot |  10 | male |
+----+-------+-----+------+

这样,不论“ob”位于名字的什么位置,只要包含其中,就会符合匹配条件。

注意:

  • 并非所有DBMS对通配符的规定都是一致的,如果使用Microsoft Access,需要使用*代替%。

  • 可以配置DBMS在匹配中是否区分大小写。

  • 许多DBMS都用空格来填补数据后面的字段,以达到定义的数据长度,这些空格有时会对匹配产生影响,保险起见,应当在搜索模式的后面加一个%,或者总是利用函数去掉空格。

  • 通配符不会匹配NULL。

下划线(_)通配符- 6.1.3 -

下划线(_)通配符的用途与%一样,但是它只匹配单个字符。

例如:查询名字由三个字母组成的学生信息。

select * from student where name like '___';

结果:

+----+------+-----+--------+
| id | name | age | sex    |
+----+------+-----+--------+
|  3 | Bob  |  11 | male   |
|  5 | Jen  |  11 | female |
+----+------+-----+--------+

因为下划线(_)只匹配单个字符,所有上面的搜索模式使用了3个下划线。

注意:

  • DB2不支持下划线(_)通配符。

  • 如果使用Microsoft Access,需要使用?代替_。

方括号([])通配符- 6.1.4 -

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

例如:查询名字以“B”或“J”开头的学生信息。

select * from student where name like '[BJ]%';

结果:

+----+--------+-----+--------+
| id | name   | age | sex    |
+----+--------+-----+--------+
|  2 | Jame   |  12 | male   |
|  3 | Bob    |  11 | male   |
|  5 | Jen    |  11 | female |
|  7 | Jack   |  13 | male   |
|  9 | Bonnie |  11 | male   |
+----+--------+-----+--------+

如果要否定集合,应当使用前缀字符^(脱字号)。例如,查询名字不是以“B”或“J”开头的学生信息,搜索模式应改为'[^BJ]%'。

注意:

  • 目前,只有Microsoft的Access和SQL Server支持集合。

  • 如果使用Microsoft Access,需要使用!代替^。

使用通配符的技巧- 6.1.5 -

使用通配符时,应当注意以下几点:

  • 不要过度使用通配符,如果可以,应当优先使用其他操作符达到相同目的。

  • 在使用通配符时,尽量避免用于搜索模式的开始处,把通配符放于开始处,查询是最慢的。