SQL - 使用集合运算符的问题



1.下图表示哪个集合运算符?

Table UNION
  1. UNION
  2. UNION ALL
  3. INTERSECT
  4. MINUS

答案:A. 集合运算符用于组合两个(或多个)SELECT 语句的结果。Oracle 11g 中有效的集合运算符为 UNION、UNION ALL、INTERSECT 和 MINUS。当与两个 SELECT 语句一起使用时,UNION 集合运算符返回两个查询的结果。但是,如果存在任何重复项,则会将其删除,并且重复记录仅列出一次。要包含结果中的重复项,请使用 UNION ALL 集合运算符。INTERSECT 仅列出两个查询都返回的记录;MINUS 集合运算符从输出中删除第二个查询的结果,如果它们也存在于第一个查询的结果中。INTERSECT 和 MINUS 集合运算产生无重复的结果。

2.下图表示哪个集合运算符?

Table UNION_ALL
  1. UNION
  2. UNION ALL
  3. INTERSECT
  4. MINUS

答案:B. UNION ALL 返回来自两个查询的组合行,无需排序或删除重复项。

sql_certificate

3.下图表示哪个集合运算符?

Table INTERSECT
  1. UNION
  2. UNION ALL
  3. INTERSECT
  4. MINUS

答案:C. INTERSECT 仅返回两个查询结果集中都出现的行,并对其进行排序并删除重复项。

4.下图表示哪个集合运算符?

Table MINUS
  1. UNION
  2. UNION ALL
  3. INTERSECT
  4. MINUS

答案:D. MINUS 仅返回第一个结果集中未出现在第二个结果集中的行,并对其进行排序并删除重复项。

5.关于集合运算符,以下哪一项是正确的?

  1. 它们更改行的值
  2. 它们将仅两个组成查询的结果组合成一个结果
  3. 它们将 10 个组成查询的结果组合成两个结果集。
  4. 它们将两个或多个组成查询的结果组合成一个结果

答案:D. 集合运算符用于组合两个(或多个)SELECT 语句的结果。Oracle 11g 中有效的集合运算符为 UNION、UNION ALL、INTERSECT 和 MINUS。

6.包含集合运算符的查询称为什么?

  1. 子查询
  2. 相关子查询
  3. GROUP BY 查询
  4. 复合查询

答案:D.

7.关于 UNION 运算符,以下哪一项是正确的?

  1. 它返回组合查询中的行以及 NULL 值
  2. 它在消除重复项后返回组合查询的行
  3. 它返回组合查询的行以及重复值
  4. 它返回组合查询的行,忽略 NULL 值

答案:B. UNION 返回来自两个查询的组合行,对其进行排序并删除重复项。

8.关于 UNION ALL 运算符,以下哪一项是正确的?

  1. 它返回组合查询中的行以及 NULL 值
  2. 它在消除重复项后返回组合查询的行
  3. 它返回组合查询的行以及重复值
  4. 它返回组合查询的行,忽略 NULL 值

答案:C. UNION ALL 返回来自两个查询的组合行,无需排序或删除重复项。

9.关于 INTERSECT 运算符,以下哪一项是正确的?

  1. 它返回组合查询中的行以及 NULL 值
  2. 它在消除重复项后返回组合查询的行
  3. 它返回组合查询中的公共行
  4. 以上都不是

答案:C. INTERSECT 仅返回两个查询结果集中都出现的行,并对其进行排序并删除重复项。

10.关于 MINUS 运算符,以下哪一项是正确的?

  1. 它返回第一个查询中的行,但不是第二个查询中的行
  2. 它返回第二个查询中的行,但不是第一个查询中的行
  3. 它返回组合查询中的重复行
  4. 它返回组合查询的行,忽略 NULL 值

答案:A. MINUS 仅返回第一个结果集中未出现在第二个结果集中的行,并对其进行排序并删除重复项。

11.集合运算符 UNION、UNION ALL、INTERSECT 和 MINUS 的优先级是什么?

  1. UNION、UNION ALL、INTERSECT 和 MINUS
  2. MINUS、UNION、UNION ALL 和 INTERSECT
  3. INTERSECT、MINUS、UNION ALL、UNION
  4. 优先级相同

答案:D. 集合运算符具有相同的优先级。

12.集合运算符的求值顺序是什么?

  1. 从左到右
  2. 从右到左
  3. 随机求值
  4. 从上到下

答案:A, D. 假设没有使用括号对查询进行分组,则集合运算符将从上到下、从左到右水平求值。

13.在以下哪种情况下,应指定括号?

  1. 当 INTERSECT 与其他集合运算符一起使用时
  2. 当 UNION 与 UNION ALL 一起使用时
  3. 当 MINUS 用于查询时
  4. 以上都不是

答案:A. 当 INTERSECT 与其他运算符一起使用时,使用括号将明确更改求值顺序。

14.当使用集合运算符时,关于 SELECT 子句,以下哪一项是正确的?

  1. 对所选列没有限制
  2. SELECT 子句中使用的列、表达式在组合查询中的数量必须匹配
  3. SELECT 子句中使用的列、表达式在第一个查询中必须为 N,在后续组合查询中必须为 N-1
  4. B 和 C 都是

答案:B. 使用集合运算符时,所有组合都应具有相同数量的列。构成复合查询的查询中的对应列必须属于相同的数据类型组。

