问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在oracle中用查询集合运算实现:查询emp表的第2,4,6,8共四条记录?

发布网友 发布时间:2022-04-07 20:07

我来回答

2个回答

懂视网 时间:2022-04-08 00:28


  3   select * from emp where deptno=20;


     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                            
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                            
      7369 SMITH      CLERK           7902 17-12月-80            800                    20                                                            
      7566 JONES      MANAGER         7839 02-4月 -81           2975                    20                                                            
      7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10                                                            
      7788 SCOTT      ANALYST         7566 13-7月 -87           3000                    20                                                            
      7839 KING       PRESIDENT            17-11月-81           5000                    10                                                            
      7876 ADAMS      CLERK           7788 13-7月 -87           1100                    20                                                            
      7902 FORD       ANALYST         7566 03-12月-81           3000                    20                                                            
      7934 MILLER     CLERK           7782 23-1月 -82           1300                    10                                                            


已选择8行。

若直接合并,则会出现语法错误:
SQL> select deptno,job,sum(sal) from emp group by deptno,job
  2  union
  3  select deptno,sum(sal) from emp group by deptno
  4  union
  5  select sum(sal) from emp;
select deptno,sum(sal) from emp group by deptno
*
第 3 行出现错误: 
ORA-01789: 查询块具有不正确的结果列数 



集合运算

技术分享



SQL> /*
SQL> 集合运算:
SQL> 1. 参与运算的各个集合,必须列数相同,且类型一致
SQL> 2. 最终结果采用第一个集合的表头作为表头
SQL> 3. order by必须在每个集合后使用相同的order by

SQL> */

对于字符添加空列,使用to_char(null)

对于数字添加空列,使用to_number(null)



union


UNION运算符返回两个集合去掉重复元素后的所有记录 UNIONALL返回两个集合的所有记录,包括重复的

SQL> select deptno,job,sum(sal) from emp group by deptno,job
  2  union
  3  select deptno,to_char(null),sum(sal) from emp group by deptno
  4  union
  5  select to_number(null),to_char(null),sum(sal) from emp;


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
        10 CLERK           1300                                                                                                                       
        10 MANAGER         2450                                                                                                                       
        10 PRESIDENT       5000                                                                                                                       
        10                 8750                                                                                                                       
        20 ANALYST         6000                                                                                                                       
        20 CLERK           1900                                                                                                                       
        20 MANAGER         2975                                                                                                                       
        20                10875                                                                                                                       
        30 CLERK            950                                                                                                                       
        30 MANAGER         2850                                                                                                                       
        30 SALESMAN        5600                                                                                                                       


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
        30                 9400                                                                                                                       
                          29025                                                                                                                       


已选择13行。

格式化:
SQL> break on deptno skip  2
SQL> /


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
        10 CLERK           1300                                                                                                                       
           MANAGER         2450                                                                                                                       
           PRESIDENT       5000                                                                                                                       
                           8750                                                                                                                       
                                                                                                                                                      
                                                                                                                                                      
        20 ANALYST         6000                                                                                                                       
           CLERK           1900                                                                                                                       
           MANAGER         2975                                                                                                                       
                          10875                                                                                                                       
                                                                                                                                                      


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
                                                                                                                                                      
        30 CLERK            950                                                                                                                       
           MANAGER         2850                                                                                                                       
           SALESMAN        5600                                                                                                                       
                           9400                                                                                                                       
                                                                                                                                                      
                                                                                                                                                      
                          29025                                                                                                                       
                                                                                                                                                      
                                                                                                                                                      


已选择13行。


SQL> break on null
SQL> /


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
        10 CLERK           1300                                                                                                                       
        10 MANAGER         2450                                                                                                                       
        10 PRESIDENT       5000                                                                                                                       
        10                 8750                                                                                                                       
        20 ANALYST         6000                                                                                                                       
        20 CLERK           1900                                                                                                                       
        20 MANAGER         2975                                                                                                                       
        20                10875                                                                                                                       
        30 CLERK            950                                                                                                                       
        30 MANAGER         2850                                                                                                                       
        30 SALESMAN        5600                                                                                                                       


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
        30                 9400                                                                                                                       
                          29025                                                                                                                       


已选择13行。


SQL> host cls

打开SQL执行的时间

SQL> --打开SQL执行的时间
SQL> set timing on
SQL> select deptno,job,sum(sal)
  2  from emp
  3  group by rollup(deptno,job);


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
        10 CLERK           1300                                                                                                                       
        10 MANAGER         2450                                                                                                                       
        10 PRESIDENT       5000                                                                                                                       
        10                 8750                                                                                                                       
        20 CLERK           1900                                                                                                                       
        20 ANALYST         6000                                                                                                                       
        20 MANAGER         2975                                                                                                                       
        20                10875                                                                                                                       
        30 CLERK            950                                                                                                                       
        30 MANAGER         2850                                                                                                                       
        30 SALESMAN        5600                                                                                                                       


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
        30                 9400                                                                                                                       
                          29025                                                                                                                       


已选择13行。


