SQL 单行函数 练习题

1、找出佣金不高于薪金的60%的员工。
select ename from emp where nvl(comm ,0)<= 0.6*(sal+nvl(comm,0));

2、找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料。
select * from emp where
(job=‘manager’ and deptno=10)
or (job=‘clerk’ and deptno=20)
or ((job not in(‘manager’,‘clerk’))and(sal+nvl(comm,0))>=2000);

3.收到佣金高于基本工资20%的员工的不同工作
select distinct( job) from emp where comm>0.2*sal;

4、找出各月第一天受雇的所有员工。
select ename from emp where hiredate=trunc(hiredate,‘mm’);
select * from emp where to_char(hiredate,‘dd’)=‘01’;

5、找出早于10年前受雇的员工。
select ename from emp where months_between(sysdate,hiredate)/12>10;

6、以首字母大写的方式显示所有员工的姓名。
select initcap(ename) from emp;

7、显示小于5个字符的员工的姓名。
select ename from emp where length(ename)<5; not like ‘_____%’

8、显示不带有“K”的员工的姓名。
select ename from emp where ename not like’%K%’;

9、显示所有员工姓名的后三个字符。
select substr(ename,-3) from emp;

10、显示所有员工的姓名,用“a”替换所有“A”
select replace(ename,‘A’,‘a’) from emp;

11、显示满10年服务年限的员工的姓名和受雇日期。
select ename,hiredate from emp where months_between(sysdate,hiredate)/12>=10;

12、显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面。
select ename,hiredate from emp order by (sysdate-hiredate) desc;

13、显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面。
select ename,to_char(hiredate,‘yyyy-mm’) from
emp order by to_char(hiredate,‘mm’), to_char(hiredate,‘yyyy’) desc ;

14、找出在(任何年份的)2月受聘的所有员工。
select ename from emp where to_char(hiredate,‘mm’)=‘02’;

15、显示姓名字段的任何位置包含“A”的所有员工的姓名.
select ename from emp where ename like ‘%A%’ ;

16、查询下服务年限在30年和35年之间的所有员工信息
select * from emp where months_between(sysdate,hiredate)/12between 30 and 35;

17、显示名字中包含A,并且姓名长度不高于5的所有员工的不同职位信息
select distinct(job) from emp where ename like ‘%A%’ and length(ename)<=5;

18、列出所有员工的年工资,按年薪从低到高排序。
select (sal+nvl(comm,0))*12 年薪 from emp order by 年薪 asc; nvl2(comm,sal+comm,sal)*12;

19、按照工资进行等级划分
工资范围在(0-999)等级为L1;
工资范围在(1000-2999)等级为L2;
工资范围在(3000以上的)等级为L3;
根据上面的等级划分,查询出每个员工的员工编号,姓名,职位,和工资等级,并按照工资进行排序。
select empno,ename,job,sal,
decode(trunc(sal/1000)+1,1,‘L1’,2,‘L2’,3,‘L2’,‘L3’)
from emp order by sal;

select empno,ename,job,case
when sal<1000 then ‘L1’
when sal>=3000 then ‘L3’
else ‘L2’
end 工资等级
from emp order by sal;

select empno,ename,job,case
when trunc(sal/1000)=0 then ‘L1’
when trunc(sal/3000)=0 then ‘L2’
else ‘L3’
end 工资等级
from emp; case 先后顺序执行。

猜你喜欢

转载自blog.csdn.net/weixin_43274226/article/details/83051811