15.关于集合运算符,以下哪一项是正确的?

  1. SELECT 子句应具有相同数量的列,数据类型可以不同
  2. 集合运算符只能用于组合两个查询
  3. 第二个查询中每列的数据类型必须与第一个查询中其对应列的数据类型匹配。
  4. 以上都不是

答案:C. 使用集合运算符时,所有组合都应具有相同数量的列。构成复合查询的查询中的对应列必须属于相同的数据类型组。

16.在使用集合运算符的情况下,ORDER BY 子句可以在哪里使用?

  1. 在每个要组合的查询中
  2. 仅在第一个查询中
  3. 在复合查询的最后
  4. 以上都不是

答案:C. 如果在使用集合运算符连接的任何查询之间使用 ORDER BY 子句,则会抛出 ORA 错误。

17.关于在 WHERE 子句中包含集合运算符的查询,以下哪一项是正确的?

  1. 这些查询的 SELECT 子句中必须具有相同数量和数据类型的列。
  2. WHERE 子句查询和主 SELECT 中使用的列数可以不同
  3. WHERE 子句中使用的列数应相同,数据类型可以不同
  4. 以上都不是

答案:A. 使用集合运算符时,所有组合都应具有相同数量的列。构成复合查询的查询中的对应列必须属于相同的数据类型组。

18.关于第二个查询中的列相对于第一个查询中的列,以下哪一项是正确的?

  1. 第二个查询中的列必须与第一个查询中对应列的数据类型组相同
  2. 如果第一个查询中的列为 NUMBER,则第二个查询中对应列应为 VARCHAR2
  3. 如果第一个查询中的列为 NUMBER,则第二个查询中对应列也应为 NUMBER。
  4. 以上都不是

答案:A, C.

19.关于集合运算符,以下哪一项是正确的?

  1. 集合运算符不能用于子查询
  2. 集合运算符只能用于 WHERE 子句
  3. ORDER BY 可以用于所有由集合运算符组合的查询
  4. 集合运算符可以在子查询中使用

答案:D.

20.考虑到集合运算符具有相同的优先级,更改其优先级的最佳方法是什么?

  1. 可以更改集合运算符的使用顺序以更改优先级
  2. 相同的优先级无法更改
  3. 可以使用括号更改优先级
  4. 以上都不是

答案:C. 可以使用括号对特定查询进行分组,以明确更改优先级。在执行过程中,括号优先于其他集合运算符。

21.关于重复值和集合运算符,可以说什么?

  1. 没有集合运算符显示重复值
  2. 所有集合运算符都可以显示重复值
  3. 只有 UNION ALL 运算符显示重复值
  4. 以上都不是

答案:C. UNION、INTERSECT 和 MINUS 自动消除重复值

检查 EMPLOYEES 和 DEPARTMENTS 表的结构,并考虑以下查询以及回答问题 22 和 23。

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 e
UNION 
SELECT department_id 
FROM departments

22.此查询的结果将显示什么?

  1. 它将显示 EMPLOYEES 和 DEPARTMENTS 表中共同包含的不同部门 ID
  2. 它将抛出 ORA 错误
  3. 没有选定的行
  4. 以上都不是

答案:A. UNION 返回来自两个查询的组合行,对其进行排序并删除重复项。

23.关于上述查询,以下哪一项是正确的?

  1. 此查询返回 ORA 错误
  2. 它成功执行但没有结果
  3. 来自不同表的查询不能与集合运算符一起使用
  4. 查询成功执行并按预期给出结果

答案:D. 复合查询是由使用不同表的多个查询组成的查询。

24.使用 UNION ALL 运算符时,结果的默认排序顺序是什么?

  1. 降序
  2. 升序
  3. A 或 B 均可

  4. 以上所有

答案:B。复合查询默认情况下会返回按所有列排序的行,从左到右按升序排序。唯一的例外是 UNION ALL,其中行不会排序。允许使用 ORDER BY 子句的唯一位置是复合查询的末尾。

25.如果 SELECT 中的列为 CHAR 且长度相等,则复合查询的输出是什么?

  1. 输出将具有长度相等的 VARCHAR2 数据类型
  2. 输出将具有长度相等的 CHAR 数据类型
  3. 输出将具有不同长度的 CHAR 数据类型
  4. 输出将具有长度相等的 NUMBER 数据类型

答案:B。构成复合查询的查询中的列可以具有不同的名称,但输出结果集将使用第一个查询中列的名称。构成复合查询的查询中的对应列必须属于同一数据类型组。

26.如果 SELECT 中的列为 CHAR 且长度不同,则复合查询的输出是什么?

  1. 输出将具有长度相等的 VARCHAR2 数据类型
  2. 输出将具有长度相等的 CHAR 数据类型
  3. 输出将具有不同长度的 CHAR 数据类型
  4. 输出将具有 VARCHAR2 数据类型,其长度为较大的 CHAR 值

答案:D。虽然选定的列列表不必完全相同的数据类型,但它们必须来自同一数据类型组。复合查询的结果集将包含具有更高精度级别的列。

27.如果一个或两个查询都选择 VARCHAR2 的值,则复合查询的输出是什么?

  1. 输出将具有 VARCHAR2 数据类型。
  2. 输出将具有长度相等的 CHAR 数据类型
  3. 输出将具有不同长度的 CHAR 数据类型
  4. 输出将具有 VARCHAR2 数据类型,其长度为较大的 CHAR 值

