SQL - 从多个表获取数据问题



1.以下哪个与关系数据库无关?

  1. 选择
  2. 投影
  3. 连接
  4. 以上均不正确

答案:D. 选项 A、B 和 C 是 Oracle 关系数据库的主要功能。

2.使用哪种方法可以编写包含来自多个表的列的查询?

  1. SELECT
  2. GROUP BY
  3. ORDER BY
  4. JOINS

答案:D. 在 Oracle 中,连接用于连接多个表并投影来自多个表的列数据。

3.以下哪种方法是连接多个表最常见的方法之一?

  1. 哈希连接
  2. 等值连接
  3. 自连接
  4. 交叉连接

答案:B. 等值连接是连接类型之一,也是连接多个表最常见和最简单的技术。等值连接也称为简单连接或内部连接。等值连接涉及主键和外键。

4.如果列值落在不等式运算符定义的范围内,将使用以下哪一项连接其他表的行?

  1. 等值连接
  2. 简单连接
  3. 非等值连接
  4. 以上均不正确

答案:C. 等值连接使用等式运算符连接行,非等值连接使用不等式运算符。

5.关于 Oracle 连接,以下哪个陈述是正确的?

  1. 结果集中包含 NULL 值
  2. 仅获取具有匹配条件的行
  3. 获取任何一个表中存在的所有行
  4. 以上均不正确

答案:B. 使用连接时,会排除 NULL 值和公共连接列中不同的条目。

6.以下哪个可以用于将表的行与同一表的其他行连接?

  1. 等值连接
  2. 非等值连接
  3. 外部连接
  4. 自连接

答案:D. 关联基于具有逻辑且通常是层次关系的列。

7.关于 Oracle DB 中两个表的笛卡尔积连接,哪个是正确的?

  1. 必须避免,因为它成本高且未优化
  2. 当一个表中的每一行都与第二个表中的所有行连接时形成
  3. A 和 B 均正确
  4. 以上均不正确

答案:B. 笛卡尔积连接通常是由于缺少或不充分的连接条件导致的。它只是两个表的叉积。

8.以下哪项是 Oracle DB 中的基本连接类型之一?

  1. 外部连接
  2. 自连接
  3. 等值连接
  4. 以上所有

答案:C. 等值连接和非等值连接是 Oracle DB 中的两种基本连接类型。

9.在 Oracle DB 中,为了获取非笛卡尔积结果,在源表和目标表之间使用连接的主要条件是什么?

  1. 没有条件
  2. 两个表中至少应有一个列是公共的。
  3. 两个连接表中列的名称应相同才能使用连接
  4. 以上均不正确

答案:B. 表必须通过关联两个实体的公共列连接。在公共列上连接的表会产生非笛卡尔积。

10. 以下哪个可以用于在一个 SQL 查询中从多个表中获取行?

  1. SELECT
  2. WHERE
  3. FROM
  4. 等值连接

答案:D. 等值连接也称为简单连接或内部连接。等值连接涉及主键和外键。

11.关于 Oracle 连接中的源表和目标表,哪个是正确的?

  1. 它们必须至少有一个同名的列
  2. 所有列都应具有相同的名称和相同的数据类型才能连接两个表
  3. 源表和目标表不能互换,并且是位置特定的
  4. 以上均不正确

答案:D. 源表和目标表可以互换,并且其位置不是固定的。根据查询中使用的连接类型,结果可能不同或保持相同。

12.关于 Oracle DB 中的自然连接,哪个是正确的?

  1. 源表和目标表的列名应相同
  2. 如果源表和目标表的列名不同,Oracle 会隐式执行必要的操作
  3. NATURAL JOINS、USING 和 ON 是与自然连接相关的关键字
  4. 以上所有

答案:C. 关键字 NATURAL JOIN 指示 Oracle 识别源表和目标表之间具有相同名称的列。自然连接使用所有具有匹配名称和数据类型的列来连接表。USING 子句可用于指定仅应用于等值连接的列。

13.假设表 EMPLOYEES 和 DEPARTMENT 必须使用 NATURAL JOIN 连接。以下两个查询有什么区别?(考虑给定的表结构)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)
SELECT department_id 
FROM employees NATURAL JOIN department
WHERE first_name = 'John'
AND last_name = 'Bacon';
SELECT department_id 
FROM department NATURAL JOIN employees
WHERE first_name = 'John'
AND last_name = 'Bacon';
  1. 没有区别
  2. 这两种情况下的结果不同
  3. 两个查询在执行时都会给出 ORA 错误
  4. 以上均不正确

答案:B. 使用 NATURAL JOIN 时,源表和目标表可以互换,从而产生关系上不同的结果集。

14.关于 Oracle DB 中的 NATURAL JOIN,以下哪个选项是正确的?

  1. 使用 NATURAL JOIN 时,必须提及两个表中所有列的名称
  2. 只有当两个表的所有列的名称都相同时才能使用 NATURAL JOIN
  3. 只有当用户指定源表和目标表的列时,NATURAL JOIN 中才会发生连接。
  4. 使用 NATURAL JOINS 时,无需提及列。

答案:D. 使用 NATURAL JOIN 时,会隐式连接来自源表和目标表的列。NATURAL JOIN 是一种 JOIN 操作,它根据要连接的两个表中公共列为您创建隐式连接子句。公共列是指在两个表中具有相同名称的列。

15. NATURAL JOIN 和 JOIN..ON 连接有什么区别?

  1. 两者之间没有区别
  2. JOIN..ON 将源表和目标表连接到具有相同名称的特定列上
  3. NATURAL JOIN 隐式连接来自源表和目标表的所有匹配列
  4. 以上均不正确

答案:B, C. 自然连接的连接条件基本上是所有具有相同名称的列的等值连接。使用 ON 子句指定任意条件或指定要连接的列。连接条件与其他搜索条件分开。ON 子句使代码易于理解。

16.关于 Oracle DB 中的 JOIN..ON 子句,哪个是正确的?

  1. 它不依赖于源表和目标表中的列是否具有相同的名称
  2. 只有源表和目标表中具有相同名称的列才能与此子句一起使用
  3. 它是 NATURAL JOIN 的一种格式
  4. 以上所有

答案:A, C. 自然连接的连接条件基本上是所有具有相同名称的列的等值连接。使用 ON 子句指定任意条件或指定要连接的列。连接条件与其他搜索条件分开。ON 子句使代码易于理解。

17. 数据库设计人员将两个表中的键(唯一)列命名不同。连接这些表时,以下哪项将是最佳实践?

  1. JOIN..ON
  2. NATURAL JOIN 或 JOIN...ON 子句
  3. A 和 B 均正确
  4. 以上均不正确

答案:A. 在这种情况下使用 NATURAL JOINS 会产生意外的结果,因为存在隐式搜索具有相同名称的列,而这里不存在。

18.以下哪个可以用于在 Oracle DB 中获取源表和目标表之间匹配行以及非匹配行?

  1. EQUI-JOIN
  2. SELF-JOIN
  3. NATURAL JOIN
  4. OUTER-JOIN

答案:D. 当需要在结果中包含记录而没有连接表中的对应记录时,就会创建外部连接。这些记录与 NULL 记录匹配,以便将其包含在输出中。

19. 在 Oracle DB 中,笛卡尔积连接也被称为什么?

  1. 等值连接
  2. 反连接
  3. 交叉连接
  4. 以上均不正确

答案:C. 两个表之间的笛卡尔积连接返回表中每一行所有可能的组合。可以通过不包含查询中的连接操作或使用 CROSS JOIN 来生成笛卡尔积连接。

