1.简单
UNION 对两个 SELECT 查询的结果做什么?
- A只保留同时出现在两者中的行
- B按某个键把它们左右并排连接
- C只保留出现在第一个查询中而不在第二个查询中的行
- D把它们合并为一个结果并去除重复行
2.简单
哪种约束确保某列永远不能留空(NULL)?
- ADEFAULT
- BUNIQUE
- CNOT NULL
- DCHECK NULL
3.简单
WHERE price BETWEEN 10 AND 20 会选出哪些行?
- Aprice 在 10 到 20 范围之外的行
- Bprice 大于 10 且小于 20 的行,不包括 10 和 20
- Cprice 在 10 到 20 之间的行,包括 10 和 20
- D只有 price 等于 10 或 20 的行
4.中等
一个表在每一行订单上都存储了客户地址。只修改其中一行的地址而不修改其他行,这是哪种情况的例子?
- A更新异常
- B删除异常
- C插入异常
- D幻读
5.中等
orders 表有 5 行,每行都引用一个已存在的客户。customers 表有 3 行。在 customer_id 上做 INNER JOIN 返回多少行?
- A3
- B8
- C5
- D15
6.中等
LEFT JOIN 返回:
- A左表的所有行以及右表中匹配的行,无匹配处填充 NULL
- B仅返回右表的所有行
- C仅返回两个表中匹配的行
- D在两个表中都不匹配的行
7.困难
为什么带有 WHERE YEAR(order_date) = 2025 的查询可能不会使用 order_date 上的索引?
- Aorder_date 上的索引只用于 ORDER BY 子句,绝不用于 WHERE
- B对列应用函数会妨碍简单的索引范围查找
- C索引永远不能用于日期
- DYEAR 不是合法的 SQL
8.困难
为什么在标准 SQL 中 SELECT dept, name, COUNT(*) FROM emp GROUP BY dept 是无效的?
- ACOUNT(*) 不能与 GROUP BY 一起使用
- Bname 既没有分组也没有聚合,因此每组没有唯一的值
- Cdept 必须出现在聚合函数中
- DGROUP BY 必须列出表的所有列
答案
- 1. D · 把它们合并为一个结果并去除重复行
- 2. C · NOT NULL
- 3. C · price 在 10 到 20 之间的行,包括 10 和 20
- 4. A · 更新异常
- 5. C · 5
- 6. A · 左表的所有行以及右表中匹配的行,无匹配处填充 NULL
- 7. B · 对列应用函数会妨碍简单的索引范围查找
- 8. B · name 既没有分组也没有聚合,因此每组没有唯一的值
完整分步解答:请在 examproblems.com 上练习本主题。