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

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

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

姓名: ____________________   日期: ____________

1.简单

GROUP BY 在查询中起什么作用?

  1. A把具有相同值的行放入同一组,从而按组计算聚合
  2. B删除含有 NULL 值的行
  3. C按公共列连接两个表
  4. D按字母顺序对结果行排序
2.简单

什么是候选键?

  1. A能唯一标识每一行的最小列集合
  2. B两个表共有的、用于关联其行的一组列
  3. C任何含有 NULL 值的列
  4. D等待成为外键的列
3.简单

列上的 UNIQUE 约束保证什么?

  1. A任何两行在该列中都没有相同的非 NULL 值
  2. B该列的值是排好序的
  3. C该列自动成为表的主键
  4. D该列在插入后不能被修改
4.中等

哪个查询返回 customers 表中不同城市的数量?

  1. ASELECT COUNT(city) FROM customers GROUP BY city
  2. BSELECT SUM(DISTINCT city) FROM customers
  3. CSELECT DISTINCT COUNT(city) FROM customers
  4. DSELECT COUNT(DISTINCT city) FROM customers
5.中等

为什么一个表只能有一个聚集索引?

  1. ASQL 标准禁止一个表上有多个索引
  2. B行在物理上只能按一种顺序存储
  3. C聚集索引只能建在主键上
  4. D聚集索引占用太多内存
6.中等

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

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

下列查询返回什么:SELECT name FROM students WHERE grade > (SELECT AVG(grade) FROM students)?

  1. A仅成绩最高的学生
  2. B所有学生的平均成绩
  3. C成绩高于平均成绩的学生
  4. D报错,因为 WHERE 中不允许使用子查询
8.困难

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

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

答案

  1. 1. A · 把具有相同值的行放入同一组,从而按组计算聚合
  2. 2. A · 能唯一标识每一行的最小列集合
  3. 3. A · 任何两行在该列中都没有相同的非 NULL 值
  4. 4. D · SELECT COUNT(DISTINCT city) FROM customers
  5. 5. B · 行在物理上只能按一种顺序存储
  6. 6. B · 不返回任何行,因为比较结果是未知
  7. 7. C · 成绩高于平均成绩的学生
  8. 8. A · 大多数行都匹配,因此全表扫描比大量索引查找更便宜

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