20.下面查询中给出的两个表 EMPLOYEES 和 DEPARTMENT 之间的 NATURAL JOIN 的结果是什么?(考虑给定的表结构)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)
SELECT * FROM employees NATURAL JOIN department;
  1. 两个表中同名的公共列 DEPARTMENT_ID 将在结果集中出现两次
  2. 所有具有相同名称并使用 NATURAL JOIN 连接的列都将在结果集中出现两次
  3. 结果集将对来自两个表的每一对同名列只有一个列

  4. 以上均不正确

答案:C. NATURAL JOIN 关键字不需要条件来建立两个表之间的关系。但是,必须存在一个公共列。列限定符不能与 NATURAL JOIN 关键字一起使用。

21.Oracle 数据库中 NATURAL JOIN 和 EQUI-JOIN 的区别是什么?

  1. 没有区别
  2. 从两者获取的结果集方面,它们是相同的
  3. A 和 B 均正确
  4. 以上均不正确

答案:D. NATURAL JOIN 连接所有名称相同的列,而 EQUI-JOIN 要求在 SQL 查询中明确提及列。

22.Oracle 数据库中的 INNER JOIN 是什么?

  1. 给出两个表之间匹配记录的连接称为 INNER JOIN
  2. 内部联接可以使用 <、>、<> 等运算符
  3. A 和 B 均正确
  4. 以上均不正确

答案:C. 连接可以是内部连接,其中仅返回在所有表中都有匹配记录的记录;也可以是外部连接,其中可以返回记录,无论在连接中是否有匹配记录。

23.Oracle 数据库中 INNER JOIN 和 EQUI-JOIN 的区别是什么?

  1. 它们在语法和获得的结果集方面是相同的。
  2. INNER JOIN 是 EQUI-JOIN 的一个子集
  3. INNER JOIN 可以使用 <、>、<> 以及 "=" 等运算符,而 EQUI-JOIN 仅使用 "=" 运算符
  4. 以上所有

答案:C. EQUI-JOIN 是一种 INNER JOIN,在连接条件中包含 "=" 运算符,而 INNER JOIN 可以包含等式和不等式运算符

24.关于 Oracle 数据库中 ANSI SQL: 1999 语法中的 NATURAL JOIN,哪些说法是正确的?

  1. 使用等号运算符 (=)
  2. 与传统语法相比,它们获取不同的结果
  3. ANSI SQL 语法在 SQL 查询中使用 NATURAL JOIN 等词
  4. 以上均不正确。

答案:C. ANSI SQL 语法与传统使用 "=" 的方式不同。ANSI SQL 语法中有一些关键字,如 NATURAL JOIN 等,用于区分使用的连接。

25.关于以下查询,以下哪种说法是正确的?(请考虑给定的表结构)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)
SELECT first_name, salary
FROM employees e, departments d
WHERE e.department_id  (+) = d.department_id ;
  1. 两个表中的 department_id 之间存在外部连接,等效于 ANSI SQL 中的右外部连接
  2. 两个表中的 department_id 之间存在外部连接,等效于 ANSI SQL 中的左外部连接
  3. 它获取 employees 表中所有 department_id 的记录,无论它们是否匹配
  4. 它获取 department 表中所有 department_id 的记录,无论它们是否匹配

答案:A、D. 条件 e.department_id (+) = d.department_id 表示它将执行右外部连接,并且将显示 department 表中的所有 department_id,无论它们是否匹配

26.以下哪种语法模型在全球软件系统中得到广泛使用?

  1. ANSI SQL: 1999
  2. 传统的 Oracle 语法和 ANSI SQL: 1999 语法
  3. 传统的 Oracle 语法
  4. 所有选项

答案:C. 尽管 ANSI SQL: 1999 语法不像传统的 Oracle 语法那样使用广泛,但它仍然是 Oracle SQL 中可能使用的语法之一。

27.关于 Oracle 数据库中的笛卡尔积,以下哪种说法是正确的?

  1. 如果连接的表数为 'N',则如果连接数为 N-1,则不会执行笛卡尔积
  2. 如果连接的表数为 'N',则如果连接数为 N,则执行笛卡尔积
  3. 如果连接的表数为 'N',则如果连接数为 N+1,则执行笛卡尔积
  4. 如果连接的表数为 'N',则如果连接数为 N-1 或更少,则执行笛卡尔积。

答案:A. 两个表之间的笛卡尔连接返回表中每一行的所有可能组合。笛卡尔连接可以通过在查询中不包含连接操作或使用 CROSS JOIN 来生成。查询必须至少具有 (N-1) 个连接条件以防止笛卡尔积,其中 N 是查询中表的数量。

28.以下 SQL 查询中错误的原因是什么?(请考虑给定的表结构)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)
SELECT first_name, last_name
FROM employees, departments
WHERE department_id (+) = department_id ;
  1. 没有为表使用别名。
  2. 此处未使用 RIGHT OUTER JOIN,因此它会引发错误
  3. "+" 应该位于等式条件的右侧,而不是左侧
  4. 应在条件中与 department_id 一起使用表别名以消除歧义命名

答案:D. 如果没有表别名,Oracle 将无法推导出正在连接的列的来源,因此在执行时会引发歧义错误。

29.Oracle 数据库中使用什么来避免列歧义问题?

  1. ;
  2. ,
  3. .
  4. /

答案:C. 消除列歧义问题的语法为:table_alias.column_name

30.关于以下查询,以下哪种说法最合适?(请考虑给定的表结构)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)
SELECT employee_id , first_name, last_name
FROM employees e right outer join department d
On e.department_id  = d.department_id ;
  1. 它提供了不在任何部门的员工的详细信息
  2. 它提供了没有员工的部门的详细信息
  3. 它提供了所有部门的详细信息,无论它们是否有员工
  4. 它提供了在“ABC”公司入职的员工的详细信息,无论部门如何。

答案:C. 使用外部连接的 JOIN 方法,您可以添加 LEFT、RIGHT 或 FULL 关键字。左外部连接包括连接左侧列出的表中的所有记录,即使在连接中的其他表中找不到匹配项也是如此。完全外部连接包括两个表中的所有记录,即使在另一个表中找不到相应的记录也是如此。

31.以下查询的结果是什么?(请考虑给定的表结构)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)
SELECT *
FROM employees e, department d
WHERE a.department_id  = b.department_id ;
  1. 它将给出两个表中所有具有相同 department_id 的匹配值
  2. 它将给出 employees 表中的所有列以及 departments 表中的前 100 行
  3. 它将给出 ORA 错误:“b.department_id”无效标识符
  4. 以上选项均不正确

答案:C. WHERE 子句中应与 FROM 子句中声明的相同别名

32.关于表连接中的 USING 和 ON 子句,以下哪种说法是正确的?(如果适用,请选择多个选项)

  1. ON 子句可用于根据数据类型相同的列连接表,但不一定需要名称相同
  2. USING 和 ON 子句仅用于等值连接和非等值连接
  3. ON 子句不能使用多个条件
  4. 可以在 USING..ON 子句之后编写 WHERE 子句以应用其他条件

答案:A、D. JOIN ... USING 方法类似于 NATURAL JOIN 方法,只是公共列在 USING 子句中指定。USING 子句中不能包含条件来指示表是如何关联的。此外,对于 USING 子句中指定的公共列,不能使用列限定符。JOIN... ON 方法根据指定的条件连接表。FROM 子句中的 JOIN 关键字指示要连接的表,而 ON 子句指示两个表是如何关联的。如果要连接的表在每个表中没有名称相同的公共列,则必须使用此方法。

33.Oracle 数据库中可以使用 JOIN 连接多少个表?

  1. 1
  2. 2
  3. 255
  4. 没有限制

答案:D. 目前对参与连接的表数没有限制。

34.当在 SQL 语句中使用多个连接时,哪些说法是正确的?

  1. 连接从左到右进行评估
  2. 连接从右到左进行评估
  3. 连接的评估过程中没有优先级
  4. 以上均不正确

答案:A. 当语句中存在多个连接时,它们从左到右进行评估。

