Oracle筆記11——Oracle集合運算
阿新 • • 發佈:2021-10-29
1.建立員工歷史崗位表 emp_jobhistory: CREATE TABLE emp_jobhistory( id NUMBER,--流水號 empno NUMBER,--員工編號 job VARCHAR2(9),--崗位 begindate DATE,--開始日期 sal Number(7,2)--在該崗位時工資 ) 2.插入如下資料: INSERT INTO emp_jobhistory VALUES(1,7839,'TRAINEE','17-11月-81',500); INSERT INTO emp_jobhistory VALUES(2,7839,'SALESMAN','17-2月-82',1800); INSERT INTO emp_jobhistory VALUES(3,7839,'CLERK','17-2月-83',2000); INSERT INTO emp_jobhistory VALUES(4,7839,'SALESMAN','17-2月-85',1800); INSERT INTO emp_jobhistory VALUES(5,7839, 'MANAGER','17-2月-87',3000); commit;
一、聯合運算(UNION)
1.去重複
2.預設第一列升序排序
3.所有SQL語句的列數一致、型別一致、列名可以不一致,預設使用第一個SQL語句作為列名
4.每個SQL語句不能有自己的order by語句
1.查詢編號為7839的員工當前工資、崗位及歷史工資、崗位? SELECT * FROM emp WHERE empno = 7839; --7839的員工當前工資、崗位 SELECT * FROM emp_jobhistory WHERE empno = 7839;--7839的員工歷史工資、崗位 --多表連線(不適用) SELECT * FROM emp e,emp_jobhistory h WHERE e.empno = h.empno; --聯合運算 SELECT empno 僱員編號,sal 工資,job 崗位 FROMemp WHERE empno = 7839 --7839的員工當前工資、崗位 1條資料 UNION SELECT empno,sal,job FROM emp_jobhistory WHERE empno = 7839 ORDER BY 崗位;--7839的員工歷史工資、崗位 5條資料
二、完全聯合運算(UNION ALL)
1.不去重複
2.不排序
3.所有SQL語句的列數一致、型別一致、列名可以不一致,預設使用第一個SQL語句作為列名
4.每個SQL語句不能有自己的order by語句
5.完全聯合運算(UNION ALL)效率高於聯合運算(UNION),因為UNION ALL不需要去重,也不需要排序
1.查詢編號為7839的員工當前工資、崗位及歷史工資、崗位,要求不要去除重複資料 --完全聯合運算 SELECT empno 僱員編號,sal 工資,job 崗位 FROM emp WHERE empno = 7839 --7839的員工當前工資、崗位 1條資料 UNION ALL SELECT empno,sal,job FROM emp_jobhistory WHERE empno = 7839 ORDER BY 崗位;--7839的員工歷史工資、崗位 5條資料
三、相交運算(INTERSECT)
取多個SQL語句之間的共有資料
1.查詢哪些員工做過崗位調動? SELECT empno FROM emp--所有的員工 INTERSECT SELECT empno FROM emp_jobhistory;--呼叫過的員工編號
四、相減運算(MINUS)
取A-B的資料,即第一個SQL有,第二個SQL沒有的資料
1.查詢哪些員工沒有做過崗位調動? SELECT empno FROM emp--所有的員工 MINUS SELECT empno FROM emp_jobhistory;--呼叫過的員工編號