数据库原理与应用 第 6 章 · 第二节
课程第 6 章第二节 六类条件比大小多重条件取反括号定范围范围之外定集合集合之外模糊查百分号下划线空值查空值 版式
第 6 章 数据表中的数据查询 · 第二节

条件查询

WHERE 子句的六类写法:比大小、多重条件、范围、集合、模糊、空值。
本 节 知 识 点
  1. 08WHERE 能写哪些条件
  2. 09最直接的一类条件
  3. 10AND 和 OR 把条件拼起来
  4. 11NOT 把条件整个翻过来
  5. 12运算符也有优先级
  6. 13BETWEEN 表示一个闭区间
  7. 14NOT BETWEEN 取区间以外
  8. 15IN 表示属于这几个值之一
  9. 16NOT IN 排除这几个值
  10. 17记不全名字时用 LIKE
  11. 18百分号配任意多个字
  12. 19下划线只顶一个字
  13. 20NULL 是不知道,不是零
  14. 21判断空值只有 IS NULL
08
第 6 章 · 第二节

WHERE 能写哪些条件

六类运算符,覆盖了日常八成以上的筛选需求。

第 8 页课件

关键术语

比较运算符comparison
等于、大于、小于这一组,六个符号
逻辑运算符logical
AND、OR、NOT,把几个条件拼起来
空值判断IS NULL
查一个字段有没有值,只能这样写

重 点

不等于有两种写法,标准 SQL 写尖括号那对,MySQL 也认叹号加等号。

09
第 6 章 · 第二节

最直接的一类条件

字段和常数比,或者字段和字段比。

第 9 页课件

重 点

字符型也能比大小,按字典序,所以字符串的条件要用单引号括住。

练一练

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

及以上包含 90 本身,用大于等于。而且是先大于后等于,反过来写是语法错。

上机做

上机一第 5 题 把两个例题跑一遍

10
第 6 章 · 第二节

AND 和 OR 把条件拼起来

AND 要两边都成立,OR 只要一边成立。

第 10 页课件

分清楚两个词的区别

写法什么时候留下这一行
A AND B两个都成立
A OR B至少一个成立

重 点

AND 还能写成两个与号,OR 还能写成两根竖线,效果完全一样。

想一想

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

11
第 6 章 · 第二节

NOT 把条件整个翻过来

NOT 放在条件前面,成立的变不成立。

第 11 页课件

重 点

NOT 括住一整段条件时,里面的 AND 会跟着变成 OR,这是德摩根律。

打个比方

年龄不在三十到四十之间,等于说要么不到三十,要么超过四十。

知道更多两种写法都对

NOT 写法更贴近口语,展开写法更贴近机器的判断过程。

12
第 6 章 · 第二节

运算符也有优先级

NOT 最高、AND 居中、OR 最低,括号可以改这个次序。

第 12 页课件

记牢它从高到低

  1. NOT 最先算
  2. AND 排中间
  3. OR 排最后
  4. 括号说了算

重 点

条件里同时出现 AND 和 OR 时,不加括号几乎一定会错,加上最省心。

上机做

上机一第 6 题 对比加不加括号

13
第 6 章 · 第二节

BETWEEN 表示一个闭区间

两头都包含,等于大于等于加上小于等于。

第 13 页课件

重 点

BETWEEN 后面必须小的在前大的在后,写反了一行也查不出来。

练一练

WHERE ct BETWEEN 30 AND 40 等价于下面哪个条件?
  1. Act > 30 AND ct < 40
  2. Bct >= 30 AND ct <= 40
  3. Cct >= 30 OR ct <= 40
答案 B

BETWEEN 是闭区间,两个端点都算在内,连接词是 AND 不是 OR。

14
第 6 章 · 第二节

NOT BETWEEN 取区间以外

两头之外的都要,端点本身不要。

第 14 页课件

重 点

展开写要用 OR,因为一个值不可能同时既小于下界又大于上界。

打个比方

像筛体温异常的人,要么低于三十六度,要么高于三十七度三,不可能两样都占。

想一想

为什么这里的等价写法用 OR 而不是 AND?

15
第 6 章 · 第二节

IN 表示属于这几个值之一

括号里列几个值,字段等于其中任意一个就留下。

第 15 页课件

重 点

IN 就是一串 OR 的简写,值一多,IN 比连写十个 OR 清楚得多。

打个比方

像发通知说三班五班来开会,报到的人只要属于这两个班就行。

知道更多括号里能放查询

这里的括号里还能放一整条 SELECT,那就是本章第三节的子查询。

16
第 6 章 · 第二节

NOT IN 排除这几个值

从上一题的结果里,把命中的那些行拿掉。

第 16 页课件

重 点

NOT IN 展开成不等号时连接词是 AND,不在集合里意味着每一个都不等于。

练一练

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

用 OR 连的话,任何一门课都满足其中一半,等于没筛,这是常见的错。

上机做

上机一第 7 题 IN 和 NOT IN

17
第 6 章 · 第二节

记不全名字时用 LIKE

两个通配符,百分号配任意多个字,下划线配一个。

第 17 页课件

试一试换个模式看看谁中

模式
课程名 cn
百分号配任意多个字,下划线只配一个字。

重 点

LIKE 左边的字段必须是字符型,数字列上写 LIKE 没有意义。

18
第 6 章 · 第二节

百分号配任意多个字

位置决定含义,包在两头是包含,只放右边是开头。

第 18 页课件

分清楚位置的差别

模式配上什么
%程序%任意位置有程序
程序%必须以程序开头
%程序必须以程序结尾

知道更多开头别用百分号

左边带百分号的模式用不上索引,大表上会一行一行扫过去。

19
第 6 章 · 第二节

下划线只顶一个字

一个下划线严格对应一个字符,不多不少。

第 19 页课件

重 点

下划线配汉字也是一个顶一个,不用管这个字在内部占几个字节。

练一练

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

第一个字任意,第二个字是据,后面随便。数据开头的课程名都符合。

20
第 6 章 · 第二节

NULL 是不知道,不是零

没填值的字段是 NULL,它不占空间,也不等于任何东西。

第 20 页课件

试一试四个条件,看谁被捞出来

条件写
选课表 sc(节选)
snocnoscore
s2c681.50
s2c7NULL
s4c6NULL
s7c562.00
挑一个条件,看哪几行会被捞出来。

重 点

缺考的成绩是 NULL,考了零分的成绩是 0,这两件事完全不同。

21
第 6 章 · 第二节

判断空值只有 IS NULL

问有没有值用 IS NULL,问有值的用 IS NOT NULL。

第 21 页课件

记牢它三句话记住

  1. 空值不参与比较
  2. 等号问不出来
  3. 只认 IS NULL

重 点

两条查询的结果合起来正好是全表,因为一个字段要么有值要么没值。

上机做

上机一第 8 题 亲手撞一次空值

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