35.关于以下查询,哪些说法是正确的?(请考虑给定的表结构)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)
SQL> desc bonus
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER
 JOB_ID 			  VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
SELECT bonus, first_name, department_id 
FROM bonus b NATURAL JOIN employees e NATURAL JOIN department d;
  1. 使用 NATURAL JOIN 连接多个表是一个更好的选择,并且可以产生准确的结果
  2. 使用 NATURAL JOIN 连接多个表时,错误概率非常低
  3. 连接多个表时,USING..JOIN..ON 子句比 NATURAL JOIN 提供更准确的结果
  4. 当使用 NATURAL JOIN 时,Oracle 会隐式连接多个表,因此使用 NATURAL JOIN 是一个好习惯

答案:C. 使用 NATURAL JOIN 会创建行的笛卡尔积,并且结果集不可靠,容易出错。

36.关于 Oracle 数据库中的 JOIN..ON 子句,哪些说法是正确的?

  1. 与连接多个表时的 NATURAL JOIN 相比,它们不太可靠
  2. JOIN..ON 子句类似于 WHERE 子句,它使用条件限制行
  3. 使用 JOIN..ON 子句时,必须使用额外的 WHERE 子句
  4. 以上均不正确

答案:B. JOIN .... ON 方法根据指定的条件连接表。FROM 子句中的 JOIN 关键字指示要连接的表,而 ON 子句指示两个表是如何关联的。如果要连接的表在每个表中没有名称相同的公共列,则必须使用此方法。

检查给定的表结构。回答以下给定查询后的问题 37 和 38

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)
SELECT e.salary, d.department_id 
FROM employees e JOIN department d
On (e.department_id  = d.department_id  and e.last_name = 'Brandon');

37.关于上述查询,哪些说法是正确的?

  1. 它会引发 ORA 错误,因为缺少必需的 WHERE 子句
  2. JOIN..ON 子句不能包含多个条件
  3. 查询会忽略最后一个条件并执行,不会引发 ORA 错误
  4. JOIN..ON 子句可以按上述形式编写以添加更多条件。

答案:D. 可以省略 WHERE 子句,并将相关条件直接添加到 JOIN..ON 子句中,如给定查询所示

38.关于给定的查询,如果将使用的 JOIN 替换为 NATURAL JOIN,则会引发错误。此错误的原因是什么?

  1. 当使用 NATURAL JOIN 时,必须使用 WHERE 子句,省略它会引发错误
  2. ON 子句应替换为 USING 子句
  3. NATURAL、JOIN 和 USING 在同一个连接子句的上下文中是互斥的
  4. 查询在连接时不能组合 NATURAL JOIN 和 ON(或 USING)子句。

答案:C、D。

39.关于 Oracle 数据库中的非等值连接,哪些说法是正确的?

  1. 它们基于 NON-EQUI JOIN 关键字连接
  2. 它们使用 JOIN..ON 子句和 "=" 符号
  3. 当提到的不等式的结果计算为真时,将获得结果。
  4. 以上均不正确

答案:C. 非等值连接使用 JOIN..ON 子句,但使用不等式运算符。

检查 EMPLOYEES 和 DEPARTMENTS 表的结构,并回答以下问题 40 和 41。

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)

40.以下查询在 Oracle 数据库中的结果是什么?

SELECT e.first_name, e.last_name, e.employee_id 
FROM employees e JOIN department d
ON (e.salary BETWEEN 1000 AND 10000);
  1. 它将引发 ORA 错误,因为 ON 子句中的条件不正确。
  2. 由于语法错误,它将引发 ORA 错误,因为 ON 子句中没有等号“=”
  3. 它将成功执行并给出满足条件的员工的姓、名和员工 ID。
  4. 非等值连接只能用于显示不等式,而不能用于显示范围。

答案:C。

41.您需要查找一份报告,该报告列出薪资大于 20000 且位于日内瓦任何部门的员工的姓和名。以下哪个查询可以给出所需的结果?

  1. SELECT e.first_name, e.last_name
    FROM employees e JOIN departments d
    ON (e.department_id  = d.department_id  and e.salary >20000)
    AND d.loc = upper ('Geneva');
  2. SELECT e.first_name, e.last_name
    FROM employees e JOIN departments d
    ON (e.department_id  = d.department_id  and e.salary >=20000);
  3. SELECT e.first_name, e.last_name
    FROM employees e JOIN departments d
    ON (e.department_id  = d.department_id  and e.salary >=20000)
    AND d.loc = 'Geneva'; 
  4. SELECT e.first_name, e.last_name
    FROM employees e JOIN departments d
    ON (e.department_id  = d.department_id  and e.salary >20000)
    WHERE d.loc = upper('Geneva');

答案:A、C。

42.当使用 EQUI-JOIN 连接表时,在以下哪些条件下会返回一行?

  1. 不等式匹配操作的结果为真
  2. 不等式匹配操作的结果为 0
  3. 不等式匹配操作的结果为 1
  4. 不等式匹配操作的结果为假

答案:A. 当从两个不同表中连接记录的数据完全匹配时(即,相等条件创建了关系),就会创建相等连接。传统方法在 WHERE 子句中使用等号作为比较运算符。JOIN 方法可以使用 NATURAL JOIN、JOIN ... USING 或 JOIN ... ON 关键字。

41.您需要查找一份报告,该报告列出薪资大于 20000 且位于日内瓦任何部门的员工的姓和名。以下哪个查询可以给出所需的结果?

  1. SELECT e.first_name, e.last_name
    FROM employees e JOIN departments d
    ON (e.department_id  = d.department_id  and e.salary >20000)
    AND d.loc = upper ('Geneva');
  2. SELECT e.first_name, e.last_name
    FROM employees e JOIN departments d
    ON (e.department_id  = d.department_id  and e.salary >=20000);
  3. SELECT e.first_name, e.last_name
    FROM employees e JOIN departments d
    ON (e.department_id  = d.department_id  and e.salary >=20000)
    AND d.loc = 'Geneva'; 
  4. SELECT e.first_name, e.last_name
    FROM employees e JOIN departments d
    ON (e.department_id  = d.department_id  and e.salary >20000)
    WHERE d.loc = upper('Geneva');

答案:A、C。

42.当使用 EQUI-JOIN 连接表时,在以下哪些条件下会返回一行?

  1. 不等式匹配操作的结果为真
  2. 不等式匹配操作的结果为 0
  3. 不等式匹配操作的结果为 1
  4. 不等式匹配操作的结果为假

答案:A. 当从两个不同表中连接记录的数据完全匹配时(即,相等条件创建了关系),就会创建相等连接。传统方法在 WHERE 子句中使用等号作为比较运算符。JOIN 方法可以使用 NATURAL JOIN、JOIN ... USING 或 JOIN ... ON 关键字。

41.您需要查找一份报告,该报告列出薪资大于 20000 且位于日内瓦任何部门的员工的姓和名。以下哪个查询可以给出所需的结果?

  1. SELECT e.first_name, e.last_name
    FROM employees e JOIN departments d
    ON (e.department_id  = d.department_id  and e.salary >20000)
    AND d.loc = upper ('Geneva');
  2. SELECT e.first_name, e.last_name
    FROM employees e JOIN departments d
    ON (e.department_id  = d.department_id  and e.salary >=20000);
  3. SELECT e.first_name, e.last_name
    FROM employees e JOIN departments d
    ON (e.department_id  = d.department_id  and e.salary >=20000)
    AND d.loc = 'Geneva'; 
  4. SELECT e.first_name, e.last_name
    FROM employees e JOIN departments d
    ON (e.department_id  = d.department_id  and e.salary >20000)
    WHERE d.loc = upper('Geneva');

答案:A、C。

