1.简单
哪个子句在分组之前过滤行?
- AORDER BY
- BWHERE
- CHAVING
- DGROUP BY
2.简单
哪个聚合函数返回数值列的平均值?
- AMEDIAN
- BAVG
- CMEAN
- DSUM
3.简单
哪个关键字用于对查询结果排序?
- AGROUP BY
- BSORT
- CARRANGE
- DORDER BY
4.中等
关于 HAVING,下列哪项说法正确?
- A它在 SELECT 语句中必须写在 WHERE 之前
- B它可以使用聚合函数来过滤分组
- C它不能与 GROUP BY 一起使用
- D它用于对结果排序
5.中等
为什么 SELECT price * 2 AS double_price FROM t WHERE double_price > 10 在大多数数据库中会失败?
- A别名中不能包含下划线
- BWHERE 只能比较文本列
- CSELECT 列表中不允许进行算术运算
- DWHERE 在 SELECT 列表之前计算,此时别名还不存在
6.中等
哪个查询返回每个客户的订单数量?
- ASELECT DISTINCT COUNT(*) FROM orders
- BSELECT customer_id, COUNT(*) FROM orders ORDER BY customer_id
- CSELECT customer_id FROM orders WHERE COUNT(*) > 0
- DSELECT customer_id, COUNT(*) FROM orders GROUP BY customer_id
7.困难
为什么在标准 SQL 中 SELECT dept, name, COUNT(*) FROM emp GROUP BY dept 是无效的?
- ACOUNT(*) 不能与 GROUP BY 一起使用
- BGROUP BY 必须列出表的所有列
- Cdept 必须出现在聚合函数中
- Dname 既没有分组也没有聚合,因此每组没有唯一的值
8.困难
为什么带有 WHERE YEAR(order_date) = 2025 的查询可能不会使用 order_date 上的索引?
- A索引永远不能用于日期
- B对列应用函数会妨碍简单的索引范围查找
- CYEAR 不是合法的 SQL
- Dorder_date 上的索引只用于 ORDER BY 子句,绝不用于 WHERE
答案
- 1. B · WHERE
- 2. B · AVG
- 3. D · ORDER BY
- 4. B · 它可以使用聚合函数来过滤分组
- 5. D · WHERE 在 SELECT 列表之前计算,此时别名还不存在
- 6. D · SELECT customer_id, COUNT(*) FROM orders GROUP BY customer_id
- 7. D · name 既没有分组也没有聚合,因此每组没有唯一的值
- 8. B · 对列应用函数会妨碍简单的索引范围查找
完整分步解答:请在 examproblems.com 上练习本主题。