答案:A。虽然选定的列列表不必完全相同的数据类型,但它们必须来自同一数据类型组。复合查询的结果集将包含具有更高精度级别的列。

28.如果复合查询选择数值数据,则以下哪项为真?

  1. 数值和运算符将具有相同的优先级
  2. 返回值将由数值优先级决定
  3. 返回值将为 NUMBER 数据类型
  4. 以上都不是

答案:B、C。虽然选定的列列表不必完全相同的数据类型,但它们必须来自同一数据类型组。复合查询的结果集将包含具有更高精度级别的列。

29.如果复合查询的 SELECT 列表同时返回 VARCHAR2 和 NUMBER 数据类型的结果,将会发生什么?

  1. Oracle 将隐式转换它们并返回 VARCHAR2 数据类型的结果
  2. Oracle 将隐式转换它们并返回 NUMBER 数据类型的结果
  3. 抛出 ORA 错误
  4. 以上都不是

答案:C。Oracle 不会隐式转换数据类型。

30.关于 UNION 运算符,以下哪项为真?

  1. 它会消除重复值,忽略 NULL 值
  2. 它会返回重复值,忽略 NULL 值
  3. 它会返回重复值,包括 NULL 值
  4. 它会消除重复值,并且不忽略 NULL 值

答案:D。使用 UNION 运算符时,不会忽略 NULL 值。

31.对于使用 UNION 运算符的 SQL 查询的列名和列,可以说什么?

  1. 列名应相同
  2. 列名和数据类型应相同
  3. 列名不必相同
  4. 以上都不是

答案:C。构成复合查询的查询中的列可以具有不同的名称,但输出结果集将使用第一个查询中列的名称。

考虑以下 JOB_HISTORY 表的示例以及随后的查询。回答查询下方的问题 32 和 33。

SQL> desc job_history
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 START_DATE		 NOT NULL DATE
 END_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 DEPARTMENT_ID			  NUMBER(4)
SELECT employee_id , first_name, last_name, job_id
FROM employees E
UNION
SELECT employee_id , first_name, last_name, job_id
From job_history;

32.上述查询将显示每个员工多少次?

  1. 0
  2. 1
  3. 2
  4. 4

答案:B. UNION 返回来自两个查询的组合行,对其进行排序并删除重复项。

33.上述查询的结果是什么?

  1. 它显示员工的当前和以前的工作详细信息两次
  2. 它仅显示员工的当前和以前的工作详细信息一次
  3. A 或 B 均可

  4. 以上都不是

答案:B。

检查给定的表结构,并考虑以下查询,并回答接下来的问题 34 到 37。

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 job_history
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 START_DATE		 NOT NULL DATE
 END_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 DEPARTMENT_ID			  NUMBER(4)
SELECT employee_id , job_id, department_id 
FROM employees
UNION
SELECT employee_id , job_id, department_id 
From job_history;

34.假设员工 ID 为 121 的员工在其任职期间担任过 2 个职位。考虑到上述查询,他的记录在结果中将显示多少次?

  1. 一次
  2. 两次
  3. 三次
  4. 以上都不是

答案:B。UNION 返回两个查询的组合行,对它们进行排序并删除重复项。重复性由列的组合来衡量,而不是单独的列。

35.假设员工 ID 为 121 的员工在公司的两个不同部门(10 和 20)担任过两个职位。他在部门 10 和 20 中都担任过“SA_REP”的职位。上述查询的结果是什么?

  1. 2 行
  2. 3 行
  3. 无行
  4. ORA 错误

答案:B。

36.哪种陈述最能描述从问题 34 和 35 中得出的推论?

  1. 职位代码存在重复值
  2. 查询执行,但生成的结果出乎意料
  3. 部门不存在重复值
  4. 以上都不是

答案:C。由于职位代码和部门的组合是唯一的,因此没有获得重复项。

37.查询获得的结果集将如何排序?

  1. 按员工 ID 降序排序
  2. 按职位 ID 降序排序
  3. 按员工 ID 升序排序
  4. 按部门 ID 升序排序

答案:C。默认排序将基于第一列(在本例中为员工 ID)按升序排序。但是,可以通过在末尾放置单个 ORDER BY 子句来修改此行为。

38.要从组件查询中获取重复记录,将使用以下哪个运算符?

  1. UNION
  2. UNION ALL
  3. MINUS
  4. 以上都不是

答案:B。UNION ALL 不会消除重复值。

39.UNION 和 UNION ALL 运算符之间有什么区别?

  1. 没有区别
  2. UNION ALL 也显示重复值
  3. 在 UNION ALL 的情况下,输出默认情况下不排序
  4. 以上都不是

答案:B、C。当与两个 SELECT 语句一起使用时,UNION 集运算符返回两个查询的结果。但是,如果存在任何重复项,则会删除它们,并且重复记录仅列出一次。要在结果中包含重复项,请使用 UNION ALL 集运算符。

40.关于 INTERSECT 运算符,以下哪项为真?

  1. 组件查询中列的数量和数据类型应相同
  2. 组件查询中列的名称和数据类型应相同
  3. A 和 B 均正确
  4. 以上都不是

答案:A。这是 SET 运算符的常用属性标准功能。

41.如果使用 INTERSECT 时更改相交表的顺序,则可以对结果集说什么?

  1. 结果会更改
  2. 结果保持不变
  3. 更改后排序会改变
  4. 以上都不是

