Oracle 查询

系统时间

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;

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值