Oracle數據庫基本語句練習

以下基於Oeacle提供的scott管理員權限和自帶的emp表格。

–1、列出至少有一個僱員的所有部門

select distinct deptno from ```

/
–2、列出薪金比”SMITH”多的所有僱員
–方法1:子查詢

ename,sal
from emp
where sal>(select sal from emp where upper(ename)=’SMITH’)

/
–方法2:自聯接

select tbA.*
from emp tbA,emp tbB
where tbA.sal>tbB.sal
and UPPER(tbB.ename)='SMITH'    

/
–3、列出所有僱員的姓名及其直接上級的姓名
–方法1:自聯接

select tbA.ename as 僱員姓名,tbB.ename as 上級姓名
from emp tbA,emp tbB
where tbA.mgr=tbB.empno(+)

/
–方法2:關聯子查詢

select ename as 僱員姓名,(select ename from emp where empno=tbA.mgr) as 上級姓名
from emp tbA

/

–4、列出入職日期早於其直接上級的所有僱員
–方法1:關聯子查詢

select *
from emp tbA
where hiredate<(select hiredate from emp where empno=tbA.mgr)

/
–方法2:自聯接

select tbA.* from emp tbA,emp tbB where tbA.mgr=tbB.empno and
tbA.hiredate

select dname as 部門名稱,ename as 僱員名稱
from dept,emp
where dept.deptno=emp.deptno(+)

/
–6、列出所有”CLERK”(辦事員)的姓名及其部門名稱

select ename as 僱員姓名,dname as 部門名稱 
from dept,emp
where dept.deptno=emp.deptno
and UPPER(emp.job)='CLERK'

/

–7、列出各種工作類別的最低薪金,並使最低薪金大於1500

select job as 工作 , min(sal) as 最低薪金
from emp
group by job
having min(sal) >1500

/

–8、列出從事”SALES”(銷售)工作的僱員的姓名,假定不知道銷售部的部門編號

select ename as 僱員姓名
from emp,dept
where emp.deptno=dept.deptno
and dept.dname='SALES'

/

–9、列出薪金高於公司平均水平的所有僱員

select *
from emp
where sal>(select AVG(sal) from emp)

/

–10、列出與”SCOTT”從事相同工作的所有僱員
–方法1:子查詢

select *
from emp tbA
where job in (select job from emp where ename='SCOTT')  and ename<>'SCOTT'

/
–方法2:自聯接

select tbA.* 
from emp tbA,emp tbB
where tbA.job=tbB.job
and tbB.ename='SCOTT'  and tba.ename<>'SCOTT'

/
–方法3:關聯子查詢

SELECT * FROM EMP A WHERE EXISTS(SELECT JOB FROM EMP b  WHERE
b.ENAME='SCOTT' AND A.JOB=b.JOB ) and a.ename<>'SCOTT'

–11、列出某些僱員的姓名和薪金,條件是他們的薪金等於部門30中任何一個僱員的薪金

select ename,sal 
from emp
where sal in (select sal from emp where deptno=30)
--and deptno<>30

/

–12、列出某些僱員的姓名和薪金,條件是他們的薪金高於部門30中所有僱員的薪金

select ename,sal 
from emp
where sal > all (select sal from emp where deptno=30)

/

–13、列出每個部門的信息以及該部門中僱員的數量

select dept.*,count(empno)
from dept,emp
where dept.deptno=emp.deptno(+)
group by dept.deptno,dname,loc

/
–注意:count(empno)

–14、列出所有僱員的僱員名稱、部門名稱和薪金

select ename,dname,sal
from dept,emp
where emp.deptno=dept.deptno(+)

/

–15、列出從事同一種工作但屬於不同部門的僱員的不同組合

select tbA.ename,tbB.ename,tbA.job,tbB.job,tbA.deptno,tbB.deptno
from emp tbA,emp tbB
where tbA.job=tbB.job
and tbA.deptno<>tbB.deptno

/

–16、列出分配有僱員數量的所有部門的詳細信息,即使是分配有0個僱員

select dept.deptno ,dname,loc,count(empno)
from dept,emp
where dept.deptno =emp.deptno(+)
group by dept.deptno,dname,loc

/

–17、列出各種類別工作的最低工資

select job,min(sal)
 from emp
 group by job

/

–18、列出各個部門的MANAGER(經理)的最低薪金

SELECT DEPTNO,MIN(SAL) FROM EMP
WHERE JOB='MANAGER' GROUP BY DEPTNO

/

–19、列出按計算的字段排序的所有僱員的年薪

select  empno,ename , (sal+nvl(comm,0))*12 as 年薪
from emp
order by 年薪

/

–20、列出薪金水平處於第四位的僱員
第一種理解答案:按工資位次排,處於第4位的員工

select *
from (select empno,sal, rank() over (order by sal desc) as 工資位次 from emp)
where 工資位次=4

/
第二種理解答案:按工資水平排,處於第4檔的員工

select emp.*
from emp , salgrade
where sal between losal and hisal
and grade=4
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章