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

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

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

姓名: ____________________   日期: ____________

1.简单

UNION 对两个 SELECT 查询的结果做什么?

  1. A只保留同时出现在两者中的行
  2. B按某个键把它们左右并排连接
  3. C只保留出现在第一个查询中而不在第二个查询中的行
  4. D把它们合并为一个结果并去除重复行
2.简单

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

  1. ADEFAULT
  2. BUNIQUE
  3. CNOT NULL
  4. DCHECK NULL
3.简单

WHERE price BETWEEN 10 AND 20 会选出哪些行?

  1. Aprice 在 10 到 20 范围之外的行
  2. Bprice 大于 10 且小于 20 的行,不包括 10 和 20
  3. Cprice 在 10 到 20 之间的行,包括 10 和 20
  4. D只有 price 等于 10 或 20 的行
4.中等

一个表在每一行订单上都存储了客户地址。只修改其中一行的地址而不修改其他行,这是哪种情况的例子?

  1. A更新异常
  2. B删除异常
  3. C插入异常
  4. D幻读
5.中等

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

  1. A3
  2. B8
  3. C5
  4. D15
6.中等

LEFT JOIN 返回:

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

为什么带有 WHERE YEAR(order_date) = 2025 的查询可能不会使用 order_date 上的索引?

  1. Aorder_date 上的索引只用于 ORDER BY 子句,绝不用于 WHERE
  2. B对列应用函数会妨碍简单的索引范围查找
  3. C索引永远不能用于日期
  4. DYEAR 不是合法的 SQL
8.困难

为什么在标准 SQL 中 SELECT dept, name, COUNT(*) FROM emp GROUP BY dept 是无效的?

  1. ACOUNT(*) 不能与 GROUP BY 一起使用
  2. Bname 既没有分组也没有聚合,因此每组没有唯一的值
  3. Cdept 必须出现在聚合函数中
  4. DGROUP BY 必须列出表的所有列

答案

  1. 1. D · 把它们合并为一个结果并去除重复行
  2. 2. C · NOT NULL
  3. 3. C · price 在 10 到 20 之间的行,包括 10 和 20
  4. 4. A · 更新异常
  5. 5. C · 5
  6. 6. A · 左表的所有行以及右表中匹配的行,无匹配处填充 NULL
  7. 7. B · 对列应用函数会妨碍简单的索引范围查找
  8. 8. B · name 既没有分组也没有聚合,因此每组没有唯一的值

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