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

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

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

姓名: ____________________   日期: ____________

1.简单

哪个关键字用于对查询结果排序?

  1. AARRANGE
  2. BORDER BY
  3. CGROUP BY
  4. DSORT
2.简单

在 PostgreSQL 和 MySQL 中,哪个子句只返回结果的前 10 行?

  1. ATOP ROWS 10
  2. BLIMIT 10
  3. CMAX 10
  4. DFIRST 10 ONLY
3.简单

什么是代理键?

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

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及格和不及格的学生人数
5.中等

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

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

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

  1. AWHERE
  2. BGROUP BY
  3. CSELECT 列表
  4. DORDER BY
7.困难

查询 FROM customers c LEFT JOIN orders o ON o.customer_id = c.id WHERE o.status = 'paid' 意外地丢掉了没有订单的客户。为什么?

  1. ALEFT JOIN 从不保留不匹配的行
  2. B连接应该使用 USING 而不是 ON
  3. C对 o 的 WHERE 条件拒绝了用 NULL 填充的行,使其变成了内连接
  4. Dstatus 是保留字
8.困难

两个事务都读到 stock = 10,各自减 1 后写回结果,最终得到 9 而不是 8。这是哪种异常?

  1. A丢失更新
  2. B删除异常
  3. C脏读
  4. D幻读

答案

  1. 1. B · ORDER BY
  2. 2. B · LIMIT 10
  3. 3. C · 没有业务含义的人工标识符,例如自增 id
  4. 4. A · 每个姓名以及根据成绩得到的标签 'pass' 或 'fail'
  5. 5. B · WHERE 在 SELECT 列表之前计算,此时别名还不存在
  6. 6. A · WHERE
  7. 7. C · 对 o 的 WHERE 条件拒绝了用 NULL 填充的行,使其变成了内连接
  8. 8. A · 丢失更新

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