1.简单
什么是代理键?
- A由电子邮件地址等真实数据构成的键
- B引用另一个表的键
- C只在视图中使用的键
- D没有业务含义的人工标识符,例如自增 id
2.简单
哪条 SQL 语句向表中添加新行?
- AALTER
- BSELECT
- CUPDATE
- DINSERT
3.简单
INNER JOIN 返回:
- A仅返回两个表中值相匹配的行
- B两个表中的所有行
- C左表中的所有行,没有匹配时以 NULL 填充
- D不匹配的行
4.中等
什么是脏读?
- A读取另一个尚未提交的事务所写入的数据
- B两次读取同一行并得到相同的值
- C从损坏的磁盘读取数据
- D不带 WHERE 子句读取数据
5.中等
函数依赖 A → B 是什么意思?
- AB 的每个值都恰好对应 A 的一个值
- BA 的每个值都恰好对应 B 的一个值
- CA 是引用 B 的外键
- DA 和 B 都是主键
6.中等
哪个查询返回每个部门的最高工资?
- ASELECT dept, MAX(salary) FROM emp GROUP BY dept
- BSELECT dept, MAX(salary) FROM emp ORDER BY dept
- CSELECT MAX(dept), salary FROM emp GROUP BY salary
- DSELECT dept, salary FROM emp WHERE salary = MAX(salary)
7.困难
一个表有一百万行,布尔列 is_active 中有 95% 为 TRUE。为什么对于 WHERE is_active = TRUE,优化器可能不使用 is_active 上的索引?
- A索引把 TRUE 当作 NULL 处理
- B大多数行都匹配,因此全表扫描比大量索引查找更便宜
- C优化器从不在 WHERE 子句中使用索引
- D不能在布尔列上创建索引
8.困难
表 enrolment(student_id, course_id, student_name, grade) 的键是 (student_id, course_id)。它违反了哪个范式?
- A第一范式,因为 grade 列的值不是原子的
- B第二范式,因为 student_name 只依赖于 student_id
- C只违反第三范式,因为 grade 依赖于 student_name
- D都不违反,它满足 BCNF
答案
- 1. D · 没有业务含义的人工标识符,例如自增 id
- 2. D · INSERT
- 3. A · 仅返回两个表中值相匹配的行
- 4. A · 读取另一个尚未提交的事务所写入的数据
- 5. B · A 的每个值都恰好对应 B 的一个值
- 6. A · SELECT dept, MAX(salary) FROM emp GROUP BY dept
- 7. B · 大多数行都匹配,因此全表扫描比大量索引查找更便宜
- 8. B · 第二范式,因为 student_name 只依赖于 student_id
完整分步解答:请在 examproblems.com 上练习本主题。