系统时间
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;