42.当使用 EQUI-JOIN 连接表时,在以下哪些条件下会返回一行?

  1. 不等式匹配操作的结果为真
  2. 不等式匹配操作的结果为 0
  3. 不等式匹配操作的结果为 1
  4. 不等式匹配操作的结果为假

答案:A. 当从两个不同表中连接记录的数据完全匹配时(即,相等条件创建了关系),就会创建相等连接。传统方法在 WHERE 子句中使用等号作为比较运算符。JOIN 方法可以使用 NATURAL JOIN、JOIN ... USING 或 JOIN ... ON 关键字。

41.您需要查找一份报告,该报告列出薪资大于 20000 且位于日内瓦任何部门的员工的姓和名。以下哪个查询可以给出所需的结果?

  1. SELECT e.first_name, e.last_name
    FROM employees e JOIN departments d
    ON (e.department_id  = d.department_id  and e.salary >20000)
    AND d.loc = upper ('Geneva');
  2. SELECT e.first_name, e.last_name
    FROM employees e JOIN departments d
    ON (e.department_id  = d.department_id  and e.salary >=20000);
  3. SELECT e.first_name, e.last_name
    FROM employees e JOIN departments d
    ON (e.department_id  = d.department_id  and e.salary >=20000)
    AND d.loc = 'Geneva'; 
  4. SELECT e.first_name, e.last_name
    FROM employees e JOIN departments d
    ON (e.department_id  = d.department_id  and e.salary >20000)
    WHERE d.loc = upper('Geneva');

答案:A、C。

42.当使用 EQUI-JOIN 连接表时,在以下哪些条件下会返回一行?

  1. 不等式匹配操作的结果为真
  2. 不等式匹配操作的结果为 0
  3. 不等式匹配操作的结果为 1
  4. 不等式匹配操作的结果为假

答案:A. 当从两个不同表中连接记录的数据完全匹配时(即,相等条件创建了关系),就会创建相等连接。传统方法在 WHERE 子句中使用等号作为比较运算符。JOIN 方法可以使用 NATURAL JOIN、JOIN ... USING 或 JOIN ... ON 关键字。

43.关于 Oracle 数据库中的自连接,以下说法正确的是?

  1. 连接只需要两个表。
  2. 结果集中的列来自两个表,但显示在一个表中。
  3. 从概念上讲,源表会复制自身以创建目标表。(Oracle 不会复制表)
  4. 以上所有

答案:C. 当一个表必须连接到自身以检索所需数据时,使用自连接。在 FROM 子句中需要表别名才能执行自连接。

44.关于下面给出的查询和表结构,回答问题。

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SELECT *
FROM employees a join employees b
WHERE a.employee_id  = b.employee_id ;

Oracle 将以下哪个表视为源表和目标表?

  1. a 是源表,b 是目标表
  2. b 是源表,a 是目标表
  3. Oracle 不会将任何表视为源表或目标表
  4. 以上均不正确

答案:A. employees 表的第一次出现被视为源表,随后的出现被视为 b、c 等。

45.在 Oracle 数据库中,在哪些情况下理想情况下可以使用自连接?

  1. 当我们需要查找表中的重复记录时
  2. 当我们需要从表中获取 NULL 值时
  3. 当我们需要显示表的某一列两次时
  4. 当我们需要显示相关实体的层次结构时

答案:D.

46.关于 Oracle 数据库中的自然连接,以下说法正确的是?

  1. 连接的列具有相同的名称,但可以具有不同的数据类型
  2. 连接的列可以具有相同的数据类型,但名称不同
  3. 连接的列应具有相同的名称和相同的数据类型
  4. 以上均不正确

答案:C. NATURAL JOIN 关键字不需要条件来建立两个表之间的关系。但是,必须存在一个公共列。列限定符不能与 NATURAL JOIN 关键字一起使用。

47.需要提取一个报表,该报表仅提供部门 100 和 101 的部门名称、部门 ID、部门城市和位置 ID。使用自然连接,以下哪个选项将提供所需的结果?

Table DEPARTMENTS Table LOCATIONS
  1. SELECT department_id , department_name  ,location, city
    FROM departments 
    NATURAL JOIN locations 
    WHERE department_id in (100,101); 
    
  2. SELECT department_id , department_name  ,location, city
    FROM locations 
    NATURAL JOIN departments 
    WHERE department_id BETWEEN 100 AND 101; 
    
  3. SELECT department_id , department_name  ,location, city
    FROM departments 
    NATURAL JOIN locations 
    WHERE department_id >100
    AND department_id >101; 
    
  4. SELECT department_id , department_name  ,location, city
    FROM departments 
    NATURAL JOIN locations ; 

答案:A. WHERE 可以用于 NATURAL JOIN 子句后的附加条件。

48.在以下哪些情况下应使用 USING 子句或 NATURAL JOIN 子句?

  1. 当来自表的列的名称相同时,使用 USING 子句
  2. 当来自表的列的数据类型相同时,使用 NATURAL JOIN
  3. 如果多个列具有相同的名称但数据类型不匹配,则可以使用 USING
  4. 仅当列名及其数据类型相同时,才应使用 NATURAL JOIN

答案:C,D. NATURAL JOIN 和 USING 是互斥的,当多个列匹配时,应使用 USING 子句仅匹配一列。

49.检查给定的表结构。以下查询的结果是什么?(选择最合适的答案)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> desc bonus
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER
 JOB_ID 			  VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
SELECT e.name, b.bonus
FROM employees e 
JOIN bonus b
USING (job_id)
WHERE e.job_id  like 'SA%'); 
  1. 它给出某个公司所有员工的姓名和获得的奖金。
  2. 它给出某个公司特定职位的所有员工的姓名和获得的奖金。
  3. 它成功执行,给出所有职位的所有员工的姓名和获得的奖金。
  4. 它抛出一个 ORA 错误。

答案:D. USING 子句中使用的列在 SQL 语句中的任何位置都不应具有限定符(表名或别名)。

50.关于 Oracle 数据库中的内部连接和外部连接,以下说法正确的是?

  1. INNER JOIN 仅返回匹配的行。
  2. OUTER JOIN 仅返回不匹配的行。
  3. OUTER JOIN 返回匹配的行以及不匹配的行。
  4. 以上均不正确

答案:A,C. 连接可以是内部连接,其中仅返回在所有表中都有匹配记录的记录,也可以是外部连接,其中可以返回记录,无论连接中是否存在匹配记录。当需要在结果中包含记录但连接表中没有对应的记录时,会创建外部连接。这些记录与 NULL 记录匹配,以便将其包含在输出中。

51.关于 Oracle 数据库中的 FULL OUTER JOIN,以下说法正确的是?

  1. 当 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 同时出现在同一个查询中时,称为 FULL OUTER JOIN。
  2. FULL OUTER JOIN 与 OUTER JOIN 相同。
  3. A 和 B 均正确
  4. 两个表之间的连接,返回 INNER JOIN 和 LEFT 和 RIGHT OUTER JOIN 的结果,称为 FULL OUTER JOIN。

答案:D. 全外部连接包含两个表中的所有记录,即使在另一个表中找不到对应的记录。

检查给定的表结构并回答后续的第 52 和 53 个问题。

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)
SQL> desc bonus
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER
 JOB_ID 			  VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)

52.考虑以下查询。

SELECT e.job_id , e.first_name, d.department_id 
FROM departments D JOIN employees e JOIN BONUS b
USING (job_id );

此查询导致错误。错误的原因是什么?

  1. JOIN..USING 只能在两个表之间发生。
  2. 查询中的 USING 子句没有任何来自 department 的列。
  3. 查询中没有 WHERE 子句。
  4. 以上均不正确

答案:A. Table1 JOIN table2 JOIN table3 不允许在每个 JOIN 之间没有 ON 子句的情况下使用。

