数据库原理与应用 第 6 章 · 第二节
课程 › 第 6 章 › 第二节 条件运算符比较大小多重条件优先级BETWEENINLIKENOT LIKE空值 版式
第 6 章 数据表中的数据查询 · 第二节

条件查询

WHERE 子句:比较大小、多重条件、范围、集合、部分匹配和空值
本 节 知 识 点
  1. 07条件查询的运算符
  2. 08比较大小
  3. 09多重条件:AND、OR、NOT
  4. 10运算符的优先级
  5. 11确定范围:BETWEEN 与 NOT BETWEEN
  6. 12确定集合:IN 与 NOT IN
  7. 13部分匹配:LIKE
  8. 14NOT LIKE 与下划线
  9. 15空值查询:IS NULL
07
第 6 章 · 第二节 · 课件第 8 页

条件查询的运算符

WHERE 后面写查询条件,常用的运算符有六类。

课件第 8 页

重 点

不等于可以写成 <> 或 !=,两种写法效果相同。

08
第 6 章 · 第二节 · 课件第 9 页

比较大小

字段与常数比较,字符串常数要加单引号。

课件第 9 页

练一练

查成绩在 90 分及以上的选课信息,WHERE 后面怎样写?
  1. Ascore > 90
  2. Bscore >= 90
  3. Cscore => 90
  4. Dscore >= '90分'
答案 B

及以上包括 90,用大于等于。大于等于要写成 >=,写成 => 会报语法错误。

实 验

实验 1-3 比较与多重条件

09
第 6 章 · 第二节 · 课件第 10、11 页合并重做

多重条件:AND、OR、NOT

AND 要求两个条件都成立,OR 只要一个成立,NOT 把条件取反。

6.1 单关系数据查询课件第 10、11 页合并

AND、OR、NOT:把几个条件组合起来

运算符什么时候成立
条件1 AND 条件2两个条件都成立
条件1 OR 条件2至少有一个条件成立
NOT 条件条件不成立时,NOT 条件成立
例 6-6 专业是计算机或数学的学生
SELECT *
FROM s
WHERE maj = '计算机' OR maj = '数学';
例 6-8 年龄不在 30 到 40 之间的教师
SELECT tno AS 教师号, tn AS 姓名, prof AS 职称
FROM t
WHERE NOT (age >= 30 AND age <= 40);

等价写法:WHERE age < 30 OR age > 40

教师号姓名职称
t2石丽讲师
t4赵礼教授
  • 在 MySQL 中,AND 也可以写成 &&,OR 也可以写成 ||,NOT 也可以写成 !

想一想

查计算机和数学两个专业的学生,用 AND 还是 OR?

实 验

实验 1-3 比较与多重条件

10
第 6 章 · 第二节 · 课件第 12 页

运算符的优先级

NOT 最先计算,其次是 AND,最后是 OR,括号可以改变顺序。

课件第 12 页

重 点

条件中同时有 AND 和 OR 时,给 OR 的部分加上括号,意思最清楚。

11
第 6 章 · 第二节 · 课件第 13、14 页合并重做

确定范围:BETWEEN 与 NOT BETWEEN

BETWEEN 查一个范围内的值,包括两端。

6.1 单关系数据查询课件第 13、14 页合并

BETWEEN … AND …:确定范围

BETWEEN a AND b 表示值在 a 和 b 之间,包括 a 和 b 本身。小的值写在前面,大的值写在后面。
例 6-10 课时在 30 到 40 之间的课程
SELECT cno, cn, ct
FROM c
WHERE ct BETWEEN 30 AND 40;

等价于 WHERE ct >= 30 AND ct <= 40

cnocnct
c1Java程序设计40
c6数据挖掘32
c8控制理论32
例 6-11 课时不在 30 到 40 之间的课程
SELECT *
FROM c
WHERE ct NOT BETWEEN 30 AND 40;

等价于 WHERE ct < 30 OR ct > 40

cnocnct
c2程序设计基础48
c3线性代数48
c4数据结构64
c5数据库系统56
c7高等数学60

练一练

