ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Intersect、minus、union、union all用法

Intersect、minus、union、union all用法

原创 Linux操作系统 作者:litongbing 时间:2010-06-28 23:22:11 0 删除 编辑

SQL语句中的三个关键字:MINUS(减去),INTERSECT(交集)和UNION ALL(并集);

MINUS是从第一个查询结果减去第二个查询结果,如果有相交部分就减去相交部分;否则和第一个查询结果没有区别.

INTERSECT是两个查询结果的交集

UNION ALL是两个查询的并集;

Minus、intersect、union all三个图示如下:

 

示例表tab_emp和test

create table tab_emp
(EMPNO    NUMBER(
4
) not null,
ENAME    VARCHAR2(
10
),
SAL      NUMBER(
7,2));

create table test
(EMPNO    NUMBER(
4
) not null,
ENAME    VARCHAR2(
10
),
SAL      NUMBER(
7,2));

tab_emp数据如下:

SQL> select * from tab_emp;

EMPNO ENAME            SAL

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

 7654 MARTIN       1250.00

 7698 BLAKE        2850.00

 7782 CLARK        2450.00

 7788 SCOTT        3000.00

 7839 KING         5000.00

 7844 TURNER       1500.00

 7876 ADAMS        1100.00

 7900 JAMES         950.00

 7902 FORD         3000.00

 7934 MILLER       1300.00

test数据如下:

SQL> select * from test;

EMPNO ENAME            SAL

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

 7369 SMITH         800.00

 7499 ALLEN        2000.00

 7521 WARD         1250.00

 7566 JONES        2975.00

 7654 MARTIN       1250.00

 7698 BLAKE        2850.00

 7782 CLARK        2450.00

Minus示例:

SQL> select * from tab_emp

  2  minus

  3  select * from test;

EMPNO ENAME            SAL

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

 7788 SCOTT        3000.00

 7839 KING         5000.00

 7844 TURNER       1500.00

 7876 ADAMS        1100.00

 7900 JAMES         950.00

 7902 FORD         3000.00

 7934 MILLER       1300.00

Intersect示例:

SQL> select * from tab_emp

  2  intersect

  3  select * from test;

EMPNO ENAME            SAL

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

 7654 MARTIN       1250.00

 7698 BLAKE        2850.00

 7782 CLARK        2450.00

在数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。

UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。

UNION ALL只是简单的将两个结果合并后就返回。如果返回的两个结果集中有重复的数据,那么在返回的结果集中也包含有重复的数据了。

从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL,如下:

SQL> select * from tab_emp

  2  union

  3  select * from test;

 

EMPNO ENAME            SAL

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

 7369 SMITH         800.00

 7499 ALLEN        2000.00

 7521 WARD         1250.00

 7566 JONES        2975.00

 7654 MARTIN       1250.00

 7698 BLAKE        2850.00

 7782 CLARK        2450.00

 7788 SCOTT        3000.00

 7839 KING         5000.00

 7844 TURNER       1500.00

 7876 ADAMS        1100.00

 7900 JAMES         950.00

 7902 FORD         3000.00

 7934 MILLER       1300.00

SQL> select * from tab_emp

  2  union all

  3  select * from test;

EMPNO ENAME            SAL

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

 7654 MARTIN       1250.00

 7698 BLAKE        2850.00

 7782 CLARK        2450.00

 7788 SCOTT        3000.00

 7839 KING         5000.00

 7844 TURNER       1500.00

 7876 ADAMS        1100.00

 7900 JAMES         950.00

 7902 FORD         3000.00

 7934 MILLER       1300.00

 7369 SMITH         800.00

 7499 ALLEN        2000.00

 7521 WARD         1250.00

 7566 JONES        2975.00

 7654 MARTIN       1250.00

 7698 BLAKE        2850.00

 7782 CLARK        2450.00

 

总结:

Minus由第一个表对第二个表进行差操作,并返回结果(其结果不包括重复行,同时进行默认规则的排序);

Intersect:两个结果集进行交集操作,并返回结果(其结果不包括重复行,同时进行默认规则的排序);

 

Union:两个结果集进行并集操作,返回结果(其结果不包括重复行,同时进行默认规则的排序);

 

Union All:两个结果集进行并集操作,返回结果(其结果包括重复行,不进行排序)。

union all.jpg

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/20948385/viewspace-666539/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: MERGE用法
请登录后发表评论 登录
全部评论

注册时间:2009-05-13

  • 博文量
    59
  • 访问量
    215321