答案:B。

42.以下关于 INTERSECT 运算符的哪一项为真?

  1. 它会忽略 NULL 值
  2. 它不会忽略 NULL 值
  3. 它会返回第一个组件查询中的所有行
  4. 以上都不是

答案:B。

回答下面给出的相关问题 43 和 44。

43.您需要显示那些当前职位名称与其之前职位名称相同的员工的姓名和职位 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 job_history
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 START_DATE		 NOT NULL DATE
 END_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 DEPARTMENT_ID			  NUMBER(4)
  1. SELECT employee_id , job_id, first_name, last_name
    FROM employees
    UNION
    SELECT employee_id , job_id, first_name, last_name
    FROM job_history;
  2. SELECT employee_id , job_id, first_name, last_name
    FROM employees
    INTERSECT
    SELECT employee_id , job_id, first_name, last_name
    FROM job_history;
  3. SELECT employee_id , job_id, first_name, last_name
    FROM employees
    UNION ALL
    SELECT employee_id , job_id, first_name, last_name
    FROM job_history;
  4. 以上都不是

答案:B。

44.考虑到上述查询(即问题 43 中的选项 B),如果在 SELECT 子句中也包含部门 ID,结果将是什么?

  1. 结果将相同
  2. 结果将不同
  3. 结果将相同,但顺序将不同
  4. 以上都不是

答案:A。结果可以解释为——在同一部门担任过相同职位名称的员工。

45.关于 MINUS 运算符,以下哪项为真?

  1. 它会返回所有组件查询中的所有行
  2. 它仅返回所有组件查询中的公共行
  3. 它会返回第一个查询中的所有行,而不是后续查询中的行
  4. 它会返回第一个查询选择的所有不同行,但不在后续查询中

答案:D。MINUS 集运算符会从输出中删除第二个查询的结果,如果这些结果也存在于第一个查询的结果中。

46.当使用 MINUS 运算符时,可以对组件查询的列数和数据类型说些什么?

  1. 它们应相同,数据类型可能不同,但它们应属于同一数据类型组。
  2. 它们应相同,包括列名
  3. A 和 B 均正确
  4. 以上都不是

答案:A。SET 运算符的常用功能。

47.您需要显示那些在公司任职期间从未更换过工作的员工的员工 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 job_history
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 START_DATE		 NOT NULL DATE
 END_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 DEPARTMENT_ID			  NUMBER(4)
  1. SELECT employee_id 
    FROM employees
    UNION
    SELECT employee_id 
    FROM job_history;
  2. SELECT employee_id 
    FROM employees
    INTERSECT
    Select employee_id 
    FROM job_history;
  3. SELECT employee_id 
    FROM employees
    MINUS
    Select employee_id 
    FROM job_history;
  4. SELECT employee_id 
    FROM employees
    UNION ALL
    SELECT employee_id 
    FROM job_history;

答案:C。

检查给定的表结构,并考虑以下查询,回答接下来的问题 48 和 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 job_history
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 START_DATE		 NOT NULL DATE
 END_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 DEPARTMENT_ID			  NUMBER(4)
SELECT employee_id , first_name, job_id
FROM employees
UNION
SELECT employee_id , NULL "first_name", job_id
FROM job_history;

48.关于上述查询,以下哪项为真?

  1. 它会抛出错误,因为无法使用 TO_CHAR (NULL)
  2. 它成功执行并为员工的 ID、first_name 和当前职位角色提供值,包括重复行
  3. 它成功执行并为员工的 ID、first_name 和员工担任的所有职位提供值,不包括重复行
  4. 以上都不是

答案:C。每个查询必须包含相同数量的列,这些列按位置进行比较。在同一复合查询中,可以使用 NULL 代替另一个查询中缺少的列。

49.考虑到上述查询,如果将 UNION 运算符替换为 MINUS 运算符,结果将意味着什么?

  1. 结果显示在 JOB_HISTORY 表中具有条目的员工
  2. 结果显示在 JOB_HISTORY 表中没有条目,但在 EMPLOYEES 表中存在的员工
  3. A 或 B 均可
  4. 以上都不是

答案:B。MINUS 提供在第一个查询中存在但在第二个查询中不存在的唯一结果。

考虑以下给出的示例,并回答接下来的问题 50 和 51。

Table AUDIT_YEARLY Table AUDIT

50.以下查询的结果是什么?

SELECT AU_DETAILS 
FROM AUDIT
UNION
SELECT AU_DETAILS
FROM AUDIT_YEARLY;
  1. 它成功执行并给出正确的结果,包括重复值
  2. 它成功执行并给出正确的结果,不包括重复值
  3. 它会抛出 ORA 错误
  4. 以上都不是

答案:C。使用 UNION 集运算符时,CLOB 或 LONG 列不能位于 SELECT 子句中。

51.如果将 UNION 替换为 UNION ALL,查询的结果是什么?

  1. 它将成功执行并给出正确的结果,包括重复值。
  2. 它会抛出 ORA 错误
  3. 它将成功执行并给出正确的结果,不包括重复值。
  4. 它成功执行,但给出错误的结果。

答案:B. 当UNION、UNION ALL、INTERSECT和MINUS操作符与LONG或CLOB列一起使用时,会抛出错误。

52.假设有4个组件查询。可以使用多少个SET操作符将它们组合成一个复合查询?

  1. 1
  2. 2
  3. 4
  4. 3

