<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 68, comments - 19, trackbacks - 0, articles - 1

    Oracle經典查詢

    Posted on 2010-10-03 22:06 viery 閱讀(455) 評論(0)  編輯  收藏 所屬分類: Oracle

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

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

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

    工資 = 薪金 + 傭金

    1.列出至少有一個員工的所有部門。
    2.列出薪金比“SMITH”多的所有員工。
    3.列出所有員工的姓名及其直接上級的姓名。
    4.列出受雇日期早于其直接上級的所有員工。
    5.列出部門名稱和這些部門的員工信息,同時列出那些沒有員工的部門。
    6.列出所有“CLERK”(辦事員)的姓名及其部門名稱。
    7.列出最低薪金大于1500的各種工作。
    8.列出在部門“SALES”(銷售部)工作的員工的姓名,假定不知道銷售部的部門編號。
    9.列出薪金高于公司平均薪金的所有員工。
    10.列出與“SCOTT”從事相同工作的所有員工。
    11.列出薪金等于部門30中員工的薪金的所有員工的姓名和薪金。
    12.列出薪金高于在部門30工作的所有員工的薪金的員工姓名和薪金。
    13.列出在每個部門工作的員工數量、平均工資和平均服務期限。
    14.列出所有員工的姓名、部門名稱和工資。
    15.列出所有部門的詳細信息和部門人數。
    16.列出各種工作的最低工資。
    17.列出各個部門的MANAGER(經理)的最低薪金。
    18.列出所有員工的年工資,按年薪從低到高排序。

    解答

    1.列出至少有一個員工的所有部門。(兩個表聯合查詢,及group by...having的用法)
    select dname from dept where deptno in(select deptno from emp group by deptno having count(*)>1);

    2.列出薪金比“SMITH”多的所有員工。(經典的自連接查詢)
    select ename from emp where sal>(select sal from emp where ename like'SMITH');

    3.列出所有員工的姓名及其直接上級的姓名。(多次對自己查詢,為表的取個別名,內部查詢可以像對象一樣引用外部的對象的字段,這里引用與編程中的作用域相似,即與{}類比)

    select ename,(select ename from emp where empno in(a.mgr)) from emp a ;

    4.列出受雇日期早于其直接上級的所有員工。(同上,日期可直接拿來比較)

    select ename from emp a where HIREDATE<(select HIREDATE from emp where empno in(a.mgr));

    5.列出部門名稱和這些部門的員工信息,同時列出那些沒有員工的部門(以emp表為主,左連接查詢)

    select dname,emp.* from dept left join emp on dept.deptno=emp.deptno;

    6.列出所有“CLERK”(辦事員)的姓名及其部門名稱。(域,注意())

    select ename,(select dname from dept where deptno in(a.deptno)) as dname from emp a where JOB like'CLERK';

    7.列出最低薪金大于1500的各種工作。
    select job from emp where sal>1500;

    8.列出在部門“SALES”(銷售部)工作的員工的姓名,假定不知道銷售部的部門編號。(經典的兩個表連接)

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

    9.列出薪金高于公司平均薪金的所有員工。(反復查自己)

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

    10.列出與“SCOTT”從事相同工作的所有員工。(排除自己)

    select ename from emp where job in(select job from emp where ename like'SCOTT') and ename!='SCOTT' ;

    11.列出薪金等于部門30中員工的薪金的所有員工的姓名和薪金。(any的用法,且排擠)

    select ename,sal from emp where sal=any(select sal from emp wheredeptno=30) and deptno!=30;

    12.列出薪金高于在部門30工作的所有員工的薪金的員工姓名和薪金。(max的用法)

    select sal,ename from emp where sal>(select max(sal) from emp where deptno=30);


    13.列出在每個(每個是關鍵字,對此group by)部門工作的員工數量、平均工資和平均服務期限。(經典的group by用法)

    select deptno,count(*),avg(a.sal),avg(sysdate-HIREDATE) from emp a group by deptno;

    14.列出所有員工的姓名、部門名稱和工資.(經典的兩個表的連接查詢,用具體的名稱替換一個表中的主鍵的id (解決很多人在實際運用中會遇到的不能綁定多列的問題),也可用where來查詢 ,與題5比較)

    select ename,sal,(select dname from dept a where a.deptno=b.deptno)as dname from emp b;

    15.列出所有部門的詳細信息和部門人數。(因為是*,將顯示dept和后面臨時表b的全部字段(注意:不只是dept的字段,注意*號))

    select * from dept a left join (select deptno,count(*) from emp group by deptno) b on a.deptno=b.deptno ;

    16.列出各種(與每個同義(參看題13))工作的最低工資。

    select job,min(sal) from emp group by job ;


    17.列出各個部門的MANAGER(經理,經理唯一,不用group by)的最低薪金。

    select min(sal) from emp where job like'MANAGER';(因為MANAGER是值不是字段,所以不能用小寫)

    18.列出所有員工的年工資,按年薪從低到高排序。(nvl:空轉化函數)

    select ename,sal+nvl(comm,0) as sal from emp order by sal ;

    主站蜘蛛池模板: 亚洲av无码日韩av无码网站冲 | 国产大片免费观看中文字幕| 亚洲特级aaaaaa毛片| 亚洲电影免费在线观看| 亚洲成人在线电影| 免费无码中文字幕A级毛片| 亚洲一区二区影院| 久九九精品免费视频| 亚洲五月综合网色九月色| 成年女人午夜毛片免费看| 亚洲乱妇老熟女爽到高潮的片| 暖暖在线日本免费中文| 边摸边脱吃奶边高潮视频免费| 亚洲国产精品成人久久蜜臀 | a在线免费观看视频| 亚洲产国偷V产偷V自拍色戒| 十九岁在线观看免费完整版电影| 亚洲人成在线影院| AV无码免费永久在线观看| 中国china体内裑精亚洲日本| 四虎永久免费地址在线网站| 亚洲五月午夜免费在线视频| 亚洲国产精品无码av| 美女视频黄免费亚洲| 老司机午夜免费视频| 亚洲人成色777777在线观看 | 日韩成人免费视频播放| 天堂亚洲免费视频| 亚洲国产精品人久久| 成年女人免费视频播放体验区| 色偷偷噜噜噜亚洲男人| 亚洲色成人WWW永久网站| 99久久99久久精品免费看蜜桃| 亚洲AV无码一区二区三区电影| 久久精品亚洲乱码伦伦中文| 最近中文字幕电影大全免费版| 亚洲AV无码一区二区三区性色| 久久久久久a亚洲欧洲aⅴ| 成人奭片免费观看| 91成人免费观看在线观看| 亚洲已满18点击进入在线观看|