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

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

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

姓名: ____________________   日期: ____________

1.简单

哪个子句在分组之前过滤行?

  1. AORDER BY
  2. BWHERE
  3. CHAVING
  4. DGROUP BY
2.简单

哪个聚合函数返回数值列的平均值?

  1. AMEDIAN
  2. BAVG
  3. CMEAN
  4. DSUM
3.简单

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

  1. AGROUP BY
  2. BSORT
  3. CARRANGE
  4. DORDER BY
4.中等

关于 HAVING,下列哪项说法正确?

  1. A它在 SELECT 语句中必须写在 WHERE 之前
  2. B它可以使用聚合函数来过滤分组
  3. C它不能与 GROUP BY 一起使用
  4. D它用于对结果排序
5.中等

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

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

哪个查询返回每个客户的订单数量?

  1. ASELECT DISTINCT COUNT(*) FROM orders
  2. BSELECT customer_id, COUNT(*) FROM orders ORDER BY customer_id
  3. CSELECT customer_id FROM orders WHERE COUNT(*) > 0
  4. DSELECT customer_id, COUNT(*) FROM orders GROUP BY customer_id
7.困难

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

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

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

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

答案

  1. 1. B · WHERE
  2. 2. B · AVG
  3. 3. D · ORDER BY
  4. 4. B · 它可以使用聚合函数来过滤分组
  5. 5. D · WHERE 在 SELECT 列表之前计算,此时别名还不存在
  6. 6. D · SELECT customer_id, COUNT(*) FROM orders GROUP BY customer_id
  7. 7. D · name 既没有分组也没有聚合,因此每组没有唯一的值
  8. 8. B · 对列应用函数会妨碍简单的索引范围查找

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