26.修改日期数据的显示格式: session:缓存 format:表示格式 nls:nation language support
Alter session set nls_date_format=‘yyyy-mm–dd’;
Alter session set nls_date_format=‘yyyy-dd–mm’;
Alter session set nls_date_format=‘mm-dd–yyyy’;
注意:此命令只能修改当前连接中的缓存格式,一旦断开连接,就会恢复原样,原表格中的数据格式不会发生变化。
如,select ename,hiredate from ZQ_001 where hiredate>‘81-05-01’ order by hiredate;——请列出员工表中在“1981-05-01”后入职的员工姓名和入职信息并按入职日期排序显示
27.空值函数:nul2(A,B,C) 功能与nvl()函数类似,但不一样
使用方法:首先判断A是否为空值null:若A值为null,则取C值;若A值不为Null值,则取B值。
如,select ename,nvl2(bonus,bonus,100) from ZQ_001;——请列出员工表中所有员工的姓名和奖金,奖金为空的值额外发放100元补助
28.置换函数replace(A,B,C)
首先判断A的值是否为B:条件成立,则替换成C的值;条件不成立,则不变。
如,select ename,replace(bonus,0,null) from ZQ_001;
select ename,nvl2(bonus,bonus,100) from ZQ_001;——请列出员工表中所有员工的姓名和奖金,没有奖金的员工额外发放100元补助(包括0和null)
29.聚合函数:5大常用
Max() 最大值函数; min() 最小值函数; avg() 平均值函数; sum() 求和函数; count() 计数函数;
如,请列出员工表中拿最高薪水的员工姓名和他本人的薪水(思考题)
select max(salary) from ZQ_001;——-第一步:列出最高薪水
select ename,salary from ZQ_001 order by salary desc; ——依据最高薪水,列出姓名和对应薪水
如,select avg(salary) from ZQ_001;——请列出所有员工表中所有员工的平均薪水
如,select sum(salary) from ZQ_001;——请列出员工表中全部员工的薪水总和
如,select count(‘job’)from ZQ_001; select count(ename) from ZQ_001;
select count(mgr) from ZQ_001;–错误,有空值null
select count(salary) from ZQ_001;
如,select ename,salary,depotno from ZQ_001 where salary>(select avg(salary) from ZQ_001);——请列出员工表中薪水高于平均薪水的员工姓名,薪水和部门编号
注释:对于计数函数count()内的参数可以使用表中任意一个字段名,其提示该字段名zing没有空值null;标准写法:select count(*) from 表名;
30.条件查询符合:“>” “<” “<=” “>=” “!=” “<>”
注释:“!=”,“<>”都表示“不等于”
如,select * from ZQ_001 where not depotno=10; select * from ZQ_001 where depotno!=10;
select * from ZQ_001 where depotno<>10; ——列出员工部门不是10号部门的员工信息(多种方式)
31.去重关键字:distinct
修饰词,直接写在字段名前,删除重复的数据值,只保留一个
如,请列出员工表中经理有哪些,显示其排名(排除老板)
select mgr from ZQ_001;–列出所有的上级编号
select ename from ZQ_001 where enpno in(select mgr from ZQ_001);–依据上级编号列出姓名
select ename from ZQ_001 where enpno in(select mgr from ZQ_001) and mgr is not null;–排除老板 —— 01
select ename from ZQ_001 where enpno in(select distinct mgr from ZQ_001) and mgr is not null;——02
32.分组查询: group by 格式:select 分组字段名,聚合函数(字段名) from 表名
Group by 分组字段名
-如,请列出员工表中各部门薪水最高的员工部门号和最高薪水(并按部门号升序排序)
select depotno,max(salary) from ZQ_001 group by depotno order by depotno asc;
思考题(一)
请安经理号分组和列出每组下属的最高薪水,列出经理号和对应的最高薪水
第一步:所有经理下属的最高薪水 < 方式一>
select max(salary) from ZQ_001 where not mgr
in(select enpno from ZQ_001 where mgr is null) group by mgr;
–对应的经理号和经理手下最高薪水员工
select mgr,salary from ZQ_001 where salary in(
select max(salary) from ZQ_001 where not mgr
in(select enpno from ZQ_001 where mgr is null) group by mgr);
所有经理的编号 <方式二>
select enpno from ZQ_001 where enpno
in(select distinct mgr from ZQ_001 ) and mgr is not null;
–对应的经理号和经理手下最高薪水员工
select max(salary),mgr from ZQ_001 where mgr in(
select enpno from ZQ_001 where enpno in(
select distinct mgr from ZQ_001) and mgr is not null) group by mgr;
–思考题(二)
–按经理号分组列出其下属中的最高薪水,需列出姓名,经理号和对应的最高薪水
select ename,mgr,salary from ZQ_001 where salary in(selectmax(salary) from ZQ_001
where not mgr in(select enpno from ZQ_001 where mgr is null) group by mgr
);
注释:嵌入条件查询时,条件类型(或者说字段名)必须与嵌入类型对应并且是单一的(程序报错为:值过多) 如,select ename,enpno,salary from ZQ_001 where depotno=30 and bonus is not null ;——正确
select job,ename,enpno from ZQ_001 where salary in(
select salary,mgr from ZQ_001 where depotno=30 and bonus is not null
);——错误表达
33.Trim ltrim rtrim 函数 :这三个函数都是用于截取字串符
格式:
Trim(c2 from c1) 表示c1的前后截取c2 如,select trim (‘e’ from ‘elite’) from dual;–lit
Ltrim(c1 ,c2) 表示c1的左边截取c2 如,select ltrim (‘elite’,‘e’) from dual;–lite
Rtrim(c1 ,c2) 表示c1的右边截取c2 如,select rtrim (‘elite’,‘e’) from dual;–elit
34.补位函数lpad rpad
格式:
Lpad(char1,n,char2) 左补位函数; rpad(char1,n,char2) 右补位函数
注释:在字符串参数char1的左端/右端,用char2进行补位”n”位,其中char2可以多次出现
如,select lpad(salary,6,’$’) from ZQ_001;—— $KaTeX parse error: Can't use function '$' in math mode at position 27: …rpad(salary,8,'$̲') from ZQ_001;…$$$
35.截取字符串 substr
格式:select substr(char,m,n) from 表名
注释:当m=0时,则从首字符开始,如果是负数则从尾部开始;如果没有设置”n”或“n”长度度超过了char的长度,则取到末尾为止(“m”表示起始位置,“n”表示结束位置)
如,select substr(‘Doctor Who Travels in TRDIS’,8,18) from dual;–Who Travels in TRD
select substr(‘Doctor Who Travels in TRDIS’,0,18) from dual;–Doctor Who Travels
select substr(‘Doctor Who Travels in TRDIS’,8) from dual;–Who Travels in TRDIS
select substr(‘Doctor Who Travels in TRDIS’,-7,7) from dual;–n TRDIS
注释:空格也表示一个字符
36.数值函数:常见五中(round trunc mod ceil floors)
1) Round() : 用于“四舍五入” 格式:round(n,m) “n”数字(或字段名),“m”小数位数
如,select round(35.78903,2) from dual; --35.79
select round(35.78903,0) from dual; --36
select round(35.78903,-1) from dual; --40
select round(salary,-2) from ZQ_001; --800 1600 1300 3000
2)功能截取 trunc(n,m)
如,select trunc(35.78903,2) from dual; – 35.78
select trunc(35.78903,0) from dual; – 35
select trunc(35.78903,-1) from dual; – 30
3)取模(余)函数 mod(n,m)
如,select ename,salary,mod(salary,1000) from ZQ_001; --800 600 250 975
注释:作用,返回”m “除以”n”后的余数,如果“n”位数字“0”则直接返回“m”
4)Ceil(n) “天花板” ,大余或等于“n”的最小整数值
Floor(n) “地板” ,去小于或等于“n”的最大整数值
如,select ceil(salary) from ZQ_001; --800 1600 1250 2975
select ceil(9.4567) from dual; --10
select floor(9.4567) from dual; --9
37.日期操作关键字 :
1)获取“系统时间”
如,select to_char(sysdate,‘yyyy-mm-dd day hh24:mi:ss’) as 当前系统时间 from dual;
2)精确到毫秒
如,select to_char(systimestamp,‘yyyy-mm-dd day hh24:mi:ss.ff’) as 当前系统时间 from dual;
3)Add_months(date,i) 返回日期“date(日期字段名)”加上“i”个月后的日期
如.列出员工表中所有员工入职20周年的纪念日,显示员工姓名和纪念日
select ename,add_months(hiredate,1220)“20周年纪念日” from ZQ_001; ①
select ename 姓名,add_months(hiredate,1220) as “20周年纪念日” from ZQ_001; ②