答案:D. 要使用的SET操作符的数量为N-1,其中N是组件查询的数量。

53.由于SET操作符的使用涉及两个或多个基于列而不是基于行的SELECT语句,因此SET操作符被称为什么?

  1. 水平连接
  2. 笛卡尔连接
  3. 垂直连接
  4. 外部连接

答案:C。

54.UNION和INTERSECT操作符之间有什么区别?(只选择最佳区别)

  1. UNION将两个组件查询的结果组合成一个包含重复值的结果集。
  2. INTERSECT仅返回两个组件查询都返回的行。
  3. UNION给出组件查询中的唯一值,INTERSECT给出组件查询中的公共值。
  4. B 和 C 都是

答案:C。

检查EMPLOYEES表的结构并考虑以下查询。回答后面的问题55到60。

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 *
FROM EMPLOYEES 
where department_id = 10
查询2
SELECT *
FROM EMPLOYEES  E
where E.job_id IN (select first_name  from EMPLOYEES  E1 where E1.job_id = 'CLERK' and E.job_id  = E1.job_id )

55.您需要提取一个报告,其中显示两个查询的结果。要获得所需的结果,应使用以下哪个操作符?

  1. UNION
  2. UNION ALL
  3. INTERSECT
  4. 以上都不是

答案:B. UNION ALL 返回来自两个查询的组合行,无需排序或删除重复项。

56.您需要显示所有重复值以及两个查询结果集中存在的所有值。在上面给出的查询中,您可以使用以下哪个SET操作符?

  1. INTERSECT
  2. UNION
  3. MINUS
  4. 以上都不是

答案:D. UNION ALL将给出包含重复值的未排序结果。

57.使用UNION和UNION ALL集合操作符时,结果集之间有什么区别?

  1. UNION ALL的结果集经过过滤,包括重复值。
  2. UNION的结果集经过过滤和排序,包括重复值。
  3. UNION ALL的结果集未排序,并且包含重复值。
  4. UNION的结果集经过过滤和排序,不包含重复值。

答案:C,D。

58.UNION操作符对数据库的开销大于UNION ALL。此语句中有什么错误?

  1. 该语句是正确的。
  2. UNION ALL操作符对数据库的开销大于UNION操作符。
  3. UNION需要排序并消除重复项,这会导致额外的开销。
  4. 以上都不是

答案:A,C. UNION需要执行比UNION ALL更多的任务,因为它对结果集进行排序和去重。因此,建议除非需要不同的行,否则应使用UNION ALL。

59.如果使用INTERSECT操作符组合上面给出的两个查询,结果会怎样?

  1. 它将仅显示部门10中的职员。
  2. 它将显示所有在部门10中的员工。
  3. 它将显示所有职员。
  4. 以上都不是

答案:A. INTERSECT返回查询1和查询2中都存在的结果。

60.INTERSECT和UNION操作符之间有什么区别?

  1. INTERSECT遵循“AND”布尔逻辑,UNION遵循“OR”布尔逻辑。
  2. UNION遵循“OR”布尔逻辑,而INTERSECT遵循“AND”逻辑。
  3. A 或 B 均可
  4. 以上都不是

答案:A。

61.在以下哪个SET操作符中,更改组件查询的顺序会更改结果集?

  1. UNION
  2. UNION ALL
  3. MINUS
  4. INTERSECT

答案:C. MINUS仅返回第一个结果集中未出现在第二个结果集中的行,对它们进行排序并删除重复项。

考虑以下查询并回答后面的问题62到66。

SELECT 4 from dual
INTERSECT
SELECT 1 from dual;

62.给定查询的结果是什么?

  1. 无行
  2. 4
  3. 1
  4. NULL

答案:A. 不会选择任何行,因为INTERSECT操作符不会从两个查询中获得任何公共结果 - INTERSECT操作符给出查询1和查询2中都存在的公共结果。

63.如果用MINUS操作符替换INTERSECT操作符,结果会怎样?

  1. 3
  2. 4
  3. 0
  4. 1

答案:B. MINUS给出存在于第一个查询中但不存在于第二个查询中的结果。

64.如果用UNION操作符替换INTERSECT操作符,上面查询的结果会怎样?

  1. 1

    4

  2. 4

    1

  3. NULL
  4. 0

答案:A. UNION将在结果集中生成唯一的行,并按升序排列。

65.如果用UNION ALL操作符替换INTERSECT操作符,上面查询的结果会怎样?

  1. 4

    1

  2. 0
  3. NULL
  4. 1

    4

答案:A. UNION ALL按查询中排列的位置显示结果,不进行排序。

66.如果上面查询修改如下,结果会怎样?

SELECT 1 from dual
UNION ALL
SELECT 4 from dual;
  1. 1

    4

  2. 4

    1

  3. NULL
  4. 以上都不是

答案:A。

检查JOB_HISTORY_ARCHIVE表的结构。它是JOB_HISTORY表的备份表,没有额外的列。假设两个表的数据不同,请考虑以下查询并回答后面的问题67到70。

Table JOB_HISTORY_ARCHIVE
SQL> desc job_history
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 START_DATE		 NOT NULL DATE
 END_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 DEPARTMENT_ID			  NUMBER(4)
 
(SELECT * FROM job_history;
MINUS
SELECT * FROM job_history_archive)
UNION ALL
(SELECT * FROM job_history_archive
MINUS
SELECT * FROM job_history;);

