oracle9i學習筆記之十四 使用集合運算

2021-04-28 18:42:09 字數 3912 閱讀 7484

這一章,要用到兩個表:emp和job_history.下面是job_history的建立資訊:

create table job_history(

empno  number(4) not null,

deptno  number(4) not null ,           

start_date  date,          

end_date  date,         

job  varchar2(9));

insert into job_history values(7369,10,'01-1月-2002','31-12月-2004','clerk');

insert into job_history values(7369,20,'01-1月-2005','31-12月-2006','clerk');

insert into job_history values(7499,10,'15-2月-2002','31-12月-2004','salesman');

insert into job_history values(7499,20,'12-3月-2005','31-12月-2006','salesman');

insert into job_history values(1000,10,'15-2月-2002','31-12月-2004','salesman');

1.聯合運算(union)

-從兩個查詢返回除去重複值後的結果

例:顯示當前和以前所有雇員的工作崗位,重複的記錄不顯示

select empno,job

from   emp

union

select empno,job

from   job_history;

結果:empno  job 

1000    

7369  clerk 

7499  salesman 

7521  salesman 

...7934  clerk 

2.全聯合運算(union all)

-從兩個查詢返回包括所有重複值的結果

例:顯示當前和以前所有雇員所在的部門

select empno,job,deptno

from emp

union  all

select empno,job,deptno

from job_history

order by empno;

結果:empno    job    deptno 

1000              10 

7369    clerk     20 

7499    salesman  30 

7521    salesman  30 

7566    manager   20 

7654    salesman  30 

7698    manager   30 

7782    manager   10 

7788    analyst   20 

7839    president 10 

7844    salesman  30 

7876    clerk     20 

7900    clerk     30 

7902    analyst   20 

7934    clerk     10 

3.相交運算(intersect)

-返回多個查詢中所有相同的行

例:顯示雇員表的emp和job,這些雇員當前所做的工作是他們以前做過一段時間,後來有變化,現在又在做的工作

select empno,job

from emp

intersect

select empno,job

from job_history;

結果:empno   job 

7369   clerk 

7499   salesman 

4.相減運算(minus)

-返回在第乙個查詢中而不再第二個查詢中的行

例:顯示那些從來沒有改變過他們工作的雇員

select empno,job

from emp

minus

select empno,job

from job_history;

結果:empno  job 

1000    

7521  salesman 

7566  manager 

7654  salesman 

7698  manager 

7782  manager 

7788  analyst 

7839  president 

7844  salesman 

7876  clerk 

7900  clerk 

7902  analyst 

7934  clerk 

5.結合運算的原則

-在兩個select列表中的表示式必須在數目上和資料型別上相匹配

-在結果中的列名是第乙個查詢中出現的列名

-order by子句:

-只能出現在語句的最後

-從第乙個select語句接收列名、別名,或者位置記號

6.匹配select語句

例:使用union運算,顯示所有雇員的empno、job和sal

select empno,job,sal

from   emp

union

select empno,job,0

from   job_history;

結果:empno  job      sal 

1000  salesman  0 

1000            3000 

7369  clerk     0 

7369  clerk     2000 

7499  salesman  0 

7499  salesman  1600 

7521  salesman  1250 

7566  manager   2975 

7654  salesman  1250 

7698  manager   2850 

7782  manager   2450 

7788  analyst   3000 

7839  president 5000 

7844  salesman  1500  

7876  clerk     1100 

7900  clerk     950 

7902  analyst   3000 

7934  clerk     1300 

練習:1.用集合運算,列出不包含job為clerk的部門的部門號

select deptno

from   emp

minus

select deptno

from   emp

where  job='clerk';

2.列出雇員的雇員編號和工作標識,哪些雇員現在的工作和他們以前的工作相同

select empno,job

from   emp

intersect

select empno,job

from   job_history;  

3.寫乙個復合查詢,列出下面的資訊:

-emp表中所有雇員的名字和部門標識

-dept表中的所有部門標識和部門名稱

select ename,deptno,to_char(null)

from emp

union

select to_char(null),deptno,dname

from dept;

oracle9i學習筆記之十四 使用集合運算

這一章,要用到兩個表 emp和job history.下面是job history的建立資訊 create table job history empno number 4 not null,deptno number 4 not null start date date,end date date...

學習oracle9i 筆記(2)

接著上一次的筆記,我在把我一些學習oracle9i的心得繼續記錄下來,為那些剛剛學習oracle 的人,一些幫助 oracle中常用的資料型別為 常用的資料庫字段型別如下 字段型別 中文說明 限制條件 其它說明 char 固定長度字串 最大長度2000 bytes varchar2 可變長度的字串 ...

oracle 9i學習之路

oracle基本元件結構圖oracle管理後台儲存樹結構圖 引數檔案 parameter 一 9i之前版本 pfile檔案,文字格式 二 spfile檔案,二進位制格式 口令檔案 password 本地的sysdba,以作業系統認證的形式登入。遠端的sysdba,通過passwordfile認證 儲...