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

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

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

姓名: ____________________   日期: ____________

1.简单

在 WHERE 子句中,哪个运算符用于简单的文本模式匹配?

  1. ACONTAINS
  2. BMATCH
  3. CSIMILAR
  4. DLIKE
2.简单

哪个 SQL 关键字用于去除结果中的重复行?

  1. ADISTINCT
  2. BSINGLE
  3. CUNIQUE
  4. DDIFFERENT
3.简单

在 SQL 中 NULL 表示什么?

  1. A缺失或未知的值
  2. B布尔值 false
  3. C空字符串
  4. D数值列中的数字零
4.中等

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

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

employees 表有一列 manager_id,引用另一名员工。如何在每名员工旁边列出其经理的姓名?

  1. A使用 UNION ALL 和 WHERE 过滤把该表与自身合并
  2. B用两个别名把 employees 表与它自身连接
  3. C只使用 GROUP BY manager_id
  4. D在磁盘上创建该表的第二个副本
6.中等

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

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

相关子查询(correlated subquery)是指:

  1. A引用外层查询的列,并针对外层的每一行进行求值的子查询
  2. B只在外层查询之前运行一次,并将结果缓存供每一行使用
  3. C只使用聚合函数的子查询
  4. D通过外键连接两个表的子查询
8.困难

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

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

答案

  1. 1. D · LIKE
  2. 2. A · DISTINCT
  3. 3. A · 缺失或未知的值
  4. 4. C · 行在物理上只能按一种顺序存储
  5. 5. B · 用两个别名把 employees 表与它自身连接
  6. 6. B · 不返回任何行,因为比较结果是未知
  7. 7. A · 引用外层查询的列,并针对外层的每一行进行求值的子查询
  8. 8. C · 大多数行都匹配,因此全表扫描比大量索引查找更便宜

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