67.上面给定查询的结果是什么?(选择最佳答案)

  1. 它将返回两个表中不同的行。
  2. 它将返回两个表中的公共行。
  3. 它将返回两个表中的所有行。
  4. 以上都不是

答案:A。

68.如果上面给定的查询仅产生JOB_HISTORY表中的行,可以得出什么结论?

  1. 这表明JOB_HISTORY包含两行与JOB_HISTORY_ARCHIVE表不同。
  2. 这表明JOB_HISTORY和JOB_HISTORY_ARCHIVE表中有两行相同。
  3. 这表明JOB_HISTORY_ARCHIVE包含两行与JOB_HISTORY表不同。
  4. 以上都不是

答案:A。

69.如果上面查询没有结果,可以说什么?

  1. 这表明两个表具有相同的数据。
  2. 这表明组件查询放置错误。
  3. 这表明在复合查询中错误地使用了SET操作符。
  4. 以上都不是

答案:A。

70.关于上面给定的查询,如果两个表中存在重复记录,应该对上面给定的查询进行哪些修改?

  1. COUNT(*)
  2. COUNT(*)和GROUP BY employee_id
  3. COUNT (*)和ORDER BY employee_id
  4. 以上都不是

答案:B. COUNT(*)可用于查看两个表之间的差异。

考虑以下查询

SELECT 1 NUM, 'employee' TEXT FROM dual
UNION
SELECT TO_CHAR(NULL) NUM, 'departments' TEXT FROM dual;

71.上面给定查询的结果是什么?

  1.        NUM TEXT
    ---------- -----------
             1 employee
               departments
  2.        NUM TEXT
    ---------- -----------
             1 employee
          NULL departments
  3. ORA 错误
  4.        NUM TEXT
    ---------- -----------
               departments
             1 employee

答案:C. 这里将数值1与字符NULL进行比较,这将抛出错误“ORA-01790: 表达式必须与相应的表达式具有相同的数据类型”。

考虑以下查询并回答后面的问题72和73。

SELECT months_between (sysdate, to_date('21-MAY-2013','DD-MON-YYYY')) FROM dual
UNION
SELECT TO_date(NULL) NUM FROM dual;

72.上面给定查询的结果是什么?(假设SYSDATE是2013年7月1日)

  1. 它成功执行并给出正确的结果。
  2. 它成功执行但没有结果。
  3. 它会抛出 ORA 错误
  4. 以上都不是

答案:C. NUMBER和DATE不属于相同的数据类型,因此失败。这里将MONTHS_BETWEEN获得的数字与DATE进行比较,因此会发生错误。

73.假设第二个查询中的SELECT语句修改如下

SELECT to_number (NULL) NUM FROM dual;

由于此更改,结果会怎样?

  1. 它成功执行并给出正确的结果。
  2. 它成功执行但没有结果。
  3. 它会抛出 ORA 错误
  4. 以上都不是

答案:A。

74.检查表结构并考虑以下查询

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 job_history
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 START_DATE		 NOT NULL DATE
 END_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 DEPARTMENT_ID			  NUMBER(4)
SELECT employee_id  "Employee ID"
FROM employees
UNION
SELECT employee_id  "EMP ID"
FROM job_history;

结果集中将显示以下哪个列标题?

  1. EMP ID
  2. Employee ID
  3. EMPLOYEE_ID
  4. 由于列名在组件查询中必须相同,因此会发生ORA错误。

答案:B. 构成复合查询的查询中的列可以具有不同的名称,但输出结果集将使用第一个查询中列的名称。

检查给出的两个表结构并考虑以下查询,并回答后面的问题75和76。

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 job_history
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 START_DATE		 NOT NULL DATE
 END_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 DEPARTMENT_ID			  NUMBER(4)
SELECT employee_id 
FROM employees e
UNION
SELECT employee_id 
FROM job_history j
ORDER BY j.employee_id ;

75.上面给定查询的结果是什么?

  1. 结果将按JOB_HISTORY表中的员工ID排序。
  2. 结果将按EMPLOYEES表中的员工ID排序。
  3. 结果将不会排序。
  4. ORA 错误

答案:D. ORDER BY应基于第一个查询中的列名进行,而不是基于第二个查询中的列名。

76.以下哪个ORDER BY子句可以替换上面查询中错误的ORDER BY?

  1. ORDER BY e.employee_id
  2. ORDER BY j.2
  3. ORDER BY 1
  4. 以上都不是,在查询中不允许使用ORDER BY。

答案:C. 这是一个更通用的规范,Oracle将根据第一个查询的第一列进行排序。

77.考虑以下示例并回答下面的问题

Table AUDIT_YEARLY Table AUDIT
SELECT au_doc
From audit
UNION
SELECT au_doc
From audit_yearly;

上面给定查询的结果是什么?

  1. 它给出两个表之间的审计文档。
  2. 它在执行时会发生ORA错误。
  3. 它给出AUDIT表中的审计文档。
  4. 以上都不是

答案:B. LONG列不能与SET操作符一起使用。

78.考虑以下查询

SELECT col_1
From TABLE (package1.proc1)
UNION
SELECT col_1
From TABLE (package2.proc2);

上面给定查询的结果是什么?

  1. 它成功执行并包含重复项。
  2. 它成功执行,不包含重复项。
  3. 它会抛出 ORA 错误
  4. 以上都不是

