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;

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章