1.简单
哪个关键字用于对查询结果排序?
- AARRANGE
- BORDER BY
- CGROUP BY
- DSORT
2.简单
在 PostgreSQL 和 MySQL 中,哪个子句只返回结果的前 10 行?
- ATOP ROWS 10
- BLIMIT 10
- CMAX 10
- DFIRST 10 ONLY
3.简单
什么是代理键?
- A引用另一个表的键
- B只在视图中使用的键
- C没有业务含义的人工标识符,例如自增 id
- D由电子邮件地址等真实数据构成的键
4.中等
SELECT name, CASE WHEN grade >= 5.5 THEN 'pass' ELSE 'fail' END FROM results 返回什么?
- A每个姓名以及根据成绩得到的标签 'pass' 或 'fail'
- B只返回及格的学生
- C报错,因为 SELECT 中不允许使用 CASE
- D及格和不及格的学生人数
5.中等
为什么 SELECT price * 2 AS double_price FROM t WHERE double_price > 10 在大多数数据库中会失败?
- AWHERE 只能比较文本列
- BWHERE 在 SELECT 列表之前计算,此时别名还不存在
- CSELECT 列表中不允许进行算术运算
- D别名中不能包含下划线
6.中等
在关系代数中,选择运算符(σ)对应于哪个 SQL 子句?
- AWHERE
- BGROUP BY
- CSELECT 列表
- DORDER BY
7.困难
查询 FROM customers c LEFT JOIN orders o ON o.customer_id = c.id WHERE o.status = 'paid' 意外地丢掉了没有订单的客户。为什么?
- ALEFT JOIN 从不保留不匹配的行
- B连接应该使用 USING 而不是 ON
- C对 o 的 WHERE 条件拒绝了用 NULL 填充的行,使其变成了内连接
- Dstatus 是保留字
8.困难
两个事务都读到 stock = 10,各自减 1 后写回结果,最终得到 9 而不是 8。这是哪种异常?
- A丢失更新
- B删除异常
- C脏读
- D幻读
答案
- 1. B · ORDER BY
- 2. B · LIMIT 10
- 3. C · 没有业务含义的人工标识符,例如自增 id
- 4. A · 每个姓名以及根据成绩得到的标签 'pass' 或 'fail'
- 5. B · WHERE 在 SELECT 列表之前计算,此时别名还不存在
- 6. A · WHERE
- 7. C · 对 o 的 WHERE 条件拒绝了用 NULL 填充的行,使其变成了内连接
- 8. A · 丢失更新
完整分步解答:请在 examproblems.com 上练习本主题。