oracle多表查詢(一)
阿新 • • 發佈:2018-11-19
在進行多表查詢之前,我們先查詢一下部門表和員工表有多少資料。這個可以用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
本查詢的關鍵是 員工的上級編號=上級的員工編號