**
oracle详细笔记
-- 一:简单查询
--1.选择在部门 30 中员工的所有信息
select * from emp e where e.deptno = '30';
--2.列出职位为( MANAGER)的员工的编号,姓名
select e.empno,e.ename from emp e where e.job = 'MANAGER';
--3.找出奖金高于工资的员工
select * from emp e where e.comm > e.sal;
--4.找出每个员工奖金和工资的总和
select e.ename,(e.comm+e.sal)total from emp e;
--5.找出部门 10 中的经理(MANAGER)和部门 20 中的普通员工(CLERK)
SELECT *
FROM EMP a
where (a.deptno = '10' and a.job = 'MANAGER')
or (a.deptno = '20' and a.job = 'MANAGER');
--6.找出部门 10 中既不是经理也不是普通员工,而且工资大于等于 2000 的员工:(in函数)
select *
from emp e
where e.deptno = '10'
and e.job not in ('MANAGER', 'MANAGER')
and e.sal >= 2000;
--7.找出有奖金的员工的不同工作
select distinct e.job, e.ename, e.sal, e.comm
from emp e
where e.comm is not null
and e.comm > 0;
--8.找出没有奖金或者奖金低于 500 的员工
select * from emp e where e.comm is null or e.comm < 500 ;
--9.显示雇员姓名,根据其服务年限,将最老的雇员排在最前面
select e.ename,e.hiredate from emp e order by e.hiredate asc
-- -------------------------- 二:单行函数 --------------------- -----
--1.Upper:转换为大写
select Upper('abcd') from dual;
select * from emp e where e.ename = upper('smith');
--2:Lower:转换为小写
select lower('ASAD') from dual;
--3:Initcap:返回字符串并将字符串的第一个字母变为大写;
select initcap(e.ename) from emp e;
select initcap('smith') from dual;
--4.Concat:拼接
select concat('123','abc') from dual;
select '111' || '222' from dual;
--5.Substr:字符串截取:截取右边内容,包括左边
SELECT SUBSTR('abcdef',LENGTH('abcdef')-2) FROM dual
SELECT substr('abcdef',-4,3) FROM dual;--从右边算起截取:cde
--6.length
SELECT e.ename,Length(e.ename) FROM emp e;
--7.Replace
SELECT replace(e.ename,'A','爱') FROM emp e ;
--8.instr:在一个字符串中查找指定的字符,返回被查找到的指定的字符的位置。(下表从1开始算起)
SELECT INSTR('Hello World','rl') FROM dual;
--9.Lpad :左侧开始填充
SELECT lpad('Hello',10,'@') FROM dual;
--10.Rpad
SELECT rpad('Hello',10,'*') FROM dual;
--11.Trim :过滤首位空格
SELECT trim(' Hello Word ') FROM dual;
---数值函数
--1.Round,第二个参数保留的小数位数
SELECT round(412,-1) FROM dual;
select round(412.236,2) from dual;
--2.Trunc:TRUNC函数返回处理后的数值,其工作机制与ROUND函数极为类似,只是该函数不对指定小数前或后的部分做相应舍入选择处理,而统统截去。
--注意:第二个参数可以为负数,表示为小数点左边指定位数后面的部分截去,即均以0记。与取整类似,
--比如参数为1即取整到十分位,如果是-1,则是取整到十位
--TRUNC(89.985,2)=89.98
--TRUNC(89.985)=89
--TRUNC(89.985,-1)=80
select trunc(412.13,-2) from dual;
---日期函数
--1.Months_between()
select months_between(sysdate,e.hiredate) from emp e ;
--2.Add_months():增加月
select add_months(sysdate,2) from dual;
--NEXT_DAY(date,char) date参数为日期型, char:为1~7或Monday/Mon~Sunday/
--指定时间的下一个星期几(由char指定)所在的日期,
--char也可用1~7替代,1表示星期日,2代表星期一。。。。 还可以是星期一、星期二。。。星期日
select next_day(sysdate,2) from dual;
--3.Last_day:LAST_DAY函数返回指定日期对应月份的最后一天。
select last_day(sysdate) from dual;