53.您需要显示来自 EMPLOYEES 表的所有不匹配行和来自 DEPARTMENT 表的所有不匹配行,而不会在它们之间给出行的笛卡尔积。以下哪个查询将提供所需的输出?

  1. SELECT *
    FROM employees e, department d
    WHERE e.department_id  = d.department_id ; 
    
  2. SELECT *
    FROM employees e NATURAL JOIN department d; 
    
  3. SELECT *
    FROM employees e FULL OUTER JOIN department d
    ON  e.department_id  = d.department_id ; 
    
  4. SELECT *
    FROM employees e JOIN  department d
    ON ( e.department_id  > d.department_id ) ; 

答案:C. FULL OUTER JOIN 返回两个表中的不匹配行。全外部连接包含两个表中的所有记录,即使在另一个表中找不到对应的记录。

54.Oracle 支持以下哪些 ANSI SQL:1999 连接语法连接?

  1. 笛卡尔积
  2. 自然连接
  3. 全外部连接
  4. 等值连接

答案:D.

55.以下哪个不是 Oracle 数据库中外部连接的格式?

  1. 中心

答案:C. 除“中心”外,其余 3 种类型是 Oracle 数据库中外部连接的格式类型。使用外部连接的 JOIN 方法,您可以添加 LEFT、RIGHT 或 FULL 关键字。

检查给定的表结构。通过参考以下查询,回答后续的第 56、57 和 58 个问题

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)
SELECT *
FROM employees e NATURAL JOIN department d;

56.您需要查找上述查询仅针对部门 100 和 101 获得的结果。应向上述查询添加/修改以下哪些子句?

  1. 应添加 ON (e.department_id = d.department_id)
  2. 应添加 USING (e.department_id)
  3. 应添加 WHERE e.department_id in (100,101)
  4. 以上均不正确

答案:C. NATURAL JOIN 子句隐式匹配所有相同名称的列。要添加其他条件,可以使用 WHERE 子句。

57.您需要查找上述查询中所有工资大于 20000 的员工获得的结果。应向上述查询添加/修改以下哪些子句?

  1. ON (e.department_id = d.department_id) WHERE salary > 20000;
  2. USING (e.department_id) WHERE salary > 20000;
  3. USING (department_id) WHERE salary>20000;
  4. WHERE salary > 20000;

答案:D.

58.如果上述查询中的 NATURAL JOIN 被仅 JOIN 替换,则应向上述查询添加/修改以下哪些内容以提供与部门 100 相关的结果?

  1. ON (department_id = 100);
  2. USING (e.department_id =100);
  3. WHERE d.department_id = 100;
  4. ON (e.department_id = d.department_id and d.department_id = 100);

答案:D. 等值连接可以在 ON 子句之后添加更多条件。

59.需要提取一份报表,以获取公司“ABC”中部门 10 和 20 中所有员工的经理。以下哪个查询将提供所需的结果?(考虑给定的表结构)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
  1. SELECT a.first_name || ' '||a.last_name "Manager", b.first_name||' '||b.last_name "Employees"
    FROM employees a join employees b
    On (employee_id );
  2. SELECT a.first_name || ' '||a.last_name "Manager", b.first_name||' '||b.last_name "Employees"
    FROM employees a join employees b
    On (b.employee_id  = a.employee_id );
  3. SELECT a.first_name || ' '||a.last_name "Manager", b.first_name||' '||b.last_name "Employees"
    FROM employees a join employees b
    On (a.manager_id  = b.employee_id )
    WHERE department_id  in (10,20);
    
  4. SELECT a.first_name || ' '||a.last_name "Manager", b.first_name||' '||b.last_name "Employees"
    FROM employees a join employees b
    On (a.manager_id  = b.employee_id )
    WHERE a.department_id  in (10,20);

答案:D. 选项 C 是不正确的,因为 WHERE 子句中未加别名的 department_id 将抛出错误。

60.以下哪个查询将提供 EMPLOYEES 和 DEPARTMENT 两个表之间没有重复值的结果?(考虑给定的表结构)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)
  1. SELECT *
    FROM employees e NATURAL JOIN department d;
    
  2. SELECT *
    FROM employees e JOIN department d;
    
  3. SELECT *
    FROM employees e NATURAL JOIN department d
    USING (e.department_id );
    
  4. SELECT * 
    FROM employees e FULL OUTER JOIN department d
    USING (department_id );

答案:D. FULL OUTER JOIN 将提供两个表中的所有匹配行以及不匹配行,排除重复值。

检查此处给出的表的结构并回答第 61 至 64 个问题。

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> desc bonus
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER
 JOB_ID 			  VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
SQL> desc locations
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 LOCATION_ID		 NOT NULL NUMBER(4)
 STREET_ADDRESS 		  VARCHAR2(40)
 POSTAL_CODE			  VARCHAR2(12)
 CITY			 NOT NULL VARCHAR2(30)
 STATE_PROVINCE 		  VARCHAR2(25)
 COUNTRY_ID			  CHAR(2)
SQL> desc locations
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 LOCATION_ID		 NOT NULL NUMBER(4)
 STREET_ADDRESS 		  VARCHAR2(40)
 POSTAL_CODE			  VARCHAR2(12)
 CITY			 NOT NULL VARCHAR2(30)
 STATE_PROVINCE 		  VARCHAR2(25)
 COUNTRY_ID			  CHAR(2)

61.关于以下查询,以下说法正确的是?(选择最合适的答案)

SELECT *
FROM bonus b, employees e
WHERE b.job_id  (+) = e.job_id ;
  1. 它将显示所有员工获得的所有奖金。
  2. 如果特定员工没有收到任何奖金,它将为奖金列显示 NULL。
  3. A 和 B 均正确
  4. 以上均不正确

答案:B. 等式左侧的 (+) 表示它是 RIGHT OUTER JOIN,反之亦然。

62.您必须列出在名为“XYZ”的公司中还没有员工的所有部门。以下哪个查询将提供所需的结果?

  1. SELECT department_id , department_name FROM departments d NATURAL JOIN employees e;
    
  2. SELECT department_id , department_name FROM employees e JOIN departments d
    ON (e.department_id  = d.department_id );
    
  3. SELECT department_id , department_name FROM employees e LEFT OUTER JOIN departments d
    USING (department_id );
    
  4. SELECT department_id , department_name FROM employees e RIGHT OUTER JOIN departments d
    ON (e.department_id  = d.department_id );

答案:D.

63.您需要提取一份报表,该报表显示“尚未分配部门”给所有尚未分配到部门的员工。以下哪个选项将满足此目的?

  1. SELECT nvl(department_id ,'No department yet')
    FROM employees e RIGHT OUTER JOIN departments d
    ON (e.department_id  = d.department_id );
    
  2. SELECT nvl(department_id ,'No department yet')
    FROM departments d LEFT OUTER JOIN employees e
    ON (e.department_id  = d.department_id );
    
  3. SELECT nvl(department_id ,'No department yet')
    FROM employees e LEFT OUTER JOIN departments d
    ON (e.department_id  = d.department_id );
    
  4. SELECT nvl(department_id ,'No department yet')
    FROM employees e FULL OUTER JOIN departments d
    ON (e.department_id  = d.department_id );

答案:C。

64.您需要提取一份报表,该报表显示所有尚未分配到城市的部门。以下哪个查询将提供所需的输出?

  1. SELECT department_id , department_name FROM departments d NATURAL JOIN locations l; 
    
  2. SELECT department_id , department_name FROM departments d FULL OUTTER JOIN locations l
    ON (d.location_id = l.location_id); 
    
  3. SELECT  d.department_id , d.department_name FROM departments d JOIN locations l
    USING (location_id); 
    
  4. SELECT department_id , department_name FROM departments d LEFT OUTER JOIN locations l
    ON (d.location_id = l.location_id); 

答案:D.

65.在哪些两种情况下应使用外部连接?

  1. 如果连接表的列具有 NULL 值
  2. 如果连接表具有 NOT NULL 列
  3. 如果连接表只有不匹配的数据
  4. 如果连接表既有匹配数据也有不匹配数据