答案:C. TABLE表达式不能与SET操作符一起使用。

检查给出的两个表结构并考虑以下查询。回答后面的问题79和80。

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 job_history
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 START_DATE		 NOT NULL DATE
 END_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 DEPARTMENT_ID			  NUMBER(4)
SELECT employee_id , job_id
FROM employees E
UNION
SELECT employee_id , job_id
FROM job_history J
FOR UPDATE OF job_id;

79.查询执行时会发生什么?

  1. ORA 错误
  2. Employee_id和job_id
  3. Employee_id
  4. 以上都不是

答案:A. FOR UPDATE子句不能与使用SET操作符组合的查询一起使用。

80.以下查询的结果是什么?

SELECT * from employees
UNION
SELECT job_id FROM job_history;;
  1. 它将给出employees表中的所有列以及job_history表中仅job_id列。
  2. 它将抛出错误,因为组件查询中的列数应匹配。
  3. 既不是B也不是C。
  4. 以上都不是

答案:B。

81.如果在一个SQL语句中使用UNION、UNION ALL、INTERSECT,以下关于SQL语句的说法哪个是正确的?

  1. UNION、UNION ALL将首先执行,然后结果集将进入INTERSECT语句。
  2. INTERSECT的执行将先于UNION和UNION ALL的执行。
  3. 执行将从右到左进行,同时考虑所有操作符。
  4. 执行将从左到右进行,同时考虑所有操作符。

答案:D.

82.考虑以下查询并回答后面的问题

SELECT '3' FROM dual
INTERSECT
SELECT 3f FROM dual;

关于上面给定查询的执行,哪个说法是正确的?

  1. 它成功执行。
  2. 它抛出错误。
  3. 它给出结果3。
  4. 它给出结果3f。

答案:B. 字符字面量必须用单引号括起来。

83.以下关于 SQL 查询中使用的集合运算符的说法,哪一项是错误的?

  1. 当用于数据类型为 LONG 的列时,集合运算符有效。
  2. 集合运算符对类型为 BLOB、CLOB、BFILE、VARRAY 或嵌套表的列无效。
  3. 为了使包含表达式的 select 查询有效,应提供列别名以便在 order_by_clause 中引用它。
  4. 在包含 TABLE 集合表达式的 SELECT 语句中,不能使用这些运算符。

答案:A. 集合运算符不支持 LONG、CLOB 和 BLOB 数据类型。

84.检查给定的表结构并评估以下 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)
SELECT employee_id , last_name "Last Name"
FROM employees
WHERE department_id  = 100
UNION
SELECT employee_id  EMPLOYEE_NO, last_name
FROM employees
WHERE department_id  = 101;

哪些 ORDER BY 子句对上述查询有效?(选择所有适用的选项。)

  1. ORDER BY 2,1
  2. ORDER BY EMPLOYEE_NO
  3. ORDER BY 2, employee_id
  4. ORDER BY "EMPLOYEE_NO"

答案:A, C. ORDER BY 子句必须通过其位置或第一个查询引用的名称来引用列。

85.使用 SET 运算符组合的两个查询中,要排除第二个查询中的列,可以使用哪个子句?

  1. GROUP BY
  2. ORDER BY
  3. MINUS
  4. UNION

答案:C。

86.检查给定的表结构。以下查询的结果是什么?

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 distinct department_id 
FROM employees
WHERE salary > ANY (SELECT AVG (salary)
FROM employees
GROUP BY department_id )
UNION
SELECT *
FROM employees
WHERE salary > ANY (SELECT MAX (salary)
FROM employees
GROUP BY department_id );
  1. 它将显示所有具有平均工资和最高工资的部门 ID。
  2. 它将抛出一个 ORA 错误,因为两个查询中选择的列数不同。
  3. 它将显示所有具有平均工资的部门 ID。
  4. 它将显示所有具有最高工资的部门 ID。

答案:B. 列数必须相同。

87.以下关于 UNION 运算符的说法,哪一项是正确的?

  1. UNION 只对 SELECT 列表中的第一列进行操作。
  2. UNION 对组件查询中 SELECT 列表的第一列进行操作。
  3. UNION 对所有被选择的列进行操作。
  4. 以上都不是

答案:C. UNION 对 SELECT 列表中的所有列进行操作,并且不会忽略任何列。

88.您需要显示员工拥有 'SA_REP' 或 'ACCOUNTANT' 工作 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)
  1. SELECT department_id 
    FROM employees E
    Where job_id = 'SA_RE'
    UNION
    SELECT department_id 
    FROM employees E
    Where job_id = 'ACCOUNTANT';
  2. SELECT department_id 
    FROM employees E
    Where job_id = 'SA_REP'
    UNION ALL 
    Select department_id 
    FROM employees E
    Where job_id = 'ACCOUNTANT';
  3. SELECT department_id 
    FROM employees E
    Where job_id = 'SA_REP'
    INTERSECT
    Select department_id 
    FROM employees E
    Where job_id = 'ACCOUNTANT';
  4. SELECT department_id 
    FROM employees E
    Where job_id = 'SA_REP'
    MINUS
    Select department_id 
    FROM employees E
    Where job_id = 'ACCOUNTANT';

答案:A。

