1.简单
什么是候选键?
- A任何含有 NULL 值的列
- B等待成为外键的列
- C两个表共有的、用于关联其行的一组列
- D能唯一标识每一行的最小列集合
2.简单
什么是代理键?
- A引用另一个表的键
- B由电子邮件地址等真实数据构成的键
- C只在视图中使用的键
- D没有业务含义的人工标识符,例如自增 id
3.简单
哪种约束确保某列永远不能留空(NULL)?
- ACHECK NULL
- BUNIQUE
- CNOT NULL
- DDEFAULT
4.中等
LEFT JOIN 返回:
- A在两个表中都不匹配的行
- B左表的所有行以及右表中匹配的行,无匹配处填充 NULL
- C仅返回两个表中匹配的行
- D仅返回右表的所有行
5.中等
一个表中有些行的 col 为 NULL。WHERE col = NULL 返回哪些行?
- A在每种数据库中都报错
- B不返回任何行,因为比较结果是未知
- C返回表中的所有行
- D只返回 col 为 NULL 的行,与 IS NULL 相同
6.中等
第三范式(3NF)消除了:
- A建立在不属于任何键的列上的冗余索引
- B原子值
- C非键属性之间的传递依赖
- D复合键
7.困难
下列查询返回什么:SELECT name FROM students WHERE grade > (SELECT AVG(grade) FROM students)?
- A成绩高于平均成绩的学生
- B报错,因为 WHERE 中不允许使用子查询
- C所有学生的平均成绩
- D仅成绩最高的学生
8.困难
表 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
答案
- 1. D · 能唯一标识每一行的最小列集合
- 2. D · 没有业务含义的人工标识符,例如自增 id
- 3. C · NOT NULL
- 4. B · 左表的所有行以及右表中匹配的行,无匹配处填充 NULL
- 5. B · 不返回任何行,因为比较结果是未知
- 6. C · 非键属性之间的传递依赖
- 7. A · 成绩高于平均成绩的学生
- 8. C · 第二范式,因为 student_name 只依赖于 student_id
完整分步解答:请在 examproblems.com 上练习本主题。