从多个表问题中获取数据

从多个表问题中获取数据


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

  1. 选择
  2. 投影
  3. 加盟
  4. 以上都不是

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

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

  1. 选择
  2. 通过…分组
  3. 订购者
  4. 加入

答案: D。Join 用于连接多个表,并从 Oracle 中的多个表中投影列数据。

3.以下哪个是最常用的多表join方法之一?

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

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

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

  1. 等值连接
  2. 简单加入
  3. 非等值连接
  4. 以上都不是

答案:C. Equijoins 使用相等运算符连接行,非 equijoins 使用不等运算符。

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. Equi-join 和 non-equijoin 是 Oracle DB 中的两种基本连接类型。

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

  1. 没有条件
  2. 两个表中的至少一列应该是公共的。
  3. 使用连接时,两个连接表中的列名应该相同
  4. 以上都不是

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

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

  1. 选择
  2. 在哪里
  3. 等值连接

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

11.在Oracle Joins方面,源表和目标表哪个正确?

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

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

12.Oracle DB 中的自然连接是什么?

  1. 源表和目标表的列名应该相同
  2. 如果源表和目标表的列名不同,Oracle 会隐式地做需要的
  3. NATURAL JOINS、USING 和 ON 是与 Natural Joins 相关的关键字
  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. 加入..ON
  2. NATURAL JOIN 或 JOIN…ON 子句
  3. A 和 B
  4. 以上都不是

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

18.在Oracle DB中,源表和目标表之间的不匹配行和匹配行可以使用以下哪项来获取?

  1. 等值连接
  2. 自加入
  3. 自然加入
  4. 外连接

答案: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 DB 中的 NATURAL JOIN 和 EQUI-JOIN 有什么区别?

  1. 没有区别
  2. 对于从两者获得的结果集,它们是相同的
  3. A 和 B
  4. 以上都不是

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

22.Oracle DB 中的 INNER JOIN 是什么?

  1. 提供两个表之间匹配记录的连接称为内部连接
  2. 内连接可以使用像 <,>, <> 这样的运算符
  3. A 和 B
  4. 以上都不是

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

23. Oracle DB 中的 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 DB 中的 ANSI SQL: 1999 语法而言,NATURAL JOINS 的正确之处是什么?

  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_id 的所有记录,无论它们是否匹配

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

26.以下哪个句法模型在世界范围内的软件系统中被广泛使用?

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

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

27.关于 Oracle DB 中的笛卡尔积,下列哪项是正确的?

  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 DB中的歧义列问题?

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

答案:C。去除 Ambiguous column 问题的语法是: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. 它将给出来自具有相同部门 ID 的两个表的所有匹配值
  2. 它将给出来自表员工的所有列和来自部门表的前 100 行
  3. 它会给出一个 ORA 错误:“b.department_id”无效标识符
  4. 以上选项都没有

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

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

  1. ON 子句可用于连接具有相同数据类型但不一定具有相同名称的列上的表
  2. USING 和 ON 子句仅用于 equijoins 和 non-equijoins
  3. ON 子句不能使用超过一个条件
  4. WHERE 子句可以写在 USING..ON 子句之后以应用附加条件

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

33.在Oracle DB中使用JOINS可以连接多少个表?

  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 JOINS 是一个好习惯

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

36.Oracle DB中的JOIN..ON子句正确的是什么?

  1. 与加入多个表时的 NATURAL JOINS 相比,它们不是很可靠
  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 在同一个 join 子句的上下文中是互斥的
  4. 查询不能在加入时组合 NATURAL JOIN 和 ON(或 USING)子句。

答案:C、D。

39.Oracle DB 中的 Non-equijoins 是什么?

  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 DB 中以下查询的结果是什么?

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 DB 中的自联接,什么是正确的?

  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 DB在什么场景下最适合使用Self-Joins?

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

答案:D。

46. Oracle DB 中的 NATURAL JOINS 是什么?

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

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

47. 必须提取一份报告,其中给出部门名称、部门 ID、部门城市和位置 ID,仅适用于部门 100 和 101。使用 NATURAL JOINS,以下哪个选项将提供所需的结果?

