数据库与 SQL练习卷(附答案)

免费可打印的数据库与 SQL练习卷:8 道题,从简单到考试水平,附答案。可打印或另存为 PDF。

教师请注意: 可免费打印、复印并在课堂上使用。每份新练习题都有新的数值和独立的答案。欢迎在课程页面添加指向 ExamProblems 的链接。

姓名: ____________________   日期: ____________

1.简单

在事务中,COMMIT 的作用是什么?

  1. A锁定整个数据库
  2. B新建一个表
  3. C撤销自事务开始以来所做的全部更改
  4. D使事务中的所有更改永久生效
2.简单

哪个子句在分组之前过滤行?

  1. AGROUP BY
  2. BHAVING
  3. CWHERE
  4. DORDER BY
3.简单

哪条语句向已有的表中添加新列?

  1. AUPDATE TABLE
  2. BALTER TABLE
  3. CCREATE COLUMN
  4. DINSERT COLUMN
4.中等

一个表中有些行的 col 为 NULL。WHERE col = NULL 返回哪些行?

  1. A返回表中的所有行
  2. B在每种数据库中都报错
  3. C只返回 col 为 NULL 的行,与 IS NULL 相同
  4. D不返回任何行,因为比较结果是未知
5.中等

表 a 有 3 行,表 b 有 4 行。SELECT * FROM a CROSS JOIN b 返回多少行?

  1. A7
  2. B4
  3. C12
  4. D3
6.中等

对于电话号码为 NULL 的客户,SELECT COALESCE(phone, 'unknown') FROM customers 返回什么?

  1. A报错
  2. B'unknown'
  3. C空字符串
  4. DNULL
7.困难

一个表有一百万行,布尔列 is_active 中有 95% 为 TRUE。为什么对于 WHERE is_active = TRUE,优化器可能不使用 is_active 上的索引?

  1. A大多数行都匹配,因此全表扫描比大量索引查找更便宜
  2. B不能在布尔列上创建索引
  3. C优化器从不在 WHERE 子句中使用索引
  4. D索引把 TRUE 当作 NULL 处理
8.困难

在多版本并发控制(MVCC)下,读取者如何避免阻塞写入者?

  1. A读取者直接读取未提交的数据
  2. B读取者总是等到所有写入者都提交
  3. C读取者看到已提交行版本的一致快照,而写入者创建新版本
  4. D只要有读取者在活动,就不允许写入

答案

  1. 1. D · 使事务中的所有更改永久生效
  2. 2. C · WHERE
  3. 3. B · ALTER TABLE
  4. 4. D · 不返回任何行,因为比较结果是未知
  5. 5. C · 12
  6. 6. B · 'unknown'
  7. 7. A · 大多数行都匹配,因此全表扫描比大量索引查找更便宜
  8. 8. C · 读取者看到已提交行版本的一致快照,而写入者创建新版本

完整分步解答:请在 examproblems.com 上练习本主题。