Oracle集合操作大致分为三种 : 并集–交集–差集
数据库测试数据:
create table employees
(
employee_id number(8) not null, --员工id
manager_id number(6), --经理id
salary number(8,2), --工资
employees_name varchar2(25) not null, --员工名字
entry_date date not null --入职时间
);
insert into employees values (1000,100,10000,'jack1',sysdate -365);
insert into employees values (1001,101,10000,'jack2',sysdate -200);
insert into employees values (1002,101,8000,'jack3',sysdate -100);
insert into employees values (1003,102,8500,'jack4',sysdate -150);
insert into employees values (1004,102,8000,'jack5',sysdate -100);
insert into employees values (1005,102,8000,'jack6',sysdate -100);
insert into employees values (1006,100,8000,'jack7',sysdate -100);
insert into employees values (100,null,20000,'jack8',sysdate -800);
--查询所有
select * from employees;
数据内容:
1.查询数据,经理是编号为100的:
select employees_name, manager_id, entry_date, salary from employees where manager_id = 100
1.查询数据,两百天前入职的:
select employees_name, manager_id, entry_date, salary from employees where entry_date > sysdate - 200
1.查询数据,工资大于等于8000的:
select employees_name, manager_id, entry_date, salary from employees where salary >= 8000
注意事项:
1.集合操作的的对象,类型、列数必须匹配,不然会报错,因为数据范围不一样.
2.order by 只能放在最后,可以按第一个语名的列名、别名、列号进行排序.
(没有优先级,执行顺序就是查询顺序)
1.并集:以属于A或者属于B的数据合称为A与B的并集.
代码:
select employees_name, manager_id, entry_date, salary from employees where manager_id = 100
union
select employees_name, manager_id, entry_date, salary from employees where entry_date > sysdate - 200
2.交集:以属于A并且属于B的数据合称为A与B的并集.
代码:
select employees_name, manager_id, entry_date, salary from employees where entry_date > sysdate - 200
intersect
select employees_name, manager_id, entry_date, salary from employees where salary > 8000
3.差集,这个就比较恶心了看效果.
代码:
select employees_name, manager_id, entry_date, salary from employees where entry_date > sysdate - 200
minus
select employees_name, manager_id, entry_date, salary from employees where salary > 8000