oracle多表查詢
阿新 • • 發佈:2018-11-05
lec 所有 oracle 日期 sin 自然連接 ner and 笛卡爾積
oracle多表查詢
--1.DEPT表按照部門跟EMP表左關聯 select ename,sal,dname,e.deptno from emp e left outer join dept d on e.deptno = d.deptno select ename,sal,dname,e.deptno from emp e , dept d where e.deptno = d.deptno(+) --2. 列出所有“CLERK”(辦事員)的姓名及其部門名稱。 --笛卡爾積 select ename,dname,job from emp e,dept d where e.deptno = d.deptno and job = 'CLERK' --內連接 select ename,dname,job from emp e inner join dept d on e.deptno = d.deptno and job = 'CLERK' select ename,dname,job from emp e join dept d on e.deptno = d.deptno and job = 'CLERK' select ename,dname,job from emp e join dept d using(deptno) where job = 'CLERK' --自然連接 select ename,dname,job from emp e natural join dept d where job = 'CLERK' --外連接(不合適) --select ename,dname,job from emp e right outer join dept d on e.deptno = d.deptno and job = 'CLERK' --3. 列出所有雇員的雇員名稱、部門名稱和薪金(使用自然連接,using字句,on字句) --自然連接 select ename,dname,sal from emp e natural join dept d --using子句(inner可省略) --內連接 select ename,dname,sal from emp e inner join dept d using(deptno) select ename,dname,sal from emp e join dept d using(deptno) --外連接 select ename,dname,sal from emp e left outer join dept d using(deptno) select ename,dname,sal from emp e right outer join dept d using(deptno) --on子句(inner可省略) --內連接 select ename,dname,sal from emp e inner join dept d on e.deptno = d.deptno select ename,dname,sal from emp e join dept d on e.deptno = d.deptno --外連接 select ename,dname,sal from emp e left outer join dept d on e.deptno = d.deptno select ename,dname,sal from emp e right outer join dept d on e.deptno = d.deptno select ename ,dname,sal from emp e,dept d where e.deptno = d.deptno(+) select ename ,dname,sal from emp e,dept d where e.deptno(+) = d.deptno select ename,dname,sal from emp e full outer join dept d on e.deptno = d.deptno --4. 列出部門名稱和這些部門的員工信息,同時列出那些沒有員工的部門 --右外連接 select dname,e.* from emp e right outer join dept d on e.deptno = d.deptno --5. 列出所有員工的姓名及其直接上級領導的姓名 --笛卡爾積 select e.ename 員工姓名,b.ename 老板姓名 from emp e, emp b where e.mgr = b.empno --內連接 select e.ename 員工姓名, b.ename 老板姓名 from emp e inner join emp b on e.mgr = b.empno --外連接 --左外連接 select e.ename 員工姓名, b.ename 老板姓名 from emp e left outer join emp b on e.mgr = b.empno select e.ename 員工姓名, b.ename 老板姓名 from emp e , emp b where e.mgr = b.empno(+) --右外連接(不合適) --select e.ename 員工姓名, b.ename 老板姓名 from emp e right outer join emp b on e.mgr = b.empno --select e.ename 員工姓名, b.ename 老板姓名 from emp e , emp b where e.mgr(+) = b.empno --6. 顯示所有員工的姓名ename,部門號deptno和部門名稱dname。(使用自然連接,using字句,on字句) --自然連接 select ename,deptno,dname from emp e natural join dept d --using select ename ,deptno , dname from emp e join dept d using(deptno) select ename,deptno , dname from emp e left outer join dept d using(deptno) --on select ename,d.deptno,dname from emp e join dept d on e.deptno = d.deptno select ename ,d.deptno,dname from emp e left outer join dept d on e.deptno = d.deptno --7. 查詢20號部門員工的job和20號部門的loc 20; select job,loc from emp e join dept d on e.deptno = d.deptno and d.deptno = 20 --8. 選擇所有有獎金comm的員工的ename , dname , loc select ename,dname,loc from emp e join dept d on e.deptno = d.deptno and comm is not null; --9.選擇在DALLAS工作的員工的ename , job , deptno, dname select ename,job ,d.deptno, dname from emp e join dept d on e.deptno = d.deptno and loc = 'DALLAS' --10. 顯示雇員名、雇員工資及所在部門的名字,並按部門排序。(使用自然連接,using字句,on字句) --自然連接 select ename,sal,dname from emp e natural join dept d order by job --using select ename ,sal , dname from emp e join dept d using(deptno) order by job select ename,sal , dname from emp e left outer join dept d using(deptno) order by job --on select ename,sal,dname from emp e join dept d on e.deptno = d.deptno order by job select ename ,sal,dname from emp e left outer join dept d on e.deptno = d.deptno order by job --11. 列出至少有一個員工的所有部門的部門名稱(DNAME)和該部門的員工人數(使用自然連接,using字句,on字句) --自然連接 select dname,count(empno) 員工人數 from emp e natural join dept d group by dname --on子句 select dname,count(empno) 員工人數 from emp e left outer join dept d on e.deptno = d.deptno group by dname --using子句 select dname,count(empno) 員工人數 from emp e left outer join dept d using(deptno) group by dname --12. 查詢受雇日期早於其直接上級的所有員工的編號,姓名,部門名稱 select empno,h.hname,dname from dept d , (select e.empno,e.ename as hname,b.ename,e.deptno as dep from emp e join emp b on e.mgr = b.empno and e.hiredate < b.hiredate) h where d.deptno = h.dep --13. 查詢至少有4個員工的部門的部門名稱。(使用自然連接,using字句,on字句) --自然連接 select dname from emp e natural join dept d group by dname having count(empno) > 4 --using子句 select dname from emp e join dept d using(deptno) group by dname having count(empno) > 4 --on子句 select dname from emp e join dept d on e.deptno = d.deptno group by dname having count(empno) > 4 --14. 查詢部門名稱中帶'S'字符的部門的員工的工資總和部門人數,顯示結果為部門名稱,部門員工的工資總和,部門人數 select dname,sum(sal),count(empno) from emp e join dept d on e.deptno = d.deptno and dname like '%S%' group by dname --15. 查詢出沒有下屬的員工的姓名及他的職位 select b.ename,b.job from emp b left outer join emp e on e.mgr = b.empno where e.ename is null
oracle多表查詢