7.9 自测题答案
(1) 答案为B。投影是对从表返回的列的限制。
A、C和D不正确。排除A,因为问题与数据的重复、独特性或者唯一性无关。C错误地从不存在的表DEPT中选择不存在的列DEPT_NAME和LOC_ID。D只返回被请求的列之一:DEPARTMENT_NAME。除了从DEPARTMENTS表投影LOCATION_ID列,它还试图将DEPARTMENT_NAME列的别名设为LOCATION_ID。
(2) 答案为A和C。数据类型为NUMBER(8,2)的列可以存储至多8位;其中,至多有两位数字在小数点右边。虽然A和C是正确答案,但请注意,因为问题的措词是否定的,所以不允许在这样的列中存储这些值。不允许存储A和C这样的值,因为它们分别包含8个和7个整数位,但数据类型被限制为6个整数位和两个小数位。
B、D和E不正确。B、D和E可以存储在这种数据类型中,因此,不是这个问题的正确答案。D说明只要整数部分的位数不超过6位,没有小数部分的数字也是该列的合法值。
(3) 答案为B和E。两个日期值之间的算术结果表示天数。
A、C和D不正确。希望两个日期值之间的算术结果也是日期,这是一种常见错误,因此A表面看起来是对的,但其实它是错误的。
(4) 答案为D。将DISTINCT关键字应用于JOB_ID列,就可以从EMPLOYEES表投影唯一JOB_ID值。
A、B和C是错误的,因为A返回无限制的JOB_ID值列表,包括重复值;B在不正确的上下文中使用UNIQUE关键字。C选择JOB_ID和EMPLOYEE_ID值的不同组合。这产生的效果是从EMPLOYEES表返回所有行,因为EMPLOYEE_ID列包含每个员工记录的唯一值。另外,C返回两列,这不是最初所请求的。
(5) 答案为B和D。B和D是两个不合法语句,如果执行,它们将返回语法错误。这是一个具有迷惑性的问题,因为它要求的是不合法语句,而不是合法语句。B不合法,因为它遗漏了包含字符字面值“represents the”的一个单引号。D不合法,因为它没有使用单引号包含其字符字面值。
A和C是合法语句,因此,在这个问题中,它们是不正确答案。A和C看起来不同,因为SQL语句的大小写不同,A使用别名关键字AS,而C只是保留表达式和别名之间的空格。A和C产生的结果相同。
(6) 答案为C。SELECT子句通过指定从表中投影列的列表来实现投影,而WHERE子句通过限制依据条件检索的行来实现选择。
A、B和D都不正确,因为FROM子句指定被投影的行的来源,而ORDER BY子句用于排序选中的行。
(7) 答案为B。LIKE运算符测试各行的DEPARTMENT_NAME列是否包含字符“er”。字符字面值前后的百分比符号说明包含“er”字面值的所有字符都是许可的。
A、C和D不正确,A和C在语法上是正确的。A使用IN运算符,它用来测试集合成员。C测试DEPARTMENT_ NAME列的字母值是否介于字母“e”和字母“r”之间。最后, D使用单词“contains”,在该上下文中不能使用它。
(8) 答案为A和C。每个条件都测试SALARY值在$2000到$5000的范围之内。
B、D和E不正确。B从集合中排除像$2500这样的值;D排除了$2000和$5000这两个边界值;E不合法,因为它在AND运算符之后遗漏了SALARY列名。
(9) 答案为A和C。行限制子句是可选的,ORDER BY子句中指定的项可以包含列名、位置排序、数字值和表达式。
B和D不正确,因为它们是正确的陈述。
(10) 答案为D。第一次执行语句时,在第三个&&替换变量之前会遇到两个&替换变量。如果查询的第一行中的引用包含&&替换,就只会提示一次输入值。
A、B和C不正确,因为要提示3次输入JOB替换变量的值。在相同会话中,在这条语句的后续执行过程中不会提示输入该变量的值。
(11) 答案是C。结果按employee_id从最低到最高排序。OFFSET 5子句把返回的行限制为第二组的5名员工记录。
A、B、D和E是不正确的。OFFSET和ORDER_BY子句确定提取结果集的哪个部分和排序顺序,而FETCH子句决定最终检索多少行。