1.简单
什么是复合键?
- A允许重复值的键
- B由数据库生成的键
- C存储在单独表中的键
- D由两列或更多列组成的键
2.简单
什么是代理键?
- A由电子邮件地址等真实数据构成的键
- B没有业务含义的人工标识符,例如自增 id
- C只在视图中使用的键
- D引用另一个表的键
3.简单
在事务中,COMMIT 的作用是什么?
- A新建一个表
- B撤销自事务开始以来所做的全部更改
- C锁定整个数据库
- D使事务中的所有更改永久生效
4.中等
一个表中有些行的 col 为 NULL。WHERE col = NULL 返回哪些行?
- A不返回任何行,因为比较结果是未知
- B只返回 col 为 NULL 的行,与 IS NULL 相同
- C在每种数据库中都报错
- D返回表中的所有行
5.中等
为什么 SELECT price * 2 AS double_price FROM t WHERE double_price > 10 在大多数数据库中会失败?
- A别名中不能包含下划线
- BWHERE 只能比较文本列
- CSELECT 列表中不允许进行算术运算
- DWHERE 在 SELECT 列表之前计算,此时别名还不存在
6.中等
SELECT name, CASE WHEN grade >= 5.5 THEN 'pass' ELSE 'fail' END FROM results 返回什么?
- A每个姓名以及根据成绩得到的标签 'pass' 或 'fail'
- B及格和不及格的学生人数
- C报错,因为 SELECT 中不允许使用 CASE
- D只返回及格的学生
7.困难
表 enrolment(student_id, course_id, student_name, grade) 的键是 (student_id, course_id)。它违反了哪个范式?
- A都不违反,它满足 BCNF
- B第一范式,因为 grade 列的值不是原子的
- C第二范式,因为 student_name 只依赖于 student_id
- D只违反第三范式,因为 grade 依赖于 student_name
8.困难
SELECT day, SUM(amount) OVER (ORDER BY day) FROM sales 计算的是什么?
- A每天的平均金额
- B每天一行,只有当天的总额
- C每一行上所有金额的总和
- D按 day 排序的 amount 累计总和
答案
- 1. D · 由两列或更多列组成的键
- 2. B · 没有业务含义的人工标识符,例如自增 id
- 3. D · 使事务中的所有更改永久生效
- 4. A · 不返回任何行,因为比较结果是未知
- 5. D · WHERE 在 SELECT 列表之前计算,此时别名还不存在
- 6. A · 每个姓名以及根据成绩得到的标签 'pass' 或 'fail'
- 7. C · 第二范式,因为 student_name 只依赖于 student_id
- 8. D · 按 day 排序的 amount 累计总和
完整分步解答:请在 examproblems.com 上练习本主题。