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

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

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

姓名: ____________________   日期: ____________

1.简单

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

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

哪条语句删除整个表,包括其结构?

  1. ADELETE FROM
  2. BTRUNCATE ROWS
  3. CDROP TABLE
  4. DREMOVE TABLE
3.简单

CROSS JOIN 返回什么?

  1. A两个表中行的所有组合
  2. B只有在共享键列上匹配的行
  3. C只有第一个表的行
  4. D只有不匹配的行
4.中等

orders 表有 5 行,每行都引用一个已存在的客户。customers 表有 3 行。在 customer_id 上做 INNER JOIN 返回多少行?

  1. A8
  2. B5
  3. C3
  4. D15
5.中等

哪个查询列出从未下过订单的客户?

  1. ASELECT c.name FROM customers c LEFT JOIN orders o ON o.customer_id = c.id WHERE o.id IS NOT NULL
  2. BSELECT c.name FROM customers c INNER JOIN orders o ON o.customer_id = c.id WHERE o.id IS NULL
  3. CSELECT c.name FROM customers c LEFT JOIN orders o ON o.customer_id = c.id WHERE o.id = NULL
  4. DSELECT c.name FROM customers c LEFT JOIN orders o ON o.customer_id = c.id WHERE o.id IS NULL
6.中等

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

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

对于一个查询,什么是覆盖索引?

  1. A包含查询所需全部列的索引,因此不必读取表本身
  2. B只建在主键上的索引
  3. C覆盖每个表每一列的索引
  4. D每晚重建一次的索引
8.困难

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

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

答案

  1. 1. C · 使事务中的所有更改永久生效
  2. 2. C · DROP TABLE
  3. 3. A · 两个表中行的所有组合
  4. 4. B · 5
  5. 5. D · SELECT c.name FROM customers c LEFT JOIN orders o ON o.customer_id = c.id WHERE o.id IS NULL
  6. 6. C · 非键属性之间的传递依赖
  7. 7. A · 包含查询所需全部列的索引,因此不必读取表本身
  8. 8. B · 对 o 的 WHERE 条件拒绝了用 NULL 填充的行,使其变成了内连接

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