OCP 071 -129 争议题
Q129
Examine the structure of the EMPLOYEES table. (Choose the best answer.)
You must display the details of employees who have manager with MANAGER_ID 100, who were hired in the past 6 months and who have salaries greater than 10000.
你必须展示 manager_id 是100号的, 过去180天内入职的 ,薪资大于10000元的那部分 员工的明细 。
如果答案是C 那么翻译应该是 包括两类,, 1 manager_id 是100的,收入过万 , 但入职时间可以是不限于3个月的
2 manage_id 可以不是100,但是收入过万的,并且近三个月内入职的。。。
A. SELECT last_name, hire_date, salary
FROM employees
WHERE salary > 10000
UNION ALL
SELECT last_name, hire_date, salary
FROM employees
WHERE manager_ID = (SELECT employee_id FROM employees WHERE employee_id = 100)
INTERSECT
SELECT last_name, hire_date, salary
FROM employees
WHERE hire_date > SYSDATE- 180;
B. SELECT last_name, hire_date, salary
FROM employees
WHERE manager_id = (SELECT employee_id FROM employees WHERE employee_id = 100)
UNION ALL
(SELECT last_name, hire_date, salary FROM employees
WHERE hire_date > SYSDATE -180
INTERSECT
SELECT last_name, hire_date, salary
FROM employees
WHERE salary > 10000);
C. SELECT last_name, hire_date, salary
FROM employees
WHERE manager_id = (SELECT employee_id FROM employees WHERE employee_id = '100')
UNION
SELECT last_name, hire_date, salary
FROM employees
WHERE hire_date > SYSDATE -180
INTERSECT
SELECT last_name, hire_date, salary
FROM employees
WHERE salary > 10000;
D. (SELECT last_name, hire_date, salary
FROM employees
WHERE salary > 10000
UNION ALL
SELECT last_name, hire_date, salary
FROM employees
WHERE manager_ID = (SELECT employee_id FROM employees WHERE employee_id = 100))
UNION
SELECT last_name, hire_date, salary
FROM employees
WHERE hire_date > SYSDATE -180;
答案解析:
这题的考点 是 union 、 union all 和 intersect
union 两个结果集并集操作,重复行只取一次,同时进行默认规则排序
union 和union all 的区别是 重复值不做过滤。。
intersect 是做两个结果集进行交集操作,重复行只取一次,同时进行默认规则的排序。
题意是是 做报表,列出 那些薪酬超过1万的那批人 ,这人中部分人领导的 employee id 是100号 。另外一部分工作时间超过180天的人。
我们假设 employee_id =100 的manager 名字是 “雷布斯” ,我做了三个选项是 180天内入职的,并且两个的manage_id 是100的。。。另一个不是 ,并且 三个人的工资都大于10000元的。。
A选项 里。。 先把 工资大于10000万的和 领导是 “雷布斯”的人员做了 union all, 结果发现 工资没超过1万的,但领导是 “雷布斯”的那部分职员也进入了结果集合,,这个集合和入职超过180天的做交集。。那结果自然是不符合题意了,也被计入。。下图是参考示范结果。。(工作日期做了调整。)
对于B选项。。要注意有个括号。那如果有部分测试结果如下图,结果过滤不了
C选项演示。。结果只过滤了 salary 大于 10000的。
D选项测试结果如下, 这个选项最好排查,,先做union all 再做union 结果看到,,king都在结果里面了。。