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

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

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

姓名: ____________________   日期: ____________

1.简单

哪条语句向已有的表中添加新列?

  1. AALTER TABLE
  2. BUPDATE TABLE
  3. CINSERT COLUMN
  4. DCREATE COLUMN
2.简单

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

  1. ACHECK NULL
  2. BUNIQUE
  3. CNOT NULL
  4. DDEFAULT
3.简单

什么是代理键?

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

ACID 中的 "A" 代表什么?

  1. A原子性(Atomicity)
  2. B聚合性(Aggregation)
  3. C准确性(Accuracy)
  4. D可用性(Availability)
5.中等

在关系代数中,选择运算符(σ)对应于哪个 SQL 子句?

  1. ASELECT 列表
  2. BWHERE
  3. CORDER BY
  4. DGROUP BY
6.中等

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

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

EXPLAIN(或 PostgreSQL 中的 EXPLAIN ANALYZE)对一个查询显示什么?

  1. A查询中每个 SQL 关键字的含义
  2. B运行过该查询的用户列表
  3. C仅以关系代数表示法改写的查询
  4. D优化器选择的执行计划,例如扫描方式和连接方法
8.困难

在 customers LEFT JOIN orders 之后,为什么要用 COUNT(o.id) 而不是 COUNT(*) 来统计每个客户的订单数?

  1. ACOUNT(*) 会忽略含有 NULL 值的行
  2. B连接之后不允许使用 COUNT(*)
  3. C对没有订单的客户,COUNT(*) 会把用 NULL 填充的那一行计为 1
  4. DCOUNT(o.id) 只统计不同的客户

答案

  1. 1. A · ALTER TABLE
  2. 2. C · NOT NULL
  3. 3. A · 没有业务含义的人工标识符,例如自增 id
  4. 4. A · 原子性(Atomicity)
  5. 5. B · WHERE
  6. 6. A · 不返回任何行,因为比较结果是未知
  7. 7. D · 优化器选择的执行计划,例如扫描方式和连接方法
  8. 8. C · 对没有订单的客户,COUNT(*) 会把用 NULL 填充的那一行计为 1

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