SQL 知识量:22 - 44 - 129
如果要查询的信息没有确切的过滤条件,只有一部分过滤条件已知,例如:查找名字中包含“on”的学生信息,这时必须使用通配符。
通配符就是用来匹配值的一部分的特殊字符,实际上就是SQL的where子句中有特殊含义的字符。
利用通配符可以构建比较特定数据的搜索模式,搜索模式就是由字面值、通配符或者两者组合构成的搜索条件。
要在where子句中使用通配符,必须使用like操作符。like操作符告诉DBMS:后面的搜索模式利用通配符进行匹配,而不是简单的相等匹配。
需要注意的是:
从技术上来说,其实like是谓词而不是操作符。
通配符查询只能用于文本字段,非文本数据类型字段不能使用通配符进行查询。
百分号(%)是最常用的通配符,%表示任何字符出现任意次数。
例如:查找名字中以“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。
下划线(_)通配符的用途与%一样,但是它只匹配单个字符。
例如:查询名字由三个字母组成的学生信息。
select * from student where name like '___';
结果:
+----+------+-----+--------+ | id | name | age | sex | +----+------+-----+--------+ | 3 | Bob | 11 | male | | 5 | Jen | 11 | female | +----+------+-----+--------+
因为下划线(_)只匹配单个字符,所有上面的搜索模式使用了3个下划线。
注意:
DB2不支持下划线(_)通配符。
如果使用Microsoft Access,需要使用?代替_。
方括号([])通配符用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符。
例如:查询名字以“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,需要使用!代替^。
使用通配符时,应当注意以下几点:
不要过度使用通配符,如果可以,应当优先使用其他操作符达到相同目的。
在使用通配符时,尽量避免用于搜索模式的开始处,把通配符放于开始处,查询是最慢的。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6