1.简单
WHERE country IN ('NL', 'BE', 'DE') 的作用是什么?
- A保留 country 等于列表中任一值的行
- B保留 country 值同时包含这三个代码的行
- C保留 country 不在列表中的行
- D按列表的顺序对行排序
2.简单
哪条语句向已有的表中添加新列?
- AINSERT COLUMN
- BUPDATE TABLE
- CCREATE COLUMN
- DALTER TABLE
3.简单
在 SQL 中 NULL 表示什么?
- A空字符串
- B数值列中的数字零
- C缺失或未知的值
- D布尔值 false
4.中等
什么是脏读?
- A从损坏的磁盘读取数据
- B不带 WHERE 子句读取数据
- C读取另一个尚未提交的事务所写入的数据
- D两次读取同一行并得到相同的值
5.中等
学生可以选修多门课程,课程也有多名学生。在表中如何对此建模?
- A用一个联结表,其中保存指向 students 和 courses 的外键
- B把 students 和 courses 合并成一个表
- C把课程 id 列表存储在一列中
- D在 students 表中加一个指向 courses 的外键列 course_id
6.中等
什么是 SQL 注入(SQL injection)?
- A用一条 INSERT 语句快速插入大量行的技术
- B一种数据库备份技术
- C用户输入改变 SQL 查询结构的一种攻击
- D添加索引的一种方式
7.困难
为什么在标准 SQL 中 SELECT dept, name, COUNT(*) FROM emp GROUP BY dept 是无效的?
- Aname 既没有分组也没有聚合,因此每组没有唯一的值
- BGROUP BY 必须列出表的所有列
- Cdept 必须出现在聚合函数中
- DCOUNT(*) 不能与 GROUP BY 一起使用
8.困难
两个事务都读到 stock = 10,各自减 1 后写回结果,最终得到 9 而不是 8。这是哪种异常?
- A脏读
- B删除异常
- C丢失更新
- D幻读
答案
- 1. A · 保留 country 等于列表中任一值的行
- 2. D · ALTER TABLE
- 3. C · 缺失或未知的值
- 4. C · 读取另一个尚未提交的事务所写入的数据
- 5. A · 用一个联结表,其中保存指向 students 和 courses 的外键
- 6. C · 用户输入改变 SQL 查询结构的一种攻击
- 7. A · name 既没有分组也没有聚合,因此每组没有唯一的值
- 8. C · 丢失更新
完整分步解答:请在 examproblems.com 上练习本主题。