熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

熟練Oracle的Sql語句必做18道

2013-11-13 15:27:22  來源: Oracle 

  使用scott/tiger用戶下的emp表和dept表完成下列練習表的結構說明如下

  emp員工表(empno員工號/ename員工姓名/job工作/mgr上級編號/hiredate受雇日期/sal薪金/comm傭金/deptno部門編號)

  dept部門表(deptno部門編號/dname部門名稱/loc地點)

  工資 = 薪金 + 傭金

  .列出至少有一個員工的所有部門

  .列出薪金比SMITH多的所有員工

  .列出所有員工的姓名及其直接上級的姓名

  .列出受雇日期晚於其直接上級的所有員工

  .列出部門名稱和這些部門的員工信息同時列出那些沒有員工的部門

  .列出所有CLERK(辦事員)的姓名及其部門名稱

  .列出最低薪金大於的各種工作

  .列出在部門SALES(銷售部)工作的員工的姓名假定不知道銷售部的部門編號

  .列出薪金高於公司平均薪金的所有員工

  .列出與SCOTT從事相同工作的所有員工

  .列出薪金等於部門中員工的薪金的所有員工的姓名和薪金

  .列出薪金高於在部門工作的所有員工的薪金的員工姓名和薪金

  .列出在每個部門工作的員工數量平均工資和平均服務期限

  .列出所有員工的姓名部門名稱和工資

  .列出所有部門的詳細信息和部門人數

  .列出各種工作的最低工資

  .列出MANAGER(經理)的最低薪金

  .列出所有員工的年工資按年薪從低到高排序

  ===============================================

  使用scott/tiger用戶下的emp表和dept表完成下列練習表的結構說明如下

  emp員工表(empno員工號/ename員工姓名/job工作/mgr上級編號/hiredate受雇日期/sal薪金/comm傭金/deptno部門編號)

  dept部門表(deptno部門編號/dname部門名稱/loc地點)

  工資 = 薪金 + 傭金

  .列出至少有一個員工的所有部門

  select * from dept

  where deptno in

  (select deptno from emp group by deptno having count(*)>);

  .列出薪金比SMITH多的所有員工

  select * from emp

  where sal>(select sal from emp where ename=SMITH);

  .列出所有員工的姓名及其直接上級的姓名

  select ename(select ename from emp where empno=amgr) from emp a;

  或

  select ename (select ename from emp where empno=amgr) as mgrname from emp a;

  自連接

  select aenamebename from emp aemp b

  where amgr=bempno(+);外連接

  .列出受雇日期晚於其直接上級的所有員工

  select ename from emp a

  where hiredate>(select hiredate from emp where empno=amgr);

  列出受雇日期早於其直接上級的所有員工

  select ename from emp a where

  hiredate<(select hiredate from emp where empno=amgr);

  .列出部門名稱和這些部門的員工信息同時列出那些沒有員工的部門

  select dnameename from dept left outer join emp

  on deptdeptno=empdeptno;

  select dnameename from dept aemp b

  where adeptno = bdeptno(+);

  .列出所有CLERK(辦事員)的姓名及其部門名稱

  select dnameename from dept aemp b

  where adeptno=bdeptno and job=CLERK;

  select (select dname from dept where deptno=adeptno) as dname ename

  from emp a

  where job=CLERK;

  .列出最低薪金大於的各種工作

  select jobmin(sal) msal from emp

  group by job having min(sal)>;

  .列出在部門SALES(銷售部)工作的員工的姓名假定不知道銷售部的部門編號

  select ename from emp where deptno=(select deptno from dept where dname=SALES);

  .列出薪金高於公司平均薪金的所有員工

  select ename from emp where sal>(select avg(sal) from emp);

  .列出與SCOTT從事相同工作的所有員工

  select * from emp where job=(select job from emp where ename=SCOTT);

  .列出薪金等於部門中員工的薪金的所有員工的姓名和薪金

  select * from emp where sal in

  (select sal from emp where deptno=);

  或

  select * from emp where sal = any

  (select sal from emp where deptno=);

  .列出薪金高於在部門工作的所有員工的薪金的員工姓名和薪金

  最大值>all

  select * from emp where sal>all

  (select sal from emp where deptno=);

  最小值<all

  select * from emp where sal < all

  (select sal from emp where deptno=);

  .列出在每個部門工作的員工數量平均工資和平均服務期限

  select deptnocount(*)

  trunc(avg(sal+nvl(comm))) avgsal

  to_char(to_date(yyyymmdd) + avg(sysdatehiredate)

  yymmdd) avgday

  from emp group by deptno;

  .列出所有員工的姓名部門名稱和工資

  select enamednamesal+nvl(comm) from empdept where empdeptno=deptdeptno;

  .列出所有部門的詳細信息和部門人數

  select a*(select count(*) from emp where deptno=adeptno) tot

  from dept a ;

  .列出各種工作的最低工資

  select jobmin(sal+nvl(comm)) from emp group by job;

  這樣寫有問題

  select jobmin(nvl(sal+comm)) from emp group by job;

  .列出MANAGER(經理)的最低薪金

  select min(sal) from emp where job=MANAGER ;

  .列出所有員工的年工資按年薪從低到高排序

  select ename(sal+nvl(comm))* tot from emp order by tot;

  orcle的等連接

  SELECT d* FROM EMP E DEPT D WHERE EDEPTNO=DDEPTNO;

  orcla的外連接

  SELECT d* FROM EMP E DEPT D WHERE EDEPTNO(+)=DDEPTNO;

  +放在沒有匹配行的表一側所以dept表的記錄完全顯示

  標准等聯結

  select dept* from emp inner join dept

  on empdeptno = deptdeptno;

  標准的右外聯結

  select dept* from emp right outer join dept

  on empdeptno = deptdeptno;

  select dept* from dept left outer join emp

  on empdeptno = deptdeptno;


From:http://tw.wingwit.com/Article/program/Oracle/201311/16740.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.