答案:A,D. 当需要在结果中包含记录但连接表中没有对应的记录时,会创建外部连接。这些记录与 NULL 记录匹配,以便将其包含在输出中。

66.您需要查找每个员工获得的工资等级。您将使用以下哪个查询?(考虑给定的表结构)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> desc grade
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 GRADE 				  NUMBER
 LOSAL 				  NUMBER
 HISAL				  NUMBER
  1. SELECT employee_id , salary, grade
    FROM employees e JOIN grade g
    ON g.grade BETWEEN g.losal AND g.hisal
    
  2. SELECT employee_id , salary, grade
    FROM employees e FULL OUTER JOIN grade g
    WHERE g.grade > g.losal AND < g.hisal;
    
  3. SELECT employee_id , salary, grade 
    FROM employees e JOIN grade g
    ON (MIN(g.grade) = g.losal
    AND MAX(g.grade) = g.hisal);
    
  4. 以上均不正确

答案:A.

67.检查给定的表结构。

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> desc bonus
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER
 JOB_ID 			  VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)

评估此 SQL 语句

SELECT e.employee_id , (.25* e.salary) + (.5 * e.commission_pct) + (.75 * b.bonus) as calc_val
FROM employees e, bonus b
WHERE e.employee_id  = b.employee_id ;

如果删除计算中的所有括号会发生什么?

  1. calc_val 列中显示的值将更小。
  2. calc_val 列中显示的值将更大。
  3. calc_val 列中没有区别。
  4. 将报告错误。

答案:C。

68.考虑示例并检查 EMPLOYEES、DEPARTMENTS 和 GRADE 表的结构。在什么情况下您会使用非等值连接查询?

Table EMPLOYEES Table DEPARTMENTS Table GRADE
  1. 查找每个员工的等级
  2. 列出所有员工的姓名、job_id 和经理姓名
  3. 查找员工的部门名称。
  4. 查找在行政部门工作且工资低于 30000 的员工人数

答案:A. 非等值连接根据除等值条件之外的任何条件建立关系。与非等值连接一起使用的范围值必须是互斥的。

69.在哪些三种情况下您会使用 USING 子句?(选择三个。)

  1. 您要创建非等值连接。
  2. 要连接的表具有多个 NULL 列。
  3. 要连接的表具有相同名称但数据类型不同的列。
  4. 您要使用自然连接,但要限制连接条件中的列数。

答案:C,D。JOIN … USING 方法类似于 NATURAL JOIN 方法,只是在 USING 子句中指定了公共列。不能在 USING 子句中包含条件来指示表之间的关系。此外,不能对 USING 子句中指定的公共列使用列限定符。

70.如果 EMPLOYEES 和 BONUS 表有两个名称相同的列,即:- SALARY 和 JOB_ID,则以下哪些查询彼此等价?(考虑给定的表结构)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> desc bonus
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER
 JOB_ID 			  VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
  1. SELECT * FROM employees E JOIN bonus B on (salary, job_id )
  2. SELECT * FROM employees E NATURAL JOIN bonus B on (salary, job_id )
  3. SELECT * FROM employees E JOIN bonus B USING (salary, job_id )
  4. SELECT * FROM employees E JOIN bonus B on (salary, job_id )

答案:B,C。

71.检查给定的表结构。

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)

检查以下两个 SQL 语句

查询 1
SELECT first_name,department_id 
FROM employees E JOIN departments D
USING (department_id );
查询 2
SELECT first_name,department_id 
FROM employees E NATURAL JOIN departments D
USING (department_id );

关于结果,哪个陈述是正确的?

  1. 只有查询 1 成功执行并给出所需的结果。
  2. 只有查询 2 成功执行并给出所需的结果。
  3. 查询 1 和查询 2 都成功执行并给出不同的结果。
  4. 查询 1 和查询 2 都成功执行并给出相同所需的结果。

答案:D.

72.您需要生成一个报告,显示部门位置以及 2013 年 1 月 20 日之前的所有聘用员工的姓名。

Table DEPARTMENTS Table EMPLOYEES Table LOCATIONS

您发出以下查询

SELECT department_name  , first_name||' '||last_name
FROM employees E JOIN department d
ON ( hire_date < '20-JAN-2013')
JOIN locations L
ON  (l.location_id = d.location_id) ;

关于上述查询,哪个陈述是正确的?

  1. 它成功执行并给出所需的结果。
  2. 它成功执行,但没有给出所需的结果。
  3. 它产生错误,因为表的连接顺序不正确。
  4. 它产生错误,因为等值连接和非等值连接条件不能在同一 SELECT 语句中使用。

答案:B。

73.检查 EMPLOYEES 表的结构

Table EMPLOYEES

您想知道是否使用不同的 EMPLOYEE_ID 输入了任何员工的详细信息多次,方法是列出所有重复的姓名。您可以使用哪种方法获得所需的结果?

  1. 自连接
  2. 自身连接的全外部连接
  3. 自身连接的左外部连接
  4. 自身连接的右外部连接

答案:A。当必须将表连接到自身以检索所需数据时,使用自连接。在 FROM 子句中需要表别名才能执行自连接。

检查 DEPARTMENTS 和 LOCATIONS 表的结构,并回答以下第 74 和 75 题。

SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)
SQL> desc locations
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 LOCATION_ID		 NOT NULL NUMBER(4)
 STREET_ADDRESS 		  VARCHAR2(40)
 POSTAL_CODE			  VARCHAR2(12)
 CITY			 NOT NULL VARCHAR2(30)
 STATE_PROVINCE 		  VARCHAR2(25)
 COUNTRY_ID			  CHAR(2)

74.您需要找出尚未分配任何位置的部门。哪个查询会给出所需的结果?

  1. SELECT d.department_id , d.department_name FROM departments d JOIN locations l
    ON (d.location_id = l.location_id);
    
  2. SELECT d.department_id , d.department_name FROM departments d RIGHT OUTER JOIN locations l
    ON (d.location_id = l.location_id);
    
  3. SELECT d.department_id , d.department_name FROM departments d FULL JOIN locations l
    ON (d.location_id = l.location_id);
    
  4. SELECT d.department_id , d.department_name FROM departments d LEFT OUTER JOIN locations l
    ON (d.location_id = l.location_id);

答案:B。

75.您想列出所有未位于任何位置的部门以及部门名称。评估以下查询

SELECT d.department_id , d.department_name  ,l.location_id, l.city
FROM departments D __________________   location L 
ON (d.location_id = l.location_id);

在上述查询中的空白处可以使用哪些两个 JOIN 选项来给出正确的输出?

  1. JOIN
  2. NATURAL JOIN
  3. LEFT OUTER JOIN
  4. RIGHT OUTER JOIN

答案:A、C。

76.您需要生成一个报告,显示所有部门 ID,以及相应的员工(如果有)和奖金详细信息(如果有),适用于所有员工。哪个 FROM 子句给出所需的结果?(考虑给定的表结构)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> desc bonus
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER
 JOB_ID 			  VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
  1. FROM departments LEFT OUTER JOIN employees USING (department_id ) FULL OUTER JOIN bonus
  2. FULL OUTER JOIN department USING (department_id );
  3. FROM bonus JOIN employees USING (job_id )
  4. FROM employees FULL OUTER JOIN departments FULL OUTER JOIN bonus

答案:A.

77. 检查以下图表

Table BONUS Table DEPARTMENTS Table EMPLOYEES

您想生成一个报告,列出员工的 ID、他们相应的佣金和部门(如果有),无论佣金是否存在。评估以下查询

SELECT e.employee_id , bonus, department_name FROM bonus b_____________ employees
USING (job_id ) ____________ departments 
USING (department_id )
WHERE commission_pct  IS NOT NULL;

