概述
union , intersect , minus
示意图
- union 会排序(第一列的结果进行升序排序,下同)、去重
- union all 不排序、不去重
- intersect 排序、去重
- minus 排序、去重
说明
- 集合操作的的对象,类型、列数必须匹配;
- order by 只能放在最后,可以按第一个语名的列名、别名、列号进行排序;
- 无优先级之分,从上到下执行;
例子
create table employees
(
employee_id number(8) not null,
first_name varchar2(20) ,
last_name varchar2(25) not null,
email varchar2(25) ,
phone_number varchar2(20),
hire_date date not null,
job_id varchar2(10),
salary number(8,2),
commission_pct number(2,2),
manager_id number(6),
department_id number(4)
);
insert into employees(employee_id,manager_id,salary,last_name,hire_date) values (1000,100,20000,'Stone',sysdate -200);
insert into employees(employee_id,manager_id,salary,last_name,hire_date) values (1001,101,20000,'Strange',sysdate -100);
insert into employees(employee_id,manager_id,salary,last_name,hire_date) values (1002,101,9000,'Atlas',sysdate -100);
insert into employees(employee_id,manager_id,salary,last_name,hire_date) values (1003,102,9000,'Farley',sysdate -200);
insert into employees(employee_id,manager_id,salary,last_name,hire_date) values (1004,102,9000,'Lake',sysdate -200);
insert into employees(employee_id,manager_id,salary,last_name,hire_date) values (1005,102,9000,'Lance',sysdate -200);
insert into employees(employee_id,manager_id,salary,last_name,hire_date) values (1006,100,9000,'Zoo',sysdate -200);
insert into employees(employee_id,manager_id,salary,last_name,hire_date) values (100,null,80000,'Val',sysdate -100);
select t.* from employees t;
select last_name, manager_id, hire_date, salary from employees
where manager_id = 100
union
select last_name, manager_id, hire_date, salary from employees
where hire_date > sysdate - 180
intersect
select last_name, manager_id, hire_date, salary from employees
where salary > 10000
rollback;
;