数据库与 SQL练习卷(附答案)
免费可打印的数据库与 SQL练习卷:8 道题,从简单到考试水平,附答案。可打印或另存为 PDF。
教师请注意: 可免费打印、复印并在课堂上使用。每份新练习题都有新的数值和独立的答案。欢迎在课程页面添加指向 ExamProblems 的链接。
姓名: ____________________ 日期: ____________
1.简单
GROUP BY 在查询中起什么作用?
- A把具有相同值的行放入同一组,从而按组计算聚合
- B删除含有 NULL 值的行
- C按公共列连接两个表
- D按字母顺序对结果行排序
2.简单
什么是候选键?
- A能唯一标识每一行的最小列集合
- B两个表共有的、用于关联其行的一组列
- C任何含有 NULL 值的列
- D等待成为外键的列
3.简单
列上的 UNIQUE 约束保证什么?
- A任何两行在该列中都没有相同的非 NULL 值
- B该列的值是排好序的
- C该列自动成为表的主键
- D该列在插入后不能被修改
4.中等
哪个查询返回 customers 表中不同城市的数量?
- ASELECT COUNT(city) FROM customers GROUP BY city
- BSELECT SUM(DISTINCT city) FROM customers
- CSELECT DISTINCT COUNT(city) FROM customers
- DSELECT COUNT(DISTINCT city) FROM customers
5.中等
为什么一个表只能有一个聚集索引?
- ASQL 标准禁止一个表上有多个索引
- B行在物理上只能按一种顺序存储
- C聚集索引只能建在主键上
- D聚集索引占用太多内存
6.中等
一个表中有些行的 col 为 NULL。WHERE col = NULL 返回哪些行?
- A返回表中的所有行
- B不返回任何行,因为比较结果是未知
- C在每种数据库中都报错
- D只返回 col 为 NULL 的行,与 IS NULL 相同
7.困难
下列查询返回什么:SELECT name FROM students WHERE grade > (SELECT AVG(grade) FROM students)?
- A仅成绩最高的学生
- B所有学生的平均成绩
- C成绩高于平均成绩的学生
- D报错,因为 WHERE 中不允许使用子查询
8.困难
一个表有一百万行,布尔列 is_active 中有 95% 为 TRUE。为什么对于 WHERE is_active = TRUE,优化器可能不使用 is_active 上的索引?
- A大多数行都匹配,因此全表扫描比大量索引查找更便宜
- B不能在布尔列上创建索引
- C索引把 TRUE 当作 NULL 处理
- D优化器从不在 WHERE 子句中使用索引
答案
- 1. A · 把具有相同值的行放入同一组,从而按组计算聚合
- 2. A · 能唯一标识每一行的最小列集合
- 3. A · 任何两行在该列中都没有相同的非 NULL 值
- 4. D · SELECT COUNT(DISTINCT city) FROM customers
- 5. B · 行在物理上只能按一种顺序存储
- 6. B · 不返回任何行,因为比较结果是未知
- 7. C · 成绩高于平均成绩的学生
- 8. A · 大多数行都匹配,因此全表扫描比大量索引查找更便宜
完整分步解答:请在 examproblems.com 上练习本主题。