oracle两个集合求余,Oracle Database之集合操作函数(UNION, INTERSECT, MINUS)

Oracle Database之集合操作属于SELECT的高级用法,集合操作包含并、交、差三种,为了合并多个SELECT语句的结果,可以使用的集合操作符: UNION, UNION ALL, INTERSECT和MINUS.

1.语法

SELECT statement1

[UNION | UNION ALL | INTERSECT | MINUS]

SELECT statement2

...

创建表并插入样例数据:

--创建表employee

create table employee

(

employee_id number,

employee_name varchar2(100),

employee_gender varchar2(1),

hire_date date,

job_type varchar2(100),

department_id number,

salary number(22,2),

bonus number(22,2)

);

--插入样例数据:

insert into employee values(1, 'david','M',sysdate-1800,'Database', 10,2000, 2000);

insert into employee values(2, 'black','M',sysdate-1000,'Database',10, 2600, 2000);

insert into employee values(3, 'josen','M',sysdate-2000,'Jira',12, 2700, 2000);

insert into employee values(4, 'klaus','M',sysdate-1020,'System',13, 2800, 2000);

insert into employee values(5, 'fab','M',sysdate-365,'Java', 11,2200, 2900);

insert into employee values(6, 'derek','M',sysdate-1600,'IT',14, 2600, 2400);

--创建表: employee_history

create table employee_history

(

employee_id number,

employee_name varchar2(100),

employee_gender varchar2(1),

hire_date date,

job_type varchar2(100),

department_id number,

salary number(22,2),

bonus number(22,2)

);

--插入样例数据:

insert into employee_history values(1, 'david','M',sysdate-1800,'Database', 10,2000, 2000);

insert into employee_history values(2, 'black','M',sysdate-1000,'Database', 10,2600, 2300);

insert into employee_history values(3, 'kaishen','M',sysdate-2200,'Java', 11,4000, 2500);

insert into employee_history values(4, 'arvin','M',sysdate-365,'System',11, 6000, 2100);

insert into employee_history values(5, 'light','M',sysdate-650,'Java',11, 8000, 1000);

insert into employee_history values(6, 'derek','M',sysdate-1600,'IT', 14,2000, 2000);

通过样例数据可以看出,两个表中部分数据是相同的。

2. UNION 和UNION ALL

UNION操作符用于获取两个或者多个结果集的并集,当使用该操作符时,会自动去掉结果集中的重复行。

UNION ALL操作符返回查询所检索出的所有行,包括重复的行;

示例1: 查询出表employee和employee_history表中所有的员工姓名、性别、工作类型,并根据姓名排序(备注:包含重复数据)

select employee_name, employee_gender, job_type from employee

union all

select employee_name, employee_gender, job_type from employee_history

order by employee_name asc;

0818b9ca8b590ca3270a3433284dd417.png

从上图可以看出,查询结果为两个查询的并集,包含了重复数据。

示例2: 查询出表employee和employee_history表中所有的员工姓名、性别、工作类型,并根据姓名排序(备注:去除重复数据)

select employee_name, employee_gender, job_type from employeeunionselect employee_name, employee_gender, job_type from employee_history

order by employee_name asc;

0818b9ca8b590ca3270a3433284dd417.png

从上图可以看出,查询结果为两个查询的并集,并去除了重复数据。

备注: 如果使用ORDER BY子句进行排序,该子句只出现在最后一个查询的后面。

3. INTERSECT

INTERSECT操作符用于获取两个结果集的交集。当时用该操作符时,只会显示同时存在两个结果集中的数据。

示例:

select employee_name, employee_gender, job_type from employee

intersect

select employee_name, employee_gender, job_type from employee_history

0818b9ca8b590ca3270a3433284dd417.png

4. MINUS

MINUS操作符用于获取两个结果集的差集。使用该操作符,只会显示第一个结果集中存在,第二个结果集中不存在的数据。

select employee_name, employee_gender, job_type from employee

minus

select employee_name, employee_gender, job_type from employee_history

0818b9ca8b590ca3270a3433284dd417.png

-------------------------------------------------------

本文系原创,转载请表明出处!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值