1.简单
什么是代理键?
- A只在视图中使用的键
- B引用另一个表的键
- C由电子邮件地址等真实数据构成的键
- D没有业务含义的人工标识符,例如自增 id
2.简单
CROSS JOIN 返回什么?
- A只有不匹配的行
- B只有在共享键列上匹配的行
- C只有第一个表的行
- D两个表中行的所有组合
3.简单
CREATE、ALTER 和 DROP 等语句属于 SQL 的哪一部分?
- A事务控制语言(TCL)
- B数据控制语言(DCL)
- C数据操纵语言(DML)
- D数据定义语言(DDL)
4.中等
什么是 SQL 注入(SQL injection)?
- A添加索引的一种方式
- B一种数据库备份技术
- C用户输入改变 SQL 查询结构的一种攻击
- D用一条 INSERT 语句快速插入大量行的技术
5.中等
EXCEPT(在 Oracle 中称为 MINUS)返回什么?
- A两个查询中都出现的行
- B第一个查询中不出现在第二个查询中的行
- C第二个查询中不出现在第一个查询中的行
- D两个查询的所有行,去除重复
6.中等
哪个查询返回每个客户的订单数量?
- ASELECT customer_id, COUNT(*) FROM orders ORDER BY customer_id
- BSELECT customer_id, COUNT(*) FROM orders GROUP BY customer_id
- CSELECT customer_id FROM orders WHERE COUNT(*) > 0
- DSELECT DISTINCT COUNT(*) FROM orders
7.困难
把 R 分解为 R1 和 R2 在什么情况下保证是无损的?
- AR1 和 R2 的公共属性构成 R1 或 R2 的超键时
- BR1 和 R2 的列数相同时
- CR 的每个属性都同时出现在 R1 和 R2 中时
- DR1 和 R2 没有公共属性时
8.困难
为什么在标准 SQL 中 SELECT dept, name, COUNT(*) FROM emp GROUP BY dept 是无效的?
- Aname 既没有分组也没有聚合,因此每组没有唯一的值
- Bdept 必须出现在聚合函数中
- CGROUP BY 必须列出表的所有列
- DCOUNT(*) 不能与 GROUP BY 一起使用
答案
- 1. D · 没有业务含义的人工标识符,例如自增 id
- 2. D · 两个表中行的所有组合
- 3. D · 数据定义语言(DDL)
- 4. C · 用户输入改变 SQL 查询结构的一种攻击
- 5. B · 第一个查询中不出现在第二个查询中的行
- 6. B · SELECT customer_id, COUNT(*) FROM orders GROUP BY customer_id
- 7. A · R1 和 R2 的公共属性构成 R1 或 R2 的超键时
- 8. A · name 既没有分组也没有聚合,因此每组没有唯一的值
完整分步解答:请在 examproblems.com 上练习本主题。