精选oracal查询语句

1. 查询员工表所有数据并说明使用*的缺点

select * from emp;

把不需要的列也会查询出来,在性能上比较低

2. 查询职位(JOB)'PRESIDENT'的员工的工资

select * from emp where JOB=”PRESIDENT”

3. 查询佣金(COMM)或为NULL 的员工信息

select *from emp where COMM=0 or COMM is null 

4. 查询入职日期在1981-5-1 1981-12-31 之间的所有员工信息

select * from emp where hire between 

to_date(‘1981-5-1’,’yyyy-MM-dd’) and to_date(‘1981-12-31’,’yyyy-MM-dd’)

5. 查询所有名字长度为的员工的员工编号,姓名

select * from emp where length(ename)=4 

6. 显示10 号部门的所有经理('MANAGER')20 号部门的所有职员('CLERK')的详细信息

Oracleand or 优先级要高,总是先执行完and ,再执行or

Select *from emp where deptno=10 and job=’MANAGER’ or deptno=20 and job=’CLERK’;

7. 显示姓名中没有'L'字的员工的详细信息或含有'SM'字的员工信息

select * from emp where ename not like ‘%L%’ or ename like “%SM%”;

8. 显示各个部门经理('MANAGER')的工资

select SAL from emp where JOB=”MANAGER”

9. 显示佣金(COMM)收入比工资(SAL)高的员工的详细信息

select *from emp where COMM>SAL

10. 把hiredate 列看做是员工的生日,求本月过生日的员工

select *from emp where hiredate to_char(hiedate,’mm’)=to_char(sysdate,’mm’);

11. 把hiredate 列看做是员工的生日,求下月过生日的员工

select *from emp where to_char(hiredate,’mm’)=to_char(add_months(sysdate,1),’mm’);

12. 求1982 年入职的员工

select * from emp where to_char(hiredate,’yyyy’)=”1982”

13. 求1981 年下半年入职的员工

select * from emp where hiredate between to_date(‘1981-7-1’,’yyyy-mm-dd’) 

and to_date(‘1982-1-1’,’yyyy-mm-dd’)-1;

 

14. 求1981 年各个月入职的的员工个数

select count(*),to_char(trunc(hiredate,’month’),’yyyy-mm’) from emp 

where to_char(hiredate,’yyyy’)=’1981’ 

group by trunc(hiredate,’month’) order by trunc(hiredate,’month’);

 

15. 查询各个部门的平均工资

select deptno,avg(sal) from emp group by deptno;

16. 显示各种职位的最低工资

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

17. 按照入职日期由新到旧排列员工信息

select * from emp order by hiredate desc

18. 查询员工的基本信息,附加其上级的姓名

select e.*,e2.ename from emp e,emp e2 where e.mgr=e2.empno;

19. 显示工资比'ALLEN'高的所有员工的姓名和工资

select * from emp where sal>(select sal from emp where ename=’ALLEN’);  

20. 显示与'SCOTT'从事相同工作的员工的详细信息

select * from emp where job=(select job from emp where ename=’SCOTT’);

21. 显示销售部('SALES')员工的姓名

select ename from emp e ,dept d  where e.deptno=d.deptno and dname=”SALES”;

22. 显示与30 号部门'MARTIN'员工工资相同的员工的姓名和工资

select ename,sal from emp where sal=(select sal from emp where ename=”MARTIN” and deptno=30);

23. 查询所有工资高于平均工资(平均工资包括所有员工)的销售人员('SALESMAN')

select * from emp where job=’SALESMAN’ and 

sal>(select avg(sal) from emp);

24. 显示所有职员的姓名及其所在部门的名称和工资

select ename,dname,sal from emp e,dept d where e.deptno=d.deptno;

25. 查询在研发部('RESEARCH')工作员工的编号,姓名,工作部门,工作所在地

select empno,ename,dname,loc from emp e,dept d  

where e.deptno=d.deptno and dname=”RESEARCH”

26. 查询各个部门的名称和员工人数

select * from (select count(*) c,deptno from emp group by deptno) e

inner join dept d on e.deptno=d.deptno;

27. 查询各个职位员工工资大于平均工资(平均工资包括所有员工)的人数和员工职位

select count(*),job from emp where sal>(select avg(sal) from emp) group by job;

28. 查询工资相同的员工的工资和姓名

select sal,ename from emp e where (select count(*) from emp where sal=e.sal group by sal)>1;

29. 查询工资最高的名员工信息

select * from (select * from emp order by sal desc) where rownum<=3;

30. 按工资进行排名,排名从开始,工资相同排名相同(如果两人并列第则没有第,从第三名继续排)

select e.*,(select count(*) from emp where sal>e.sal)+1 rank from emp e order by rank;

31. 求入职日期相同的(年月日相同)的员工

select * from emp e where (select count(*) from emp where hiredate=e.hiredate)>1;

32. 查询每个部门的最高工资

select deptno,max(sal) maxsal from emp group by deptno order by deptno;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值