学习资料来源于:【Oracle】黑马57期Oracle数据库基础教程_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
Oracle中很重要的就是查询记录,而查询涉及到诸多函数的使用,主要分为单行函数和多行函数。
单行函数:作用于一行,返回一个值
主要谈5个:字符函数(upper、lower)、数值函数(round、trunc、mod)、日期函数(sysdate)、转换函数(to_char、to_date)、通用函数(nvl())
多行函数:作用于多行,返回一个值
主要谈5个:count、sum、min、max、avg
【代码展示——单行函数】:
--单行函数:作用于一行,返回一个值
--字符函数
select upper('yes') from dual;--YES
select lower('YES') from dual;--yes
--数值函数
select round(56.16,1) from dual;--四舍五入,后面的参数表示保留的位数
select trunc(56.16,1) from dual;--直接截取,不再看后面位数的数字要不要进一
select mod(10,3) from dual;--求余数
--日期函数
--查询出emp表中所有员工入职距离现在几天
select sysdate-e.hiredate from emp e;
--算出明天的此刻
select sysdate+1 from dual;
--算出emp表中所有员工入职距离现在几月
select months_between(sysdate,e.hiredate) from emp e;
--算出emp表中所有员工入职距离现在几年
select months_between(sysdate,e.hiredate)/12 from emp e;
--算出emp表中所有员工入职距离现在几周
select round((sysdate-e.hiredate)/7) from emp e;
--转换函数
--日期转字符串
select to_char(sysdate,'fm yyyy-mm-dd hh24:mi:ss') from dual;--加上fm表示去掉数字前面的0
--加上24表示用24小时计时法
--字符串转日期
select to_date('2021-5-5 19:25:49','fm yyyy-mm-dd hh24:mi:ss') from dual;
--通用函数
--算出emp表中所有员工的年薪
--奖金里面有null值,如果null值和任意数字做算数运算,结果都是null
select e.sal*12+nvl(e.comm,0) from emp e;
在查看运行结果时,使用工具来查看所有获取的值,因为窗口的大小会限制显示的行数,不可简单认为所显示的就是所有的结果。
其余函数还需通过操作手册来查询,于是找了一个合集如下,希望自己有事没事可以多翻一翻。
(32条消息) 关于ORACLE数据库常用官方文档_一个不愿透漏姓名的绝世强者-优快云博客_oracle数据库文档
【代码展示——多行函数】
--多行函数:作用于多行,返回一个值
select count(1) from emp;--查询总数量,和count(主键empno)效果一样
select sum(sal) from emp;
select min(sal) from emp;
select max(sal) from emp;
select avg(sal) from emp;
条件表达式此处学习了一条,
【代码展示——条件表达式】:
--条件表达式
--条件表达式的通用表达式,即在mysql和oracle中都可使用
--给emp表中的员工起中文名
--等值判断的写法
select e.ename,
case e.ename
when 'SMITH' then '小华'
when 'ALLEN' then '小强'
when 'WARD' then '小付'
else ''
end
from emp e;
--判断emp表中员工工资,如果高于3000显示高收入,如果高于1500低于3000显示中等收入,其余低收入
--范围判断的写法
select e.sal,
case
when e.sal>3000 then '高收入'
when e.sal>1500 then '中等收入'
else '低收入'
end
from emp e;
--oracle专用表达式
--oracle中除了起别名,都用单引号
select e.ename,
decode(e.ename,
'SMITH' , '小华',
'ALLEN' , '小强',
'WARD' , '小付' ,
'') "中文名"
from emp e;
--以下无法使用
select e.sal,
decode(e.sal>3000,'高收入',
e.sal>1500,'中等收入',
'低收入') "工资水平"
from emp e;
值得注意的是,在最后一处decode使用处,运行总是出错,于是通过查询手册,发现了这样一段话:
【DECODE
compares expr
to each search
value one by one. 】
也就是说该函数无法使用在范围判断的写法中(若错误,请指正)