資料庫的多表查詢(詳細案例分析)
阿新 • • 發佈:2018-12-22
作者:Vashon
時間:20150414
所用資料庫:Oracle11g
多表查詢 (如果理解以下查詢,相信你可以舉一反三)
##查詢一個表中有多少條記錄:select count(*) from 表名稱; //特別是資料量太大是先用這條語句;
*範例:查詢出每一位僱員的編號,姓名,職位,部門名稱,位置;select e.empno,e.ename,e.job,d.deptno,d.loc from emp e,dept d where e.deptno=d.deptno; //確定表的關聯欄位:emp.deptno=dept.deptno;
*範例:要求查詢出每一個僱員的姓名,職位,領導的姓名:select e.ename,e.job,m.ename from emp e,emp m where e.mgr=m.empno; //第一個emp表(僱員):取得僱員姓名,職位,領導編號; 第二個emp表(領導):取得僱員的姓名(領導的姓名);
*確定所需要的資料表:emp表:每個僱員的編號,姓名,基本工資,職位;
emp表(領導):領導的姓名;
dept表:部門的名稱及位置.
*確定已知的關聯欄位:僱員和部門:emp.deptno=dept.deptno;
僱員和領導:emp.mgr=emp.empno;
select e.empno,e.ename,e.sal,e.job,m.ename,d.dname,d.loc from emp e,emp m,dept d where e.mgr=m.empno and e.deptno=d.deptno;
*確定所需要的資料表:emp表:僱員的編號,姓名,工資;
dept表:部門等級;
salgrade表:工資等級;
*確定已知的關聯欄位:僱員和部門:emp deptno=dept.deptno;
僱員和工資等級:emp sal between salgrade losal and salgrade hisal;
select e.empno,e.ename,e.sal,d.dname,decode(s.grade,1,'第五等工資',2,'第四等工資',3,'第三等工資',4,'第二等工資',5,'第一等工資') gradeinfo from emp e,dept d,salgrade s
where e.deptno=d.deptno and e.sal between s.losal and s.hisal;
*範例:查詢出公司各個工資等級僱員的數量、平均工資
select s.grade, count(e.empno), avg(e.sal)
from salgrade s,emp e where e.sal BETWEEN s.losal and s.hisal
group by s.grade;
*連線方式的改變:1.左(外)連線:left outer join...on;
2.右(外)連線:right outer join...on;
3.全(外)連線:full outer join...on; //把兩張表中沒有的資料都顯示;