斷點

          每天進步一點點!
          posts - 174, comments - 56, trackbacks - 0, articles - 21

          SQL組合查詢例子

          Posted on 2010-07-06 23:25 斷點 閱讀(540) 評論(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);

          --求部門平均薪水的等級
          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);


          --求部門平均的薪水等級
          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);


          --不準用組函數(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));


          --求平均薪水最高的部門的部門編號。嵌套的組函數(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;

           

          --求平均薪水的等級最低的部門的部門名稱。
          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)
               )
          )


          --求平均薪水的等級最低的部門的部門名稱。采用視圖。
          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)
          )

           

          主站蜘蛛池模板: 新化县| 图片| 微博| 永仁县| 万宁市| 新沂市| 安西县| 大丰市| 郁南县| 太仆寺旗| 彩票| 红桥区| 张家港市| 宁乡县| 长沙县| 临夏县| 仁化县| 无棣县| 深州市| 隆德县| 沅江市| 根河市| 泽普县| 鄱阳县| 张家港市| 贡觉县| 舒城县| 邯郸市| 广宁县| 改则县| 伊春市| 临澧县| 定兴县| 开封县| 关岭| 临汾市| 新余市| 漳州市| 万盛区| 昌都县| 中山市|