Oracle查询练习
--1.以首字母大写的方式显示所有员工的姓名
select * from emp;
select initcap(ename) 首字母大些, emp.* from emp ;
--2. 将员工的职位用小写显示
select lower(job) 职位小写, emp.* from emp ;
--3.将员工的名字分别用大写和小写显示
select lower(ename) 名字小写,upper(ename) 名字大写 from emp ;
--4 将员工名字,首字母小写,其他字母大写的方式显示
select * from emp;
select lower(substr(ename,1,1))||upper(substr(ename,2,20)) from emp;
--5 显示员工姓名为5个字符的员工
select* from emp where length(ename)=5;
--6 显示所有员工姓名的前三个字符
select substr(ename,1,3) from emp;
--7 显示所有员工姓名的后三个字符
select substr(ename,-3,3) from emp;
--8. 以字符长度为10的方式显示员工职位,多余的位数在右边以*来填充
select rpad(ename,10,'*') from emp;
--9 找出字符串"oracle training"中第二个ra出现的位置
select instr('oracle training','ra',1,2) from dual;
--10 去除字符串‘ aadde gf ’两边的空格
select trim(' aadde gfa ') from dual;
--11 以指定格式显示员工的工资(格式:SMITH 的工资是 800)
select ename||' 的工资是 '||sal from emp e;
--12 显示所有员工的姓名,用a替换所有"A"
select replace (ename,'A','a') from emp;
--13 显示员工姓名中包含‘H’的员工
select * from emp where ename like '%H%';
--14 显示员工姓名中第二个字符是‘L’的员工
select * from emp where ename like '_L%';
--15 显示员工姓名中最后一个字符是‘T’的员工
select * from emp
where substr(ename,-1,1)='T';
-- 16.显示在一个月为30天的情况所有员工的日薪,忽略余数
select * from emp;
select floor(sal/30) from emp ;
--17.显示员工的工资为800倍数的员工信息
select * from emp where mod(sal,800)=0;
--18.对345.543进行向上取整 向下取整 四舍五入 直接舍去
select ceil(345.543) as 向上取整,floor(345.543) as 向下取整,
round(345.543) as 四舍五入 ,
trunc(345.543) as 小数点后直接舍去
from dual;
--19. 查询一个月前入职的员工(修改或添加员工表信息 出现上个月入职的员工记录再进行查询)
select * from emp;
insert into emp(empno, ename,hiredate, sal, job, deptno) ;
values(1001, 'LISI',to_date('2019/10/01','yyyy/mm/dd'),2500, 'clerk', 30);
select * from emp
where to_char( hiredate,'yyyy-mm-dd') >
to_char(add_months(sysdate,-1),'yyyy-mm-dd')
select to_char(add_months(sysdate,-1),'yyyy-mm-dd') from dual; --系统自减一个月时间
select to_char( hiredate,'yyyy-mm-dd') from emp; --员工入职时间
--20.显示员工在此公司工作了几个月(要求结果是整数)
--select to_date(sysdate,'yyyy-mm-dd') from dual;
--select to_date('2019-10-22','yyyy-mm-dd') from dual;
select round(
months_between(
to_date('2019-10-22','yyyy-mm-dd'),hiredate
)
) from emp;
--21. 显示每月倒数地3天入职的所有员工
select * from emp
where hiredate in (last_day(hiredate)-2,last_day(hiredate)-1,last_day(hiredate))
--22. 显示入职满10年的员工的姓名和受雇日期。
select to_char(hiredate,'yyyy') from emp;
select to_char(sysdate,'yyyy') from dual;
select * from emp
where to_char(sysdate,'yyyy')-to_char(hiredate,'yyyy')>10;
实践练习
select * from emp ;
--1. 显示所有12月份入职的员工
select to_char(hiredate,'mm') from emp ;
select * from emp
where to_char(hiredate,'mm')=12;
--2 .显示所有员工的姓名、加入公司的年份和月份,并且按照年份排序
select ename as 姓名,to_char(hiredate,'yyyy/mm') as 入职年月 from emp
order by to_char(hiredate,'yyyy') ;
--3. 显示所有1981年2月20日之前入职的员工
select to_date('1981/2/20','yyyy-mm-dd') from dual;
select * from emp
where hiredate <
to_date('1981/2/20','yyyy-mm-dd')
--4. 显示员工的年薪(12个月的工资+补贴)comm为补贴
select ename, sal*12,comm,nvl(comm,0)+sal*12 from emp
--5. 根据员工工资 显示缴税金额
/* 工资0-1000 缴税1%
工资1000-1500 缴税5%
工资1500-3000 缴税10%
工资3000以上 缴税20*/
select * from emp
select e.ename, e.sal,case
when e.sal<=1000 then e.sal*0.01
when e.sal<=1500 then e.sal*0.05
when e.sal<=3000 then e.sal*0.1
else e.sal*0.2
end 税金
from emp e