1. 程式人生 > >oracle多表查詢(一)

oracle多表查詢(一)

   在進行多表查詢之前,我們先查詢一下部門表和員工表有多少資料。這個可以用count完成。

select count(*) from emp;

select count(*) from dept;

   在這裡注意,當我們在日常工作中接手一個新的庫的時候,都會要一開始去看看這個庫裡的內容是什麼,最後不要進行select *操作,如果資料量異常龐大會出現巨卡的情況...

   我們應該做的是先執行:select count(*),看一下到底有多少資料,如果資料少的話,再進行select *操作。得到的結果是emp中有10條資料,dept中有3條資料。

   

   現在來執行select * from emp,dept; 

       返回了三十條資料,也就是3*10條。這類似於是emp表中的每一個元素都跟dept表中的每一個元素組合了一下。這也被稱為笛卡爾積,但是這種情況肯定使我們不希望出現的,

那就要消除笛卡爾積,消除的辦法是找到兩個表中存在的關聯欄位。這兩個表都有公共欄位deptno

select * from emp e,dept d where e.deptno=d.deptno 

 

        雖然顯示出來的是已經消除了笛卡爾積的結果,但是oracle在執行的時候是吧之前那30條資料都查出來,然後又執行了“e.deptno=d.deptno”這個操作,所以多表查詢的效率是很慢的(前提是資料量巨大)。

範例:查詢出每一位僱員的編號、姓名、職位、部門名稱、位置

    

select e.EMPNO,e.ename,e.job,d.DNAME,d.LOC FROM EMP e,DEPT d WHERE e.DEPTNO=d.DEPTNO

 

 

 範例:要求查詢出每一位僱員的姓名、職位、領導的姓名。

這次查的內容都是在emp這個表裡的,可以說是查僱員的資訊用一次emp,查領導的資訊用一次emp,所以我們這麼來做

SELECT e1.ename 員工姓名,e1.JOB 職位,e2.ENAME 領導姓名 FROM EMP e1, EMP e2 where e1.MGR=e2.EMPNO

 

 本查詢的關鍵是 員工的上級編號=上級的員工編號