Oracle的多表查詢----------內連接

/*

   語法1

      select *

      from tab1,tab2

      where 條件;

     

    語法2

      select *

      from tab1 inner join tab2

      on 條件

     

   內連接查詢效果:  只有滿足條件的數據纔會顯示。

*/

-- 笛卡爾積 = 14*4= 56

-- 需求:查詢員工和部門數據

select *

from emp,dept;

 

-- 需求:查詢員工和部門數據

-- 語法1

selecte.empno,e.ename,d.deptno,d.dname

from emp e,dept d

where e.deptno = d.deptno;

 

-- 語法2

selecte.empno,e.ename,d.deptno,d.dname

from emp e innerjoin dept d

on e.deptno = d.deptno;

 

-- 案例

-- 需求:查詢員工及其上司信息

select e1.empno,e1.ename,e2.empno,e2.ename

from emp e1,emp e2

where e1.mgr = e2.empno;

 

-- 需求:在上面基礎上,查詢員工的部門信息

selecte1.empno,e1.ename,d1.deptno,d1.dname,e2.empno,e2.ename

from emp e1,emp e2,dept d1

where e1.mgr = e2.empno

and e1.deptno = d1.deptno;

 

-- 需求:在上面基礎上,查詢上司的部門信息

selecte1.empno,e1.ename,d1.deptno,d1.dname,e2.empno,e2.ename,d2.deptno,d2.dname

from emp e1,emp e2,dept d1,dept d2

where e1.mgr = e2.empno

and e1.deptno = d1.deptno

and e2.deptno  = d2.deptno;

 

 

-- 需求:在上面基礎上,查詢員工的工資級別

selecte1.empno,e1.ename,d1.deptno,d1.dname,e1.sal,s1.grade,e2.empno,e2.ename,d2.deptno,d2.dname

from emp e1,emp e2,dept d1,deptd2,salgrade s1

where e1.mgr = e2.empno

and e1.deptno = d1.deptno

and e2.deptno  = d2.deptno

and e1.sal between s1.losal and s1.hisal;

 

-- 需求:在上面基礎上,查詢上司的工資級別

select e1.empno,e1.ename,d1.deptno,d1.dname,e1.sal,s1.grade,e2.empno,e2.ename,d2.deptno,d2.dname,e2.sal,s2.grade

from emp e1,emp e2,dept d1,deptd2,salgrade s1,salgrade s2

where e1.mgr = e2.empno

and e1.deptno = d1.deptno

and e2.deptno  = d2.deptno

and e1.sal between s1.losal and s1.hisal

and e2.sal between s2.losal and s2.hisal;

 

-- 需求:在上面基礎上,把員工的工資級別顯示爲"一級,二級,三級...."

selecte1.empno,e1.ename,d1.deptno,d1.dname,e1.sal,

decode(s1.grade,1,'一級',2,'二級',3,'三級',4,'四級') as員工工資級別

,e2.empno,e2.ename,d2.deptno,d2.dname,e2.sal,s2.grade

from emp e1,emp e2,dept d1,deptd2,salgrade s1,salgrade s2

where e1.mgr = e2.empno

and e1.deptno = d1.deptno

and e2.deptno  = d2.deptno

and e1.sal between s1.losal and s1.hisal

and e2.sal between s2.losal and s2.hisal;

 

-- 需求:在上面基礎上,把上司的工資級別顯示爲"一級,二級,三級...."

selecte1.empno,e1.ename,d1.deptno,d1.dname,e1.sal,

decode(s1.grade,1,'一級',2,'二級',3,'三級',4,'四級') as員工工資級別

,e2.empno,e2.ename,d2.deptno,d2.dname,e2.sal,

decode(s2.grade,1,'一級',2,'二級',3,'三級',4,'四級',5,'五級') as上司工資級別

from emp e1,emp e2,dept d1,deptd2,salgrade s1,salgrade s2

where e1.mgr = e2.empno

and e1.deptno = d1.deptno

and e2.deptno  = d2.deptno

and e1.sal between s1.losal and s1.hisal

and e2.sal between s2.losal and s2.hisal;

 

 


 -------------------------------------------------------------------------------

select * from emp;

select * from dept;

select * from salgrade;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章