89.以下关于使用 SET 运算符的查询中行排序的说法,哪一项是正确的?

  1. 无法在构成复合查询的各个查询中使用 ORDER BY。
  2. 可以在复合查询的末尾附加 ORDER BY 子句。
  3. UNION ALL 返回的行将按它们在两个源查询中出现的顺序排列。
  4. UNION 返回的行将在所有列上从右到左排序。

答案:A, B, C.

90.在 ANSI SQL 语法生效之前,UNION 运算符用于执行以下哪个功能?

  1. RIGHT OUTER JOIN
  2. LEFT OUTER JOIN
  3. EQUI-JOIN
  4. FULL OUTER JOIN

答案:D.

回答下面给出的相关问题 91 和 92。考虑此处给出的表结构

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 job_history
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 START_DATE		 NOT NULL DATE
 END_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 DEPARTMENT_ID			  NUMBER(4)

91.您需要查找没有为其记录任何工作历史记录的工作 ID。以下哪个查询有效?(考虑给定的表结构)

  1. SELECT job_id
    FROM employees 
    UNION ALL
    SELECT job_id
    FROM job_history;;
  2. SELECT job_id
    FROM employees 
    MINUS
    Select job_id
    FROM job_history;;
  3. SELECT job_id
    FROM employees 
    UNION
    SELECT job_id
    FROM job_history;;
  4. 以上都不是

答案:B。

92.考虑以下查询

SELECT distinct  job_id
FROM employees 
NATURAL JOIN job_history ;

以下哪个查询与上述查询相同?

  1. SELECT job_id
    FROM employees
    UNION 
    SELECT   job_id
    FROM job_history;;
  2. SELECT job_id
    FROM employees
    UNION ALL
    SELECT job_id
    FROM job_history;;
  3. SELECT job_id
    FROM employees
    MINUS
    Select job_id
    FROM job_history;;
  4. SELECT job_id
    FROM employees
    INTERSECT 
    SELECT job_id
    FROM job_history;;

答案:A。

检查此处给出的表结构。考虑以下给出的查询,并回答后续的 93 到 97 相关问题

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 job_history
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 START_DATE		 NOT NULL DATE
 END_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 DEPARTMENT_ID			  NUMBER(4)
SELECT job_id
FROM employees
UNION ALL
SELECT job_id
FROM job_history;;

93.如果 EMPLOYEES 表包含 5 条记录,JOB_HISTORY 包含 3 条记录,则以下查询将获得多少条记录?

  1. 4
  2. 3
  3. 0
  4. 8

答案:D. UNION ALL 返回两个查询的组合行,不进行排序或删除重复项。

94.如果将 UNION ALL 运算符替换为 UNION 运算符,将获得多少条记录?(假设两个表中都有 6 个不同的值)

  1. 5
  2. 3
  3. 2
  4. 6

答案:D. UNION 返回两个查询的组合行,对其进行排序并删除重复项。

95.如果将 UNION ALL 运算符替换为 MINUS 运算符,将获得多少条记录?(假设 EMPLOYEES 中有 3 个不同的值,JOB_HISTORY 中有 2 个)

  1. 3
  2. 2
  3. 1
  4. 0

答案:C. MINUS仅返回第一个结果集中未出现在第二个结果集中的行,对它们进行排序并删除重复项。

96.如果将 UNION ALL 运算符替换为 INTERSECT 运算符,将获得多少条记录?(假设两个表之间有 3 个共同的值)

  1. 8
  2. 6
  3. 3
  4. 2

答案:C. INTERSECT 仅返回两个查询结果集中都出现的行,并对其进行排序并删除重复项。

97.考虑以下查询

1.select job_id
2. from employees
3.ORDER BY department_id 
4.UNION ALL
5.select job_id
6.FROM job_history;
7.ORDER BY department_id ;

上述查询会产生错误。上述查询中的哪一行会产生错误?

  1. 3
  2. 7
  3. 2
  4. 没有错误。

答案:A. ORDER BY 只能出现在复合查询的末尾,而不是在组件查询中。

98.以下哪些 SET 运算符功能在 SQL/Foundation:2003 中受支持,但在 Oracle 中不受支持?

  1. UNION ALL
  2. MINUS ALL
  3. INTERSECT ALL
  4. EXCEPT ALL

答案:B, C, D.

99.您需要找出部门 100 和 200 中的公共工作 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)
  1. SELECT job_id from employee
    WHERE department_id  = 100
    INTERSECT 
    SELECT job_id from employee
    WHERE department_id  = 200;
  2. SELECT job_id from employee
    WHERE department_id  = 100
    UNION ALL
    SELECT job_id from employee
    WHERE department_id  = 200;
  3. SELECT job_id from employee
    WHERE department_id  = 100
    MINUS
    Select job_id from employee
    WHERE department_id  = 200;
  4. SELECT job_id from employee
    WHERE department_id  = 100
    INTERSECT ALL
    Select job_id from employee
    WHERE department_id  = 200;

答案:A。

100.如果复合查询同时包含 MINUS 和 INTERSECT 运算符,哪个运算符将首先应用?(选择最佳答案。)

  1. INTERSECT,因为 INTERSECT 的优先级高于 MINUS。
  2. MINUS,因为 MINUS 的优先级高于 INTERSECT。
  3. 优先级由它们指定的顺序决定。
  4. 复合查询不可能同时包含 MINUS 和 INTERSECT。

答案:C. 所有集合运算符的优先级相同,因此优先级由它们出现的顺序决定。

广告