1. 程式人生 > >資料庫的多表查詢(詳細案例分析)

資料庫的多表查詢(詳細案例分析)

作者: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;  //把兩張表中沒有的資料都顯示;