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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM