1.简单
如何把结果按工资从高到低排序?
- AORDER BY salary DESC
- BGROUP BY salary DESC
- CSORT salary DOWN
- DORDER BY salary ASC
2.简单
哪条 SQL 语句用于从表中检索数据?
- ACREATE
- BSELECT
- CINSERT
- DUPDATE
3.简单
哪个聚合函数用于统计行数?
- AAVG
- BMAX
- CCOUNT
- DSUM
4.中等
一个表中有些行的 col 为 NULL。WHERE col = NULL 返回哪些行?
- A不返回任何行,因为比较结果是未知
- B只返回 col 为 NULL 的行,与 IS NULL 相同
- C返回表中的所有行
- D在每种数据库中都报错
5.中等
哪个查询返回每个部门的最高工资?
- ASELECT dept, MAX(salary) FROM emp ORDER BY dept
- BSELECT MAX(dept), salary FROM emp GROUP BY salary
- CSELECT dept, MAX(salary) FROM emp GROUP BY dept
- DSELECT dept, salary FROM emp WHERE salary = MAX(salary)
6.中等
为什么 SELECT price * 2 AS double_price FROM t WHERE double_price > 10 在大多数数据库中会失败?
- ASELECT 列表中不允许进行算术运算
- BWHERE 只能比较文本列
- C别名中不能包含下划线
- DWHERE 在 SELECT 列表之前计算,此时别名还不存在
7.困难
为什么在标准 SQL 中 SELECT dept, name, COUNT(*) FROM emp GROUP BY dept 是无效的?
- AGROUP BY 必须列出表的所有列
- Bname 既没有分组也没有聚合,因此每组没有唯一的值
- Cdept 必须出现在聚合函数中
- DCOUNT(*) 不能与 GROUP BY 一起使用
8.困难
事务 T1 锁定了行 A 并等待行 B,而 T2 锁定了行 B 并等待行 A。典型的 DBMS 会怎么做?
- A同时提交两个事务
- B让两个事务都等待,直到其中一个正常提交
- C把两个事务合并为一个
- D检测到死锁,并中止其中一个事务作为牺牲者
答案
- 1. A · ORDER BY salary DESC
- 2. B · SELECT
- 3. C · COUNT
- 4. A · 不返回任何行,因为比较结果是未知
- 5. C · SELECT dept, MAX(salary) FROM emp GROUP BY dept
- 6. D · WHERE 在 SELECT 列表之前计算,此时别名还不存在
- 7. B · name 既没有分组也没有聚合,因此每组没有唯一的值
- 8. D · 检测到死锁,并中止其中一个事务作为牺牲者
完整分步解答:请在 examproblems.com 上练习本主题。