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

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

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

姓名: ____________________   日期: ____________

1.简单

如何把结果按工资从高到低排序?

  1. AORDER BY salary DESC
  2. BGROUP BY salary DESC
  3. CSORT salary DOWN
  4. DORDER BY salary ASC
2.简单

哪条 SQL 语句用于从表中检索数据?

  1. ACREATE
  2. BSELECT
  3. CINSERT
  4. DUPDATE
3.简单

哪个聚合函数用于统计行数?

  1. AAVG
  2. BMAX
  3. CCOUNT
  4. DSUM
4.中等

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

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

哪个查询返回每个部门的最高工资?

  1. ASELECT dept, MAX(salary) FROM emp ORDER BY dept
  2. BSELECT MAX(dept), salary FROM emp GROUP BY salary
  3. CSELECT dept, MAX(salary) FROM emp GROUP BY dept
  4. DSELECT dept, salary FROM emp WHERE salary = MAX(salary)
6.中等

为什么 SELECT price * 2 AS double_price FROM t WHERE double_price > 10 在大多数数据库中会失败?

  1. ASELECT 列表中不允许进行算术运算
  2. BWHERE 只能比较文本列
  3. C别名中不能包含下划线
  4. DWHERE 在 SELECT 列表之前计算,此时别名还不存在
7.困难

为什么在标准 SQL 中 SELECT dept, name, COUNT(*) FROM emp GROUP BY dept 是无效的?

  1. AGROUP BY 必须列出表的所有列
  2. Bname 既没有分组也没有聚合,因此每组没有唯一的值
  3. Cdept 必须出现在聚合函数中
  4. DCOUNT(*) 不能与 GROUP BY 一起使用
8.困难

事务 T1 锁定了行 A 并等待行 B,而 T2 锁定了行 B 并等待行 A。典型的 DBMS 会怎么做?

  1. A同时提交两个事务
  2. B让两个事务都等待,直到其中一个正常提交
  3. C把两个事务合并为一个
  4. D检测到死锁,并中止其中一个事务作为牺牲者

答案

  1. 1. A · ORDER BY salary DESC
  2. 2. B · SELECT
  3. 3. C · COUNT
  4. 4. A · 不返回任何行,因为比较结果是未知
  5. 5. C · SELECT dept, MAX(salary) FROM emp GROUP BY dept
  6. 6. D · WHERE 在 SELECT 列表之前计算,此时别名还不存在
  7. 7. B · name 既没有分组也没有聚合,因此每组没有唯一的值
  8. 8. D · 检测到死锁,并中止其中一个事务作为牺牲者

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