表部门
餐桌位置

  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 JOINS
  3. 如果多列名称相同但数据类型不匹配,可以使用USING
  4. 仅当列名及其数据类型相同时才应使用 NATURAL JOINS

答案:C、 D。NATURAL JOINS 和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 DB 中的 INNER JOINS 和 OUTER JOINS 的说法是什么?

  1. INNER JOIN 只返回匹配的行
  2. OUTER JOIN 只返回不匹配的行
  3. OUTER JOIN 返回匹配的行以及不匹配的行
  4. 以上都不是

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

51. Oracle DB 中的 FULL OUTER JOIN 是什么?

  1. 当 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 出现在同一个查询中时,称为 FULL OUTER JOIN
  2. FULL OUTER JOIN 与 OUTER JOIN 相同
  3. A 和 B
  4. 返回 INNER 连接和 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 子句没有来自部门的任何列
  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 DB中Outer Joins的格式?

  1. 剩下
  2. 中心
  3. 满的

答案:C。除了’Centre’,其余3种是Oracle DB中Outer Joins的格式类型。使用用于外连接的 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. 应添加 (100,101) 中的 e.department_id
  4. 以上都不是

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

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

  1. ON (e.department_id = d.department_id ) WHERE 工资 > 20000;
  2. 使用 (e.department_id) WHERE 工资 > 20000;
  3. 使用 (department_id) WHERE 薪水>20000;
  4. 工资>20000;

答案:D。

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

  1. 开启(部门 ID = 100);
  2. 使用(e.department_id = 100);
  3. WHERE d.department_id = 100;
  4. ON(e.department_id = d.department_id 和 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 子句中的非别名部门 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 . (+) 在等式的 LHS 上意味着它是一个右外连接,反之亦然。

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.在哪两种情况下应该使用OUTER JOIN?

  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 表的结构。对于哪种情况,您会使用非等连接查询?

表员工
表部门
表等级

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

答案: A.非相等连接建立基于相等条件以外的任何其他条件的关系。与非等式连接一起使用的范围值必须是互斥的。

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

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

答案: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 日之前招聘的所有员工的部门位置和员工姓名。

表部门
表员工
餐桌位置

您发出以下查询:

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. 它会产生错误,因为 equijoin 和非 equijoin 条件不能在同一个 SELECT 语句中使用。

答案:B。

73.检查 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. 加入
  2. 自然加入
  3. 左外连接
  4. 右外连接

答案: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 部门 LEFT OUTER JOIN 员工使用 (department_id ) FULL OUTER JOIN 奖金
  2. FULL OUTER JOIN 部门使用 (department_id );
  3. 从奖金加入员工使用(job_id)
  4. 来自员工 FULL OUTER JOIN 部门 FULL OUTER JOIN 奖金

答案:A。

77. 检查下列证物:

表奖金
表部门
表员工

您想要生成一个报告,列出员工 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. 加入; 左外连接
  2. 全外连接;全外连接
  3. 右外连接;左外连接
  4. 左外连接;右外连接

答案:A。

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

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

答案:D。

查看附件并检查员工、部门、地点和奖金的结构。回答下列 79 和 80 题:

表奖金
表部门
表员工
表等级
餐桌位置

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 将抛出一个在奖金和部门之间的无效标识符错误。

检查下面给出的附件并回答后面的问题 81 到 85。

表奖金
表部门
表员工

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. 简单的内连接
  2. 全外连接
  3. 左外连接
  4. 右外连接

答案:C。左外连接包括连接左侧列出的表中的所有记录,即使在连接操作中没有找到与其他表的匹配项。

考虑下面的图表和以下查询来回答问题 84 和 85。(假设表部门有 manager_id 和部门名称作为它的列)

表部门

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

84. 你需要显示一句“(first_name) (last_name) is manager of the (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. =
  2. 要么
  3. >

答案: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. 甲乙

答案: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。Cross join 是两个表中包含的行的叉积。

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. 为了在结果中包含不匹配的记录,该记录与缺陷表中的 NULL 记录配对。
  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。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