集合查询

一.定义

集合操作:将不同的数据集合按照一定的规则拼接到一起,组成一个新的、临时的数据集合

操作分类:并集 交集 差集
关键字: UNION/UNION ALL INTERSECT MINUS

使用:
SELECT 语句
集合关键字
SELECT 语句;

二.并集

1.概述
将不同的数据集合按照并集的规则合并到一个数据集合中

2.关键字

UNION / UNION ALL

示例:
1.求工资大于1500 的员工信息与工资小于3000的员工信息的并集
–UNION
SELECT * FROM EMP WHERE SAL>1500
UNION
SELECT * FROM EMP WHERE SAL<3000;

 --UNION ALL  
   
  SELECT * FROM EMP WHERE SAL>1500
  UNION ALL
  SELECT * FROM EMP WHERE SAL<3000;

2.若表中含有重复数据,如何去除重复的数据??

3.数据会不会排序
–UNION
SELECT DEPTNO,SAL FROM EMP WHERE SAL>1500
UNION
SELECT DEPTNO,SAL FROM EMP WHERE SAL<3000;

 --UNION ALL  
   
  SELECT SAL FROM EMP WHERE SAL>1500
  UNION ALL
  SELECT SAL FROM EMP WHERE SAL<3000;

注意:
1).UNION对于集合中的数据会去重,UNION all不会将重复的数据去除
2).UNION会将数据集合中数据按照第一个列升序排列,UNION ALL不会排序

3.并集编写时的注意点

1).前后数据集合的列的个数和数据类型应一致
2).UNION 会按照第一个列升序排列
3).最终的数据结果显示以第一个数据集合中的列的名称显示

示例:
1.求工资大于1500 的员工信息与工资小于3000的员工信息的并集
–报错 列的个数不一致
SELECT EMPNO,ENAME FROM EMP WHERE SAL>1500
UNION
SELECT EMPNO,ENAME,JOB FROM EMP WHERE SAL<3000;

 --报错  前后数据集合的数据类型不一致
 
 SELECT EMPNO,ENAME FROM EMP WHERE SAL>1500
 UNION 
 SELECT EMPNO,SAL FROM EMP WHERE SAL<3000; 
 
 --字段名以第一个数据集合的字段名显示
 
 SELECT SAL,ENAME FROM EMP WHERE SAL>1500
 UNION 
 SELECT EMPNO,JOB FROM EMP WHERE SAL<3000; 

三.交集

1.概述
将不同的数据集合按照交集的规则合并到一个数据集合中

2.关键字

INTERSECT

示例:
1.交集示例
SELECT * FROM EMP WHERE SAL=800 OR SAL=1600
INTERSECT
SELECT * FROM EMP WHERE SAL=1600 OR SAL=3000;

2.数据类型
–报错 数据类型不一致

 SELECT EMPNO,SAL FROM EMP WHERE SAL=800 OR SAL=1600
 INTERSECT
 SELECT EMPNO,JOB FROM EMP WHERE SAL=1600 OR SAL=3000;
 
 --结果中列的顺序以第一个数据集合的顺序为准
    
 SELECT EMPNO,SAL FROM EMP WHERE SAL=800 OR SAL=1600
 INTERSECT
 SELECT EMPNO,DEPTNO FROM EMP WHERE SAL=1600 OR SAL=3000;

3.列的个数
–列的个数不一致
SELECT EMPNO,SAL FROM EMP WHERE SAL=800 OR SAL=1600
INTERSECT
SELECT EMPNO,SAL,DEPTNO FROM EMP WHERE SAL=1600 OR SAL=3000;

4.排序
–按照集合中的第一个列升序排列
SELECT EMPNO,SAL FROM EMP WHERE SAL>1500
INTERSECT
SELECT EMPNO,SAL FROM EMP WHERE SAL<3000;

 SELECT SAL,EMPNO FROM EMP WHERE SAL>1500
 INTERSECT
 SELECT SAL,EMPNO FROM EMP WHERE SAL<3000;    

四.差集
1.概述
将不同的数据集合按照差集的规则合并到一个数据集合中

2.关键字

MINUS

示例:
1.差集示例
–前后集合的顺序不同,集合的结果集也不同

 SELECT * FROM EMP WHERE SAL=800 OR SAL=1600
 MINUS
 SELECT * FROM EMP WHERE SAL=1600 OR SAL=3000;
 
 SELECT * FROM EMP WHERE SAL=3000 OR SAL=1600
 MINUS
 SELECT * FROM EMP WHERE SAL=1600 OR SAL=800;

2.数据类型
–报错 数据类型不一致

 SELECT EMPNO,SAL FROM EMP WHERE SAL=800 OR SAL=1600
 MINUS
 SELECT EMPNO,JOB FROM EMP WHERE SAL=1600 OR SAL=3000;
 
 --结果中列的顺序以第一个数据集合的顺序为准
    
 SELECT EMPNO,SAL FROM EMP WHERE SAL=800 OR SAL=1600
 MINUS
 SELECT EMPNO,DEPTNO FROM EMP WHERE SAL=1600 OR SAL=3000;

3.列的个数
–列的个数不一致
SELECT EMPNO,SAL FROM EMP WHERE SAL=800 OR SAL=1600
MINUS
SELECT EMPNO,SAL,DEPTNO FROM EMP WHERE SAL=1600 OR SAL=3000;

4.排序
–按照集合中的第一个列升序排列
SELECT EMPNO,SAL FROM EMP WHERE SAL>1500
MINUS
SELECT EMPNO,SAL FROM EMP WHERE SAL<2000;

 SELECT SAL,EMPNO FROM EMP WHERE SAL>1500
 MINUS
 SELECT SAL,EMPNO FROM EMP WHERE SAL<2000;    

五.小结
1.掌握集合的各个关键字及其用法
2.注意:集合的列的个数,数据类型要一致
3.UNION/INTERSECT/MINUS均按照第一列升序排列,UNION ALL不排序
4.UNION去重且排序,UNION ALL不去重,不排序
5.MINUS操作和集合的前后顺序关联,并集,交集和集合前后顺序无关

6.MINUS往往用于查询一个表中存在一个表中不存在的情况
–例如查询没有员工的部门的部门编号
SELECT DEPTNO FROM DEPT
MINUS
SELECT DEPTNO FROM EMP;

7.并集UNION往往用于行转列、列转行中

六.练习题
1.数据去重的方式
2.有表score_63,将其转换为SCORE_63_BAK的内容
–在转换回去

–查询当前用户下的表名
SELECT TABLE_NAME FROM USER_TABLES;
SELECT * FROM SCORE_63;
SELECT * FROM SCORE_63_BAK;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值