在上述查询中的空白处使用哪种连接组合才能给出正确的输出?

  1. JOIN; LEFT OUTER JOIN
  2. FULL OUTER JOIN; FULL OUTER JOIN
  3. RIGHT OUTER JOIN; LEFT OUTER JOIN
  4. LEFT OUTER JOIN; RIGHT OUTER JOIN

答案:A.

78.预测以下查询的结果。

SELECT e.salary, bonus
FROM employees E JOIN bonus b
USING (salary,job_id ); 
  1. 它成功执行。
  2. 它抛出错误,因为 SELECT 中的 bonus 未加别名
  3. 它抛出错误,因为 USING 子句不能超过 1 列。
  4. 它成功执行,但结果不正确。

答案:D.

查看图表并检查 EMPLOYEES、DEPARTMENTS、LOCATIONS 和 BONUS 的结构。回答以下第 79 和 80 题

Table BONUS Table DEPARTMENTS Table EMPLOYEES Table GRADE Table LOCATIONS

79.您需要列出苏黎世市的所有部门。您执行以下查询

SELECT D.DEPARTMENT_ID , D.DEPARTMENT_NAME  , L.CITY
FROM departments D JOIN LOCATIONS L
USING (LOC_ID,CITY) 
WHERE L.CITY = UPPER('ZURICH');

预测上述查询的结果。

  1. 它成功执行。
  2. 它给出错误,因为在 SELECT 语句中对 CITY 使用了限定符。
  3. 它给出错误,因为 SELECT 中的列名不匹配
  4. 它给出错误,因为 USING 子句包含 CITY,它不是匹配的列。

答案:D。USING 子句中只能使用匹配的列名。

80.回答以下给定查询后的问题

 
SELECT e.first_name, d.department_id , e.salary, b.bonus
FROM bonus b join employees e
USING (job_id )
JOIN department d
USING (department_id )
WHERE d.loc = 'Zurich';

您需要提取一份报告,该报告提供名为“ABC”的公司员工的姓名、部门编号、工资和奖金。以下哪个查询可以解决此问题?

  1. SELECT e.first_name, d.department_id , e.salary, b.bonus
    FROM bonus b join employees e join departments d
    on (b.job_id  = e.job_id )
    on (e.department_id =d.department_id )
    WHERE d.loc = 'Zurich';
    
  2. SELECT e.first_name, d.department_id , e.salary, b.bonus
    FROM bonus b join employees e
    on (b.job_id  = e.job_id )
    JOIN department d
    on (e.department_id =d.department_id )
    WHERE d.loc = 'Zurich';
    
  3. SELECT e.first_name, d.department_id , e.salary, b.bonus
    FROM employees e join bonus b
    USING (job_id )
    JOIN department d
    USING (department_id )
    WHERE d.loc = 'Zurich';
    
  4. 以上均不正确

答案:C。查询 A 会抛出语法错误,查询 B 会在 bonus 和 department 之间抛出无效标识符错误。

检查以下给出的图表,并回答以下第 81 至 85 题。

Table BONUS Table DEPARTMENTS Table EMPLOYEES

81.您需要找到那些工资超过 20000 的员工的经理姓名。以下哪个查询可以用于获取所需的结果?

  1. SELECT e.employee_id  "Employee", salary, employee_id , 
    FROM employees E JOIN employees M
    USING (e.manager_id  = m.employee_id )
    WHERE e.salary >20000; 
    
  2. SELECT e.employee_id  "Employee", salary, employee_id , 
    FROM employees E JOIN employees M
    USING (e.manager_id)
    WHERE e.salary >20000; 
    
  3. SELECT e.employee_id  "Employee", salary, employee_id , 
    FROM employees E  NATURAL JOIN employees M
    USING (e.manager_id = m.employee_id )
    WHERE e.salary >20000; 
    
  4. SELECT e.employee_id  "Employee", salary, employee_id , 
    FROM employees E JOIN employees M
    ON (e.manager_id = m.employee_id )
    WHERE e.salary >20000; 

答案:D.

82.您发出以下查询

SELECT e.employee_id ,d.department_id 
FROM employees e NATURAL JOIN department d NATURAL JOIN bonus b
WHERE department_id  =100;

关于此查询的结果,哪个陈述是正确的?

  1. 它成功执行。
  2. 它产生错误,因为 NATURAL 连接只能与两个表一起使用。
  3. 它产生错误,因为 NATURAL 连接中使用的列不能有限定符。
  4. 它产生错误,因为 NATURAL 连接中使用的所有列都应该有限定符。

答案:C。

83.您想显示所有员工姓名及其相应的经理姓名。评估以下查询

SELECT e.first_name "EMP NAME", m.employee_name "MGR NAME"
FROM employees e ______________ employees m
ON e.manager_id = m.employee_id ;

在上述查询中的空白处可以使用哪个 JOIN 选项来获取所需的输出?

  1. 简单内部 JOIN
  2. FULL OUTER JOIN
  3. LEFT OUTER JOIN
  4. RIGHT OUTER JOIN

答案:C。左外部连接包含连接左侧列出的表中的所有记录,即使在连接操作中未找到与其他表的匹配项也是如此。

考虑以下图表和以下查询以回答问题 84 和 85。(假设表 department 的列为 manager_id 和 department_name)

Table DEPARTMENTS
 
Select *
FROM employees e JOIN department d
ON (e.employee_id  = d.manager_id);

84.您需要显示一个句子“(first_name)(last_name) 是 (department_name) 部门的经理”。以下哪个 SELECT 语句将成功替换上述查询中的“*”以满足此要求?

  1. SELECT e.first_name||' '||e.last_name||' is manager of the '||d.department_name||' department.' "Managers"
  2. SELECT e.first_name, e.last_name||' is manager of the '||d.department_name||' department.' "Managers"
  3. SELECT e.last_name||' is manager of the '||d.department_name||' department.' "Managers"
  4. 以上均不正确

答案:A.

85.如果我们在上述查询中省略在 ON 子句后写入括号“()”,会发生什么情况?

  1. 它只会给出员工的姓名,并且经理的姓名将从结果集中排除
  2. 它将给出与括号“()”相同的结果
  3. 它会给出 ORA 错误,因为在使用 JOIN..ON 子句时必须写入括号“()”
  4. 以上均不正确

答案:B。括号不是必需的,但使用它们可以清楚地显示其中的条件。

86.以下哪个查询创建笛卡尔连接?

  1. SELECT title, authorid FROM books, bookauthor;
  2. SELECT title, name FROM books CROSS JOIN publisher;
  3. SELECT title, gift FROM books NATURAL JOIN promotion;
  4. 以上所有

答案:A,B。两个表之间的笛卡尔连接返回表中每一行所有可能的组合。可以通过在查询中不包含连接操作或使用 CROSS JOIN 来生成笛卡尔连接。

87.以下哪个运算符不允许在外连接中使用?

  1. AND
  2. =
  3. OR
  4. >

答案:C。Oracle 抛出异常“ORA-01719:外连接运算符(+)不允许在 OR 或 IN 的操作数中使用”

88.以下哪个查询包含等值连接?

  1. SELECT title, authorid FROM books, bookauthor WHERE books.isbn = bookauthor.isbn AND retail > 20;
  2. SELECT title, name FROM books CROSS JOIN publisher; 
  3. SELECT title, gift FROM books, promotion WHERE retail >= minretail AND retail <= maxretail;
  4. 以上均不正确

答案:A。当连接来自两个不同表的记录的数据完全匹配时(即,等值条件创建关系),就会创建等值连接。

89.以下哪个查询包含非等值连接?

  1. SELECT title, authorid FROM books, bookauthor WHERE books.isbn = bookauthor.isbn AND retail > 20;
  2. SELECT title, name FROM books JOIN publisher USING (pubid);
  3. SELECT title, gift FROM books, promotion WHERE retail >= minretail AND retail <= maxretail;
  4. 以上均不正确

