1.简单
哪条语句向已有的表中添加新列?
- AALTER TABLE
- BUPDATE TABLE
- CINSERT COLUMN
- DCREATE COLUMN
2.简单
哪种约束确保某列永远不能留空(NULL)?
- ACHECK NULL
- BUNIQUE
- CNOT NULL
- DDEFAULT
3.简单
什么是代理键?
- A没有业务含义的人工标识符,例如自增 id
- B由电子邮件地址等真实数据构成的键
- C只在视图中使用的键
- D引用另一个表的键
4.中等
ACID 中的 "A" 代表什么?
- A原子性(Atomicity)
- B聚合性(Aggregation)
- C准确性(Accuracy)
- D可用性(Availability)
5.中等
在关系代数中,选择运算符(σ)对应于哪个 SQL 子句?
- ASELECT 列表
- BWHERE
- CORDER BY
- DGROUP BY
6.中等
一个表中有些行的 col 为 NULL。WHERE col = NULL 返回哪些行?
- A不返回任何行,因为比较结果是未知
- B返回表中的所有行
- C只返回 col 为 NULL 的行,与 IS NULL 相同
- D在每种数据库中都报错
7.困难
EXPLAIN(或 PostgreSQL 中的 EXPLAIN ANALYZE)对一个查询显示什么?
- A查询中每个 SQL 关键字的含义
- B运行过该查询的用户列表
- C仅以关系代数表示法改写的查询
- D优化器选择的执行计划,例如扫描方式和连接方法
8.困难
在 customers LEFT JOIN orders 之后,为什么要用 COUNT(o.id) 而不是 COUNT(*) 来统计每个客户的订单数?
- ACOUNT(*) 会忽略含有 NULL 值的行
- B连接之后不允许使用 COUNT(*)
- C对没有订单的客户,COUNT(*) 会把用 NULL 填充的那一行计为 1
- DCOUNT(o.id) 只统计不同的客户
答案
- 1. A · ALTER TABLE
- 2. C · NOT NULL
- 3. A · 没有业务含义的人工标识符,例如自增 id
- 4. A · 原子性(Atomicity)
- 5. B · WHERE
- 6. A · 不返回任何行,因为比较结果是未知
- 7. D · 优化器选择的执行计划,例如扫描方式和连接方法
- 8. C · 对没有订单的客户,COUNT(*) 会把用 NULL 填充的那一行计为 1
完整分步解答:请在 examproblems.com 上练习本主题。