数据库与 SQL练习卷(附答案)

免费可打印的数据库与 SQL练习卷:8 道题,从简单到考试水平,附答案。可打印或另存为 PDF。

教师请注意: 可免费打印、复印并在课堂上使用。每份新练习题都有新的数值和独立的答案。欢迎在课程页面添加指向 ExamProblems 的链接。

姓名: ____________________   日期: ____________

1.简单

什么是复合键?

  1. A允许重复值的键
  2. B由数据库生成的键
  3. C存储在单独表中的键
  4. D由两列或更多列组成的键
2.简单

什么是代理键?

  1. A由电子邮件地址等真实数据构成的键
  2. B没有业务含义的人工标识符,例如自增 id
  3. C只在视图中使用的键
  4. D引用另一个表的键
3.简单

在事务中,COMMIT 的作用是什么?

  1. A新建一个表
  2. B撤销自事务开始以来所做的全部更改
  3. C锁定整个数据库
  4. D使事务中的所有更改永久生效
4.中等

一个表中有些行的 col 为 NULL。WHERE col = NULL 返回哪些行?

  1. A不返回任何行,因为比较结果是未知
  2. B只返回 col 为 NULL 的行,与 IS NULL 相同
  3. C在每种数据库中都报错
  4. D返回表中的所有行
5.中等

为什么 SELECT price * 2 AS double_price FROM t WHERE double_price > 10 在大多数数据库中会失败?

  1. A别名中不能包含下划线
  2. BWHERE 只能比较文本列
  3. CSELECT 列表中不允许进行算术运算
  4. DWHERE 在 SELECT 列表之前计算,此时别名还不存在
6.中等

SELECT name, CASE WHEN grade >= 5.5 THEN 'pass' ELSE 'fail' END FROM results 返回什么?

  1. A每个姓名以及根据成绩得到的标签 'pass' 或 'fail'
  2. B及格和不及格的学生人数
  3. C报错,因为 SELECT 中不允许使用 CASE
  4. D只返回及格的学生
7.困难

表 enrolment(student_id, course_id, student_name, grade) 的键是 (student_id, course_id)。它违反了哪个范式?

  1. A都不违反,它满足 BCNF
  2. B第一范式,因为 grade 列的值不是原子的
  3. C第二范式,因为 student_name 只依赖于 student_id
  4. D只违反第三范式,因为 grade 依赖于 student_name
8.困难

SELECT day, SUM(amount) OVER (ORDER BY day) FROM sales 计算的是什么?

  1. A每天的平均金额
  2. B每天一行,只有当天的总额
  3. C每一行上所有金额的总和
  4. D按 day 排序的 amount 累计总和

答案

  1. 1. D · 由两列或更多列组成的键
  2. 2. B · 没有业务含义的人工标识符,例如自增 id
  3. 3. D · 使事务中的所有更改永久生效
  4. 4. A · 不返回任何行,因为比较结果是未知
  5. 5. D · WHERE 在 SELECT 列表之前计算,此时别名还不存在
  6. 6. A · 每个姓名以及根据成绩得到的标签 'pass' 或 'fail'
  7. 7. C · 第二范式,因为 student_name 只依赖于 student_id
  8. 8. D · 按 day 排序的 amount 累计总和

完整分步解答:请在 examproblems.com 上练习本主题。