已用时间:  00: 00: 00.00
SQL> select deptno,job,sum(sal) from emp group by deptno,job
  2  union
  3  select deptno,to_char(null),sum(sal) from emp group by deptno
  4  union
  5  select to_number(null),to_char(null),sum(sal) from emp;


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
        10 CLERK           1300                                                                                                                       
        10 MANAGER         2450                                                                                                                       
        10 PRESIDENT       5000                                                                                                                       
        10                 8750                                                                                                                       
        20 ANALYST         6000                                                                                                                       
        20 CLERK           1900                                                                                                                       
        20 MANAGER         2975                                                                                                                       
        20                10875                                                                                                                       
        30 CLERK            950                                                                                                                       
        30 MANAGER         2850                                                                                                                       
        30 SALESMAN        5600                                                                                                                       


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
        30                 9400                                                                                                                       
                          29025                                                                                                                       


已选择13行。


已用时间:  00: 00: 00.00

SQL> set timing off

这儿由于数据量太少导致时间太短无法测出,在平时可以使用此种方法来检测哪一个sql语句执行时间更短,则那个sql更为好


INTERSECT语句

INTERSECT 运算符返回同时属于两个集合的记录



显示薪水同时位于级别1(700~1300)和级别2(1201~1400)的员工信息:

SQL> select ename,sal from emp

  2  where sal between 700 and 1300
  3  INTERSECT
  4  select ename,sal from emp
  5  where sal between 1201 and 1400;


ENAME             SAL                                                                                                                                 
---------- ----------                                                                                                                                 
MARTIN           1250                                                                                                                                 
MILLER           1300                                                                                                                                 
WARD             1250                                                                                                                                 

minus


MINUS返回属于第一个集合,但不属于第二个集合的记录。

显示薪水同时位于级别1(700~1300),但不属于级别2(1201~1400)的员工信息:
SQL> select ename,sal from emp   2  where sal between 700 and 1300
  3  minus
  4  select ename,sal from emp
  5  where sal between 1201 and 1400;


ENAME             SAL                                                                                                                                 
---------- ----------                                                                                                                                 
ADAMS            1100                                                                                                                                 
JAMES             950                                                                                                                                 
SMITH             800                                                                                                                                 






集合运算注意事项

lselect语句中参数类型和个数要一致。 l可以使用括号改变集合执行的顺序 l如果有order by子句,必须放到每一句查询语句后 l集合运算采用第一个语句的表头作为表头

Oracle学习(7):集合运算

标签:oracle   sql   学习笔记   数据   

热心网友 时间:2022-04-07 21:36

select语句里面where条件用in,将主键或rownum字段的值包含在里面,分别写2,4,6,8。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
抖音弹幕怎么关掉?怎么关闭抖音弹幕? 惠普LaserJet P3005D是否支持B5纸的双面打印? word打印出图片总是缺一部分怎么办-word打印图片不完整怎么解决_百度... 理想one哪里产的车辆? 抚州抚州ONE在哪里? one地址在哪里? 如何在图片上写字(如何在图片上添加文字) 网商贷为什么钱没到账 高级经济师职称怎么评 高级经济师需要评审吗 每天都要敷面膜,面膜真正的作用是什么? 兰州社会保障卡怎样下载 工商银行如何下载社会保障卡手机银行工商银行 十二生肖羊是属佛肖吗? 佛肖有哪些生肖 十二生肖中有哪个属于佛肖的 12生肖佛肖的有几个?都是什么? 敷面膜的好处是什么? 十二生肖什么是佛肖 请问十二生肖那些是佛肖? 十二生肖哪肖属于佛肖 佛肖是什么生肖 佛肖是哪些生肖 十二生肖哪肖属于佛肖 十二生肖哪些属于双肖 佛肖是十二生肖里面的那个生肖啊 以旧换新的手机怎样补差价 十二生肖哪个属观音佛肖 我的华为帐号因为换号码和忘记密码登陆不了怎么办 十二生肖哪些是佛肖 华为mate98.0微博无法登录闪退怎么处理? 长期敷面膜的好处? 手机社保卡在哪儿下载 社保卡怎么下载 装满半杯冷水的杯子,拧紧杯盖过一段时间杯盖很难拧开,产生这一现象的原因 鲁迅先生作品《故乡》原文是什么? 冬天的时候,杯子会裂了怎么办? 社会保障卡下载? 鲁迅的《故乡》的小说结构模式 珍珠奶茶的塑料杯子冬天易裂怎么办 下载到手机上面的社保卡? 鲁迅的《故乡》的线索是什么 有一个特别凉的杯子,在冬天热水,杯子会炸裂的裂缝从杯子外部开始还是从内部开始?为什么? 鲁迅所写的小说《故乡》 冬天为什么玻璃杯里倒开水容易裂 鲁迅的小说《故乡》免费下载 鲁迅的小说《故乡》 鲁迅《故乡》的写作特点 请问怎么查询一个手机号码的区号? 减肥食谱一个月瘦10斤女 一个月瘦10到20斤的减肥食谱