Oracle 查询

    技术2024-08-15  78

    系统时间

    select sysdate from dual;

     

    收入最高的员工的名字和薪水

    错误: select ename, max(sal) from emp; 原因: max为组函数,此查询中ename可能不唯一。

    正确: select ename, sal from emp where sal=(select max(sal) from emp);

     

    每个部门的最高薪水的员工的姓名和薪水

    错误: select ename, max(sal) from emp group by deptno; 原因: ename

    正确:

            select emp.ename, emp.sal, emp.deptno from emp         join (select max(sal) maxSAL, deptno from emp group by deptno) b         on( sal = b.maxSAL and emp.deptno = b.deptno);

     

    薪水大于1200的雇员按照部门编号进行分组,分组后的平均薪水必须大于1500,查询分组后的平均工资,按照平均工资的倒序排列

    select avg(sal) from emp

    where sal>1200

    group by deptno

    having avg(sal)>1500

    order by avg(sal) desc;

     

    部门平均工资的等级

    select a.deptno, a.avgsal, b.grade from (select deptno, avg(sal) avgsal from emp group by deptno) a join salgrade b on (a.avgsal>b.losal and a.avgsal<b.hisal);

     

    部门平均的薪水等级

    select deptno, avg(grade) from   (select empno, deptno, grade from emp join salgrade s on (emp.sal between s.losal and s.hisal)) t group by deptno;

     

    员工及其经理人的名字

    select e1.ename, e2.ename from emp e1, emp e2 where e1.mgr = e2.empno;

     

    雇员之中那些是经理人

    select ename from emp where empno in(select distinct mgr from emp);

     

    不用组函数,求薪水的最高值

    select sal from emp where sal not in(select distinct e1.sal from emp e1 join emp e2 on (e1.sal<e2.sal));

    或者先排序,在去第一条记录

     

    平均薪水最高的部门的编号

    select deptno, max(avgsal) from  (select deptno, avg(sal) avgsal from emp group by deptno) a;

     

    平均薪水等级最低的部门的名称

    select dname, min_avg_sal grade from dept join (      select deptno, min(avg_sal) min_avg_sal,grade from      ( select deptno, avg_sal, grade from salgrade s join        (select deptno, avg(sal) avg_sal from emp group by deptno) a        on (a.avg_sal>s.losal and avg_sal<s.hisal)     ) b )c on (dept.deptno = c.deptno)

     

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->

    求薪水最高的前 6 名到第 10 名员工

    使用 rownum, rownum 是隐含列,可以进行 <= 操作,不能进行 >= 操作, rownum 的初始值为插入数据的顺序。

    思路: 1. 排序。 2 。以排序结果作为子查询,取得 rownum. 3. 以以上结果作为子查询,用 rowunm 进行大于或小于操作。

     

    Select empno, sal from

    (

    select empno, sal, rownum rn from

    (select empno, sal from emp order by sal desc)

    )

    where rn>6 and rn<10;

     

    复制表

    create table dept2 as select * from dept;

     

    复制数据到新表中

    insert into dept2 select * from dept;

     

     

     

    最新回复(0)