Oracle数据库基本语句练习

来源:互联网 发布:普通话测试模拟软件 编辑:程序博客网 时间:2024/05/29 15:54

以下基于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 tbBwhere tbA.sal>tbB.saland UPPER(tbB.ename)='SMITH'    

/
–3、列出所有雇员的姓名及其直接上级的姓名
–方法1:自联接

select tbA.ename as 雇员姓名,tbB.ename as 上级姓名from emp tbA,emp tbBwhere 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 tbAwhere 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,empwhere dept.deptno=emp.deptno(+)

/
–6、列出所有”CLERK”(办事员)的姓名及其部门名称

select ename as 雇员姓名,dname as 部门名称 from dept,empwhere dept.deptno=emp.deptnoand UPPER(emp.job)='CLERK'

/

–7、列出各种工作类别的最低薪金,并使最低薪金大于1500

select job as 工作 , min(sal) as 最低薪金from empgroup by jobhaving min(sal) >1500

/

–8、列出从事”SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号

select ename as 雇员姓名from emp,deptwhere emp.deptno=dept.deptnoand dept.dname='SALES'

/

–9、列出薪金高于公司平均水平的所有雇员

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

/

–10、列出与”SCOTT”从事相同工作的所有雇员
–方法1:子查询

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

/
–方法2:自联接

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

/
–方法3:关联子查询

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

–11、列出某些雇员的姓名和薪金,条件是他们的薪金等于部门30中任何一个雇员的薪金

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

/

–12、列出某些雇员的姓名和薪金,条件是他们的薪金高于部门30中所有雇员的薪金

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

/

–13、列出每个部门的信息以及该部门中雇员的数量

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

/
–注意:count(empno)

–14、列出所有雇员的雇员名称、部门名称和薪金

select ename,dname,salfrom dept,empwhere emp.deptno=dept.deptno(+)

/

–15、列出从事同一种工作但属于不同部门的雇员的不同组合

select tbA.ename,tbB.ename,tbA.job,tbB.job,tbA.deptno,tbB.deptnofrom emp tbA,emp tbBwhere tbA.job=tbB.joband tbA.deptno<>tbB.deptno

/

–16、列出分配有雇员数量的所有部门的详细信息,即使是分配有0个雇员

select dept.deptno ,dname,loc,count(empno)from dept,empwhere 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 EMPWHERE JOB='MANAGER' GROUP BY DEPTNO

/

–19、列出按计算的字段排序的所有雇员的年薪

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

/

–20、列出薪金水平处于第四位的雇员
第一种理解答案:按工资位次排,处于第4位的员工

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

/
第二种理解答案:按工资水平排,处于第4档的员工

select emp.*from emp , salgradewhere sal between losal and hisaland grade=4
原创粉丝点击