1.简单
CREATE、ALTER 和 DROP 等语句属于 SQL 的哪一部分?
- A事务控制语言(TCL)
- B数据控制语言(DCL)
- C数据定义语言(DDL)
- D数据操纵语言(DML)
2.简单
哪条 SQL 语句用于从表中检索数据?
- AUPDATE
- BINSERT
- CSELECT
- DCREATE
3.简单
什么是代理键?
- A引用另一个表的键
- B只在视图中使用的键
- C没有业务含义的人工标识符,例如自增 id
- D由电子邮件地址等真实数据构成的键
4.中等
什么是脏读?
- A读取另一个尚未提交的事务所写入的数据
- B不带 WHERE 子句读取数据
- C从损坏的磁盘读取数据
- D两次读取同一行并得到相同的值
5.中等
一个表中有些行的 col 为 NULL。WHERE col = NULL 返回哪些行?
- A返回表中的所有行
- B在每种数据库中都报错
- C只返回 col 为 NULL 的行,与 IS NULL 相同
- D不返回任何行,因为比较结果是未知
6.中等
什么是 SQL 注入(SQL injection)?
- A用户输入改变 SQL 查询结构的一种攻击
- B添加索引的一种方式
- C一种数据库备份技术
- D用一条 INSERT 语句快速插入大量行的技术
7.困难
相关子查询(correlated subquery)是指:
- A通过外键连接两个表的子查询
- B只使用聚合函数的子查询
- C只在外层查询之前运行一次,并将结果缓存供每一行使用
- D引用外层查询的列,并针对外层的每一行进行求值的子查询
8.困难
为什么带有 WHERE YEAR(order_date) = 2025 的查询可能不会使用 order_date 上的索引?
- A索引永远不能用于日期
- BYEAR 不是合法的 SQL
- C对列应用函数会妨碍简单的索引范围查找
- Dorder_date 上的索引只用于 ORDER BY 子句,绝不用于 WHERE
答案
- 1. C · 数据定义语言(DDL)
- 2. C · SELECT
- 3. C · 没有业务含义的人工标识符,例如自增 id
- 4. A · 读取另一个尚未提交的事务所写入的数据
- 5. D · 不返回任何行,因为比较结果是未知
- 6. A · 用户输入改变 SQL 查询结构的一种攻击
- 7. D · 引用外层查询的列,并针对外层的每一行进行求值的子查询
- 8. C · 对列应用函数会妨碍简单的索引范围查找
完整分步解答:请在 examproblems.com 上练习本主题。