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

posted @ 2020-03-03 13:58  Jason–json  阅读(1996)  评论(0编辑  收藏  举报