答案:D。非等值连接根据不等式表达式匹配来自不同表的列值。源表中每一行中连接列的值与目标表中的相应值进行比较。如果基于不等式运算符的连接中使用的表达式计算结果为真,则会找到匹配项。构建此类连接时,会执行非等值连接。非等值连接使用 JOIN..ON 语法指定,但连接条件包含不等式运算符而不是等号。

90.以下 SQL 语句包含哪种类型的连接?

SELECT title, order#, quantity
FROM books FULL OUTER JOIN orderitems
ON books.isbn = orderitems.isbn;
  1. 等值
  2. 自连接
  3. 非等值
  4. 外连接

答案:D. 全外部连接包含两个表中的所有记录,即使在另一个表中找不到对应的记录。

91.以下哪个查询有效?

  1. SELECT b.title, b.retail, o.quantity FROM books b NATURAL JOIN orders od NATURAL JOIN orderitems o WHERE od.order# = 1005;
  2. SELECT b.title, b.retail, o.quantity FROM books b, orders od, orderitems o WHERE orders.order# = orderitems.order# AND orderitems.isbn=books.isbn AND od.order#=1005;
  3. SELECT b.title, b.retail, o.quantity FROM books b, orderitems o WHERE o.isbn = b.isbn AND o.order#=1005;
  4. 以上均不正确

答案:C。如果连接中的表具有别名,则所选列必须使用别名引用,而不是使用实际的表名。

92.给定以下查询。

SELECT zip, order#
FROM customers NATURAL JOIN orders;

以下哪个查询等价?

  1. SELECT zip, order# FROM customers JOIN orders WHERE customers.customer# = orders.customer#;
  2. SELECT zip, order# FROM customers, orders WHERE customers.customer# = orders.customer#;
  3. SELECT zip, order# FROM customers, orders WHERE customers.customer# = orders.customer# (+);
  4. 以上皆非

答案:B。自然连接指示 Oracle 识别源表和目标表之间名称相同的列。

93.检查给定的表结构。以下 SQL 语句中的哪一行会引发错误?

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)
1. SELECT e.first_name, d.department_name
2. FROM employees  e, department d
3. WHERE e.department_id=d.department_id
  1. 第 1 行
  2. 第 2 行
  3. 第 3 行
  4. 无错误

答案:A。如果查询在连接条件中使用别名,则它们的列应使用别名进行引用。

94.给定以下查询

SELECT lastname, firstname, order#
FROM customers LEFT OUTER JOIN orders
USING (customer#)
ORDER BY customer#;

以下哪个查询返回相同的结果?

  1. SELECT lastname, firstname, order# FROM customers c OUTER JOIN orders o ON c.customer# = o.customer# ORDER BY c.customer#;
  2. SELECT lastname, firstname, order# FROM orders o RIGHT OUTER JOIN customers c ON c.customer# = o.customer# ORDER BY c.customer#;
  3. SELECT lastname, firstname, order# FROM customers c, orders o WHERE c.customer# = o.customer# (+) ORDER BY c.customer#;
  4. 以上均不正确

答案:B,C。

95.以下哪些陈述是正确的?

  1. 组函数不能用于来自多个数据源的数据。
  2. 如果查询中连接了多个表,并且包含相同的列,则 Oracle 只选择其中一个。
  3. 自然连接用于根据相同的列连接来自两个表的行。
  4. A 和 B

答案:C。组函数可以在使用 Oracle 连接的查询上使用。不明确的列必须使用限定符引用。

96.以下 SQL 语句中的哪一行会引发错误?

1. SELECT name, title
2. FROM books JOIN publisher
3. WHERE books.pubid = publisher.pubid
4. AND
5. cost < 45.95
  1. 第 1 行
  2. 第 2 行
  3. 第 3 行
  4. 第 4 行

答案:C。由于表使用 JOIN 关键字连接,因此等值条件应使用 USING 子句编写,而不是 WHERE 子句。

97.给定以下查询

SELECT title, gift
FROM books CROSS JOIN promotion;

以下哪个查询等价?

  1. SELECT title, gift
    FROM books NATURAL JOIN promotion;
    
  2. SELECT title
    FROM books INTERSECT
    SELECT gift
    FROM promotion;
    
  3. SELECT title
    FROM books UNION ALL
    SELECT gift
    FROM promotion;
    
  4. SELECT title, gift
    FROM books, promotion;
    

答案:D。笛卡尔连接与交叉连接相同。

98.如果 CUSTOMERS 表包含 7 条记录,而 ORDERS 表包含 8 条记录,则以下查询产生多少条记录?

SELECT *
FROM customers CROSS JOIN orders;
  1. 0
  2. 56
  3. 7
  4. 15

答案:B。交叉连接是两个表中包含的行之间的叉积。

99.以下哪个 SQL 语句无效?

  1. SELECT b.isbn, p.name
    FROM books b NATURAL JOIN publisher p;
    
  2. SELECT isbn, name
    FROM books b, publisher p
    WHERE b.pubid = p.pubid;
    
  3. SELECT isbn, name
    FROM books b JOIN publisher p
    ON b.pubid = p.pubid;
    
  4. SELECT isbn, name
    FROM books JOIN publisher
    USING (pubid);
    

答案:A。不明确的列必须使用表限定符引用。

100.以下哪个选项列出了由名为“Printing Is Us”的出版商出版的所有书籍?

  1. SELECT title
    FROM books NATURAL JOIN publisher
    WHERE name = 'PRINTING IS US';
    
  2. SELECT title
    FROM books, publisher
    WHERE pubname = 1;
    
  3. SELECT *
    FROM books b, publisher p
    JOIN tables ON b.pubid = p.pubid
    WHERE name = 'PRINTING IS US';
    
  4. 以上皆非

答案:A。假设列 NAME 不包含在 BOOKS 表中,则查询 A 有效。

101.以下哪个 SQL 语句无效?

  1. SELECT isbn
    FROM books
    MINUS
    SELECT isbn
    FROM orderitems;
    
  2. SELECT isbn, name
    FROM books, publisher
    WHERE books.pubid (+) = publisher.pubid (+);
    
  3. SELECT title, name
    FROM books NATURAL JOIN publisher
    
  4. 以上所有 SQL 语句均有效。

答案:B。查询 B 抛出异常“ORA-01468:谓词只能引用一个外连接表”。

102.关于两个表之间的外连接,以下哪个陈述是正确的?

  1. 如果使用 WHERE 子句建立表之间的关系,则两个表都可以包含外连接运算符。

  2. 为了在结果中包含不匹配的记录,该记录将与不足表中的空记录配对。
  3. RIGHT、LEFT 和 FULL 关键字等效。
  4. 以上所有

答案:B。

103. 下面的 SQL 语句中哪一行会引发错误?

1. SELECT name, title
2. FROM books b, publisher p
3. WHERE books.pubid = publisher.pubid
4. AND
5. (retail > 25 OR retail-cost > 18.95);
  1. 第 1 行
  2. 第 3 行
  3. 第 4 行
  4. 第 5 行

答案:B. 由于查询中使用的表有限定符,因此必须使用相同的限定符来引用列。

104. 表别名的最大字符数是多少?

  1. 10
  2. 155
  3. 255
  4. 30

答案:D. 表别名最多可以包含 30 个字符。

105. 以下哪个 SQL 语句有效?

  1. SELECT books.title, orderitems.quantity
    FROM books b, orderitems o
    WHERE b.isbn= o.ibsn;
  2. SELECT title, quantity
    FROM books b JOIN orderitems o;
  3. SELECT books.title, orderitems.quantity
    FROM books JOIN orderitems
    ON books.isbn = orderitems.isbn;
    
  4. 以上皆非

答案:C。

广告