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

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

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

姓名: ____________________   日期: ____________

1.简单

什么是候选键?

  1. A任何含有 NULL 值的列
  2. B等待成为外键的列
  3. C两个表共有的、用于关联其行的一组列
  4. D能唯一标识每一行的最小列集合
2.简单

什么是代理键?

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

哪种约束确保某列永远不能留空(NULL)?

  1. ACHECK NULL
  2. BUNIQUE
  3. CNOT NULL
  4. DDEFAULT
4.中等

LEFT JOIN 返回:

  1. A在两个表中都不匹配的行
  2. B左表的所有行以及右表中匹配的行,无匹配处填充 NULL
  3. C仅返回两个表中匹配的行
  4. D仅返回右表的所有行
5.中等

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

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

第三范式(3NF)消除了:

  1. A建立在不属于任何键的列上的冗余索引
  2. B原子值
  3. C非键属性之间的传递依赖
  4. D复合键
7.困难

下列查询返回什么:SELECT name FROM students WHERE grade > (SELECT AVG(grade) FROM students)?

  1. A成绩高于平均成绩的学生
  2. B报错,因为 WHERE 中不允许使用子查询
  3. C所有学生的平均成绩
  4. D仅成绩最高的学生
8.困难

表 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

答案

  1. 1. D · 能唯一标识每一行的最小列集合
  2. 2. D · 没有业务含义的人工标识符,例如自增 id
  3. 3. C · NOT NULL
  4. 4. B · 左表的所有行以及右表中匹配的行,无匹配处填充 NULL
  5. 5. B · 不返回任何行,因为比较结果是未知
  6. 6. C · 非键属性之间的传递依赖
  7. 7. A · 成绩高于平均成绩的学生
  8. 8. C · 第二范式,因为 student_name 只依赖于 student_id

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