斷點(diǎn)

          每天進(jìn)步一點(diǎn)點(diǎn)!
          posts - 174, comments - 56, trackbacks - 0, articles - 21

          SQL組合查詢例子

          Posted on 2010-07-06 23:25 斷點(diǎn) 閱讀(540) 評(píng)論(0)  編輯  收藏 所屬分類: Oracle DBA

          select e1.ename,e2.ename from emp e1 join emp e2 on (e1.mgr=e2.empno); --自連接,從e2中取出e1的經(jīng)理人。
          select ename,dname from emp e left join dept d on (e.deptno=d.deptno);   --左外連接
          select ename,dname from emp e right outer join dept d on (e.deptno=d.deptno);   --右外連接
          select ename,dname from emp e full join dept d on (e.deptno=d.deptno);    --全連接


          --求部門中哪些人的薪水最高
          select ename,sal from emp
          join (select max(sal) max_sal,deptno from emp group by deptno) t
          on (emp.sal = t.max_sal and emp.deptno = t.deptno);

          --求部門平均薪水的等級(jí)
          select deptno,avg_sal,grade from
          (select deptno,avg(sal) avg_sal from emp group by deptno) t
          join salgrade s on (t.avg_sal between s.losal and s.hisal);


          --求部門平均的薪水等級(jí)
          select avg(grade) from
          (select deptno,ename,grade from emp join salgrade s on (emp.sal between s.losal and s.hisal )) t
          group by deptno;

          --雇員中有哪些人是經(jīng)理人
          select ename from emp where empno in (select distinct mgr from emp);


          --不準(zhǔn)用組函數(shù),求薪水的最高值。采用的是自連接。
          select distinct sal from emp where sal not in
          (select distinct e1.sal from emp e1 join emp e2 on (e1.sal < e2.sal));


          --求平均薪水最高的部門的部門編號(hào)。嵌套的組函數(shù)。
          select deptno,avg_sal from
          (select avg(sal) avg_sal,deptno from emp group by deptno)
          where avg_sal =
          (select max(avg(sal)),deptno from emp group by deptno;

           

          --求平均薪水的等級(jí)最低的部門的部門名稱。
          select dname,t1.deptno,grade,avg_sal from
            (
             select deptno,grade,avg_sal from
               (select deptno,avg(sal) avg_sal from emp group by deptno) t
               join salgrade s on (t.avg_sal between s.losal and s.hisal)
            )
             t1
             join dept on (t1.deptno = dept.deptno)
          )
          where t1.grade =
          (
           select min(grade) from
               (select deptno,grade,avg_sal from
            (select deptno,grade,avg(sal) avg_sal from emp group by deptno) t
             join salgrade s on (t.avg_sal between s.losal and s.hisal)
               )
          )


          --求平均薪水的等級(jí)最低的部門的部門名稱。采用視圖。
          conn sys/sys as sysdba;
          grant create table,create view to scott;

          create view v$_dept_avg_sal_info as
          select deptno,grade,avg_sal from
            (select deptno,grade,avg(sal) avg_sal from emp group by deptno) t
             join salgrade s on (t.avg_sal between s.losal and s.hisal);

          select dname,t1.deptno,grade,avg_sal from
             v$_dept_avg_sal_info t1
             join dept on (t1.deptno = dept.deptno)
          )
          where t1.grade =
          (
           select min(grade) from  v$_dept_avg_sal_info
          )

          -- 比普通員工的最高薪水還要高的經(jīng)理人名稱。
          select ename from emp
          where empno in (select distinct mgr from emp where mgr is not null)
          and sal >
          (
            select max(sal) from emp where empno not in
            (select distinct mgr from emp where mgr is not null)
          )

           

          主站蜘蛛池模板: 北海市| 万宁市| 兴宁市| 广西| 德江县| 罗山县| 循化| 德格县| 蓝田县| 金山区| 永泰县| 峡江县| 嘉鱼县| 宜州市| 金川县| 贵州省| 望谟县| 平顶山市| 中山市| 筠连县| 南漳县| 乌拉特前旗| 泸溪县| 汪清县| 台中县| 慈利县| 绥棱县| 道孚县| 武义县| 民乐县| 安岳县| 晋州市| 三门县| 娄底市| 曲周县| 万年县| 射洪县| 华池县| 安龙县| 皮山县| 尉犁县|