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

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

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

姓名: ____________________   日期: ____________

1.简单

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

  1. AGROUP BY
  2. BHAVING
  3. CORDER BY
  4. DWHERE
2.简单

CREATE、ALTER 和 DROP 等语句属于 SQL 的哪一部分?

  1. A数据操纵语言(DML)
  2. B数据控制语言(DCL)
  3. C事务控制语言(TCL)
  4. D数据定义语言(DDL)
3.简单

什么是复合键?

  1. A由数据库生成的键
  2. B存储在单独表中的键
  3. C由两列或更多列组成的键
  4. D允许重复值的键
4.中等

一个表在每一行订单上都存储了客户地址。只修改其中一行的地址而不修改其他行,这是哪种情况的例子?

  1. A插入异常
  2. B删除异常
  3. C更新异常
  4. D幻读
5.中等

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

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

第二范式(2NF)消除了:

  1. A所有 NULL 值
  2. B非键列对复合键一部分的部分依赖
  3. C外键
  4. D非键列之间通过另一个非键列形成的传递依赖
7.困难

查询 FROM customers c LEFT JOIN orders o ON o.customer_id = c.id WHERE o.status = 'paid' 意外地丢掉了没有订单的客户。为什么?

  1. Astatus 是保留字
  2. B对 o 的 WHERE 条件拒绝了用 NULL 填充的行,使其变成了内连接
  3. CLEFT JOIN 从不保留不匹配的行
  4. D连接应该使用 USING 而不是 ON
8.困难

哪个窗口函数在每个分区内为行分配 1、2、3……且不出现并列?

  1. ADENSE_RANK()
  2. BRANK()
  3. CROW_NUMBER()
  4. DCOUNT()

答案

  1. 1. D · WHERE
  2. 2. D · 数据定义语言(DDL)
  3. 3. C · 由两列或更多列组成的键
  4. 4. C · 更新异常
  5. 5. B · SELECT COUNT(DISTINCT city) FROM customers
  6. 6. B · 非键列对复合键一部分的部分依赖
  7. 7. B · 对 o 的 WHERE 条件拒绝了用 NULL 填充的行,使其变成了内连接
  8. 8. C · ROW_NUMBER()

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