Oracle集合运算
SQL> --什么是集合運算?
SQL> --查詢10號部門和20號部門的員工
SQL> --第一種
SQL> select *
? 2? from emp
? 3? where deptno=10 or 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> --第二種
SQL> select *
? 2? from emp
? 3? where deptno in (10,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> --第三種:集合運算
SQL> -- select * from emp where deptno=10;
SQL> -- select * from emp where deptno=20;
SQL> -- 集合的三種運算:并,交,差
SQL> select * from emp where deptno=10
? 2? union
? 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> --關于并集,討論性能
SQL> --group by的增強
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行。
SQL> break on deptno skip 2
SQL> /
??? DEPTNO JOB???????? SUM(SAL)????????????????????????????????????????????????????????????????????????????????????????
---------- --------- ----------????????????????????????????????????????????????????????????????????????????????????????
??????? 10 CLERK?????????? 1300????????????????????????????????????????????????????????????????????????????????????????
?????????? MANAGER???????? 2450????????????????????????????????????????????????????????????????????????????????????????
?????????? PRESIDENT?????? 5000????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????? 8750????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????? 20 CLERK?????????? 1900????????????????????????????????????????????????????????????????????????????????????????
?????????? ANALYST???????? 6000????????????????????????????????????????????????????????????????????????????????????????
?????????? MANAGER???????? 2975????????????????????????????????????????????????????????????????????????????????????????
????????????????????????? 10875????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??? DEPTNO JOB???????? SUM(SAL)????????????????????????????????????????????????????????????????????????????????????????
---------- --------- ----------????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????? 30 CLERK??????????? 950????????????????????????????????????????????????????????????????????????????????????????
?????????? MANAGER???????? 2850????????????????????????????????????????????????????????????????????????????????????????
?????????? SALESMAN??????? 5600????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????? 9400????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????? 29025????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
已選擇13行。
SQL> host cls
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> --1.? 參與運算的集合必須列數相同
SQL> --2.? 運算后的結果的表頭為第一個集合的表頭
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????????????????????????????????????????????????????????????????????????????????????????
?????????? 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> --打開sql運行時間開關
SQL> set timing on
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行。
已用時間:? 00: 00: 00.56
SQL> select deptno,job,sum(sal)
? 2? from emp
? 3? group by rollup(deptno,job);
??? DEPTNO JOB???????? SUM(SAL)????????????????????????????????????????????????????????????????????????????????????????
---------- --------- ----------????????????????????????????????????????????????????????????????????????????????????????
??????? 10 CLERK?????????? 1300????????????????????????????????????????????????????????????????????????????????????????
?????????? MANAGER???????? 2450????????????????????????????????????????????????????????????????????????????????????????
?????????? PRESIDENT?????? 5000????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????? 8750????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????? 20 CLERK?????????? 1900????????????????????????????????????????????????????????????????????????????????????????
?????????? ANALYST???????? 6000????????????????????????????????????????????????????????????????????????????????????????
?????????? MANAGER???????? 2975????????????????????????????????????????????????????????????????????????????????????????
????????????????????????? 10875????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??? DEPTNO JOB???????? SUM(SAL)????????????????????????????????????????????????????????????????????????????????????????
---------- --------- ----------????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????? 30 CLERK??????????? 950????????????????????????????????????????????????????????????????????????????????????????
?????????? MANAGER???????? 2850????????????????????????????????????????????????????????????????????????????????????????
?????????? SALESMAN??????? 5600????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????? 9400????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????? 29025????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
已選擇13行。
已用時間:? 00: 00: 00.50
SQL> set timing off
SQL> break on null
SQL> host cls
SQL> --交集:
SQL> -- 查詢工資屬于1000~2000這個區間和1500~2500這個區間
SQL> select * from emp where sal between 1000 and 2000
? 2? intersect
? 3? select * from emp where sal between 1500 and 2500;
???? EMPNO ENAME????? JOB????????????? MGR HIREDATE???????? SAL?????? COMM???? DEPTNO??????????????????????????????????
---------- ---------- --------- ---------- -------------- ----- ---------- ----------??????????????????????????????????
????? 7499 ALLEN????? SALESMAN??????? 7698 20-2月 -81????? 1600??????? 300???????? 30??????????????????????????????????
????? 7844 TURNER???? SALESMAN??????? 7698 08-9月 -81????? 1500????????? 0???????? 30??????????????????????????????????
SQL> --差集:
SQL> --查詢工資屬于1000~2000,但不屬于1500~2500
SQL> ed
已寫入 file afiedt.buf
? 1? select * from emp where sal between 1000 and 2000
? 2? minus
? 3* select * from emp where sal between 1500 and 2500
SQL> /
???? EMPNO ENAME????? JOB????????????? MGR HIREDATE???????? SAL?????? COMM???? DEPTNO??????????????????????????????????
---------- ---------- --------- ---------- -------------- ----- ---------- ----------??????????????????????????????????
????? 7521 WARD?????? SALESMAN??????? 7698 22-2月 -81????? 1250??????? 500???????? 30??????????????????????????????????
????? 7654 MARTIN???? SALESMAN??????? 7698 28-9月 -81????? 1250?????? 1400???????? 30??????????????????????????????????
????? 7876 ADAMS????? CLERK?????????? 7788 13-7月 -87????? 1100??????????????????? 20??????????????????????????????????
????? 7934 MILLER???? CLERK?????????? 7782 23-1月 -82????? 1300??????????????????? 10??????????????????????????????????
SQL> --1.列數相同
SQL> --2. 采用第一個集合的表頭
SQL> spool off
總結
以上是生活随笔為你收集整理的Oracle集合运算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle分组函数
- 下一篇: Oracle子查询