WHERE ct BETWEEN 40 AND 30 能查出课时 32 的课程吗?
  1. A能
  2. B不能,小的值要写在前面
  3. C会报错
答案 B

BETWEEN 40 AND 30 等价于 ct >= 40 AND ct <= 30,没有值能同时满足,一行也查不出来。

实 验

实验 1-4 范围和集合

12
第 6 章 · 第二节 · 课件第 15、16 页合并重做

确定集合:IN 与 NOT IN

IN 查等于列表中某一个值的行,NOT IN 查都不相等的行。

6.1 单关系数据查询课件第 15、16 页合并

IN、NOT IN:确定集合

字段 IN (值1, 值2, …) 表示字段的值等于括号中的任意一个。NOT IN 表示不等于其中任何一个。
例 6-12 课程号为 c4 或 c6 的选课信息
SELECT sno, cno, score
FROM sc
WHERE cno IN ('c4', 'c6');

等价于 WHERE cno = 'c4' OR cno = 'c6'

snocnoscore
s2c470.00
s3c485.00
s2c681.50
s4c6NULL
例 6-13 除 c4 和 c6 之外的选课信息
SELECT sno, cno, score
FROM sc
WHERE cno NOT IN ('c4', 'c6');

等价于 WHERE cno <> 'c4' AND cno <> 'c6'

  • 结果是选课表中其余的 16 条记录,也就是去掉例 6-12 那 4 条

练一练

WHERE cno NOT IN ('c4','c6') 的等价写法是哪一个?
  1. Acno <> 'c4' OR cno <> 'c6'
  2. Bcno <> 'c4' AND cno <> 'c6'
答案 B

不在集合中,就是和每一个都不相等,要用 AND。用 OR 的话任何课程号都满足。

实 验

实验 1-4 范围和集合

13
第 6 章 · 第二节 · 课件第 17、18 页合并重做

部分匹配:LIKE

记不全名称时,用 LIKE 和通配符进行部分匹配。

6.1 单关系数据查询课件第 17、18 页合并

LIKE:部分匹配查询

字段名 [NOT] LIKE '模式'
模式匹配什么例如
'%程序%'任意位置含有“程序”Java程序设计、程序设计基础
'程序%'以“程序”开头程序设计基础
'%理论'以“理论”结尾控制理论
'_据%'第二个字是“据”数据结构、数据库系统、数据挖掘
  • % 代表任意多个字符,也可以是 0 个。_(下划线)代表恰好一个字符,一个汉字算一个字符
例 6-14 课程名中含有“程序”
SELECT cno AS 课程号, cn AS 课程名, ct AS 课时
FROM c
WHERE cn LIKE '%程序%';
例 6-15 课程名以“程序”开头
SELECT cno AS 课程号, cn AS 课程名, ct AS 课时
FROM c
WHERE cn LIKE '程序%';

MySQL 的 LIKE 只有 % 和 _ 两个通配符。

试一试换一个模式,看匹配哪些课程

模式
课程表 c 的课程名
% 匹配任意多个字符,_ 只匹配一个字符。

实 验

实验 1-5 部分匹配和空值

14
第 6 章 · 第二节 · 课件第 19 页

NOT LIKE 与下划线

NOT LIKE 查不匹配的行,下划线只匹配一个字符。

课件第 19 页

练一练

模式 '_据%' 能匹配下面哪一门课?
  1. A数据结构
  2. B数据库系统
  3. C以上两门都能
答案 C

第一个字任意,第二个字是“据”,后面任意。两门课都符合。

15
第 6 章 · 第二节 · 课件第 20、21 页

空值查询:IS NULL

空值只能用 IS NULL 或 IS NOT NULL 来判断。

课件第 21 页

试一试四个条件,各查出哪几行

条件
选课表 sc(节选)
snocnoscore
s2c681.50
s2c7NULL
s4c6NULL
s7c562.00
点一个条件,看哪几行满足。

重 点

空值不等于 0。没参加考试的成绩是 NULL,考了 0 分的成绩是 0。

实 验

实验 1-5 部分匹配和空值

保山学院·人工智能教研室·曹鼎鼎