Alex_McAvoy

想要成为渔夫的猎手

SQL 的 WHERE 子句

【常用查询条件】

查询满足指定条件的元组一般通过 WHERE 子句来实现,常用的查询条件如下表

【比较大小】

用于进行比较的运算符一般包括等于 =、不等于 !=<>、大于 >、小于<、大于等于>=、小于等于<=、不大于!>、不小于!<

例如,查询 CS 系全体学生的名单

【确定范围】

谓词 BETWEEN...AND...NOT BETWEEN...AND... 用于查找属性值在/不在指定范围内的元组,其中 BETWEEN 后是范围的下限(低值),AND 后是范围的上限(高值)

例如,查询成绩在 80 到 90 间的学生学号

【指定集合】

谓词 INNOT IN用于查询属性值属于/不属于指定集合的元组

例如,查询 CS、IS 系的学生学号、姓名、所属系

【字符匹配】

谓词 LIKENOT LIKE 用于进行字符串匹配,其一般语法格式如下

1
[NOT] LIKE '<匹配串>' [ESCAPE '<换码字符>']

其含义是查找指定属性列值与 <匹配串> 相匹配的元组,当加上 NOT 短语后,则查找不匹配的元组

<匹配串> 可以是一个完整的字符串,也可以含有通配符百分号 % 与下划线 _

% 代表任意长度的字符串

例如,查询所有姓张的学生的学号、姓名、性别

_ 代表任意单个字符

例如,查询名字中第二个字为四的学生的学号、姓名、性别

ESCAPE 短语用于换码字符,这样使得匹配串中换码字符后的通配符不再具有通配符含义,转义为普通的 %_ 字符,

例如,查询 DB_Design 课程的课程号、学分

1
2
3
SELECT Cno, Ccredit
FROM course
WHERE Cname LIKE 'DB+_Design' ESCAPE '+'; /*换码字符为+*/

一般默认换码字符为反斜杠 \,此时无需使用 ESCAPE 短语

1
2
3
SELECT Cno, Ccredit
FROM course
WHERE Cname LIKE 'DB\_Design';

【涉及空值的查询】

当查询涉及到空值 NULL 时,一般用谓词 IS NULLIS NOT NULL 来判断是否为空值(不能用 =!=来判断是否为空值)

例如,查询不需先修课的课程的课程号、课程名

【多重条件查询】

逻辑运算符 ANDOR 用来连接多个查询条件,需要注意的是AND 的优先级高于 OR 的优先级,但可以使用圆括号 () 来改变优先级

例如,查询 CS 系年龄在 22 岁下的学生的学号、姓名

实际上,对于使用谓词 IN 的指定集合的查询,其本质是多个 OR 的缩写

例如,查询 CS、IS 系的学生学号、姓名、所属系

感谢您对我的支持,让我继续努力分享有用的技术与知识点!