数据库原理与应用 第 6 章 · 上机一
课程第 6 章上机一 认认门看数据去重别名限行比大小括号范围集合模糊空值连起来 版式
第 6 章 数据表中的数据查询 · 上机一

单表查询

八道题,从看清一张表开始,一直做到六类 WHERE 条件全部写过一遍。
已完成 0 / 8
本 次 上 机 题 目
  1. 01先认认这个库里有什么
  2. 02把三张表的数据都看一遍
  3. 03DISTINCT 加不加,差在哪
  4. 04起中文别名,再限定行数
  5. 05两个比较条件
  6. 06AND 和 OR 混着写,括号不能省
  7. 07BETWEEN 与 IN 的两种写法
  8. 08LIKE 的通配符,和空值的坑
  9. 连续练习:一口气写完六条
01
第 6 章 · 上机一

先认认这个库里有什么

五张表,八门课八个学生六位教师,先看清楚再动手查。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

查询之前先 DESC 一眼,字段名拼错是查询报错里最常见的一种。

知道更多

这台终端是真解释器,敲什么真算什么,改动会一直留到你按重置为止。

想一想

选课表 sc 的主键是哪几列?

02
第 6 章 · 上机一

把三张表的数据都看一遍

心里有数才知道查出来的结果对不对。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

星号适合临时看看,正式程序里要把字段名一个个写出来。

练一练

SELECT cno, cn, ct FROM c 和 SELECT * FROM c 的结果一样吗?
  1. A完全一样
  2. B列的顺序不同
  3. C行数不同
答案 A

把全部字段按原顺序列出来,和写星号得到的结果一模一样。

03
第 6 章 · 上机一

DISTINCT 加不加,差在哪

授课表里九条记录,涉及的教师只有五位。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

两条一起跑,行数从九变成五,DISTINCT 干的就是这件事。

想一想

为什么关系代数会自动去重,SQL 却不会?

04
第 6 章 · 上机一

起中文别名,再限定行数

别名只改结果的表头,LIMIT 只砍结果的行数。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

最后那条 DESC 是用来验证的,表里的字段名一个字也没被别名改掉。

知道更多

第二条把 sn 写在 sno 前面,结果里的列序就跟着变了。

05
第 6 章 · 上机一

两个比较条件

一个比数字,一个比字符串,字符串要用单引号括住。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

第三条故意不加引号,机器会当成字段名去找,报 1054 未知字段。

练一练

字符串常量不加引号时,MySQL 把它当成什么?
  1. A空字符串
  2. B字段名
  3. C自动补上引号
答案 B

不加引号的一串字在 SQL 里是标识符,机器会去表里找这个字段。

06
第 6 章 · 上机一

AND 和 OR 混着写,括号不能省

同一批条件,加不加括号查出来的行数不一样。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

最后两条只差一对括号,行数就不一样,因为 AND 比 OR 先算。

想一想

去掉括号之后,多出来的那一行为什么会被留下?

07
第 6 章 · 上机一

BETWEEN 与 IN 的两种写法

每一题都跑等价的两条,看结果是不是完全一致。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

最后一条是常见的错,用 OR 连不等号等于没筛,二十行原样返回。

练一练

NOT IN 展开成不等号时,中间该用哪个连接词?
  1. AAND
  2. BOR
答案 A

不在集合里意味着每一个值都不等于,所以是 AND。

08
第 6 章 · 上机一

LIKE 的通配符,和空值的坑

最后两条一个能查出来一个查不出来,差别就在 IS。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

最后一条不报错,安安静静返回零行,这比报错更难发现。

记牢它空值三句话

  1. 不等于任何值
  2. 也不等于空值
  3. 只认 IS NULL

想一想

空值查询为什么必须用 IS 而不能用等号?

第 6 章 · 上机一

连续练习:一口气写完六条

不看上面的答案,自己从头写一遍这六个查询。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

六条覆盖了这一次上机的全部内容,能不看提示写完就算过关。

知道更多

最后一条用到了下一节才讲的 ORDER BY,先照着敲,看看它排出了什么。

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