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

你可能感兴趣的:(数据库)