oracle数据库学习笔记

本文详细介绍了 Oracle 数据库中常用的字符、数学、日期等 SQL 函数,并通过实例演示了如何使用这些函数进行数据处理和查询优化。此外,还介绍了聚合函数的使用场景及常见操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

字符函数是ORACLE中最常用的函数:

 

Lower(char):将字符串转化为小写格式

Upper(char):将字符转化为大写的格式

Length(char):返回字符串的长度

Substr(char,m,n):取字符串的子串

Trim,Ltrim,Rtrim:去掉空格





dual 虚表 当没有表可以用的时候 就用虚表
as  当做  可以理解为别名
SELECT   LOWER( 'ABCD' ) AS 字符   FROM DUAL; 
select lower(ename)  as 姓名  from emp;
SELECT   UPPER( 'aaaaa' ) AS 字符   FROM DUAL; 


=  --- 一个等号 表示相等
:= --- 冒号+等号  表示赋值
|| --- 两个竖号   表示字符 连接符号  


select ename  as 姓名, length(ename) as 长度  from emp where  length(ename)=5  ;
1 表示从第一个字符开始,3 表示取3个字符
select ename  as 姓名 ,  substr(ename,1,3) as 前三个字符      from   emp;
select    'A'||  trim('  B B   ')  ||'C' from  dual;
以首字母大写的方式显示所有员工

select ename,  (substr(ename,0,1) ||lower(substr(ename,2,length(ename)-1 )) ) as 姓名  from emp;

Replace (char1,search_string,replace_string)
显示所有的员工姓名将A替换成“我是A”
Instr(char1,char2,[,n[,m]])取字符串的位置
从第二个字符开始找到员工姓名中A所在的位置

select ename,  replace(ename,'A','我是A') as replacename from emp;

从ename中的第2个字符开始找A,找第1个
select ename, instr(ename,'A',2,1)  from emp;



数学函数的输入参数和返回值的数据类型都是数字类型:
常用函数
Round(n,[m])
         四舍五入,如果省掉m,则四舍五入到整数,如果m是整数,则四舍五入到小数点的m位置后,如果是m负数,则  四舍五入到小数点m的位前

 ?  73.2564  四舍五入到小数点后2位

trunc(n,[m])

用户截取数字,如果省略m,就截去小数部分,如果m是整数就截取到小数点后m位后,如果m是负数,则截取到小数点的前m位

    ? 73.2564  截取到小数点后3位
Mod(n,[m])取模
     ?  8%3=?
Floor(n)
返回小于或是等于n的最大整数 向下取整
     ? 7.5846 向下取整
Ceil(n)
返回大于或是等于n的最小整数 向上取整
     ?7.5846 向上取整


对数字的处理在银行和财务系统用的比较多。

--默认四舍五入到整数,四舍五入到小数点后2位
select round(73.2564,2) from dual;

--默认截取到整数,2表示截取到小数点后2位
select trunc(73.2564,2) from dual;
--取余数 
select mod(8,3) from dual;
select Floor(7.5846) from dual;

select ceil(7.5846) from dual;

 

/*
1 sysdate :返回系统时间  oracle所在服务器的时间
2 current_date 返回当前时间  程序所在客户机的时间
3 Next_day(date,week) 给定时间的下一个星期是几号
4 add_months(d,n):返回在时间d上加n个月的时间

5 last_day(d):返回指定日期所在月份的最后一天

 

select sysdate,current_date from dual;
下周一是几号
select next_day(sysdate,'Monday') from dual;
十年前
select add_months(sysdate,-10*12) from dual;
本月的最后一天
select last_day(sysdate) from dual;


--显示满30年份服务年限的员工的姓名和受雇日期
select  *  from emp  where     add_months(sysdate,-30*12)  > hiredate ;
--每个员工加入公司的天数
select round ((sysdate-hiredate)) as  days from emp;
--找出各月倒数第三天受雇的所有员工
select * from emp where  (last_day(hiredate)-2 )=hiredate ;




  to_char  
   yyyy:显示年份
   yy :显示年份后2位
   mm:月份
   dd:号
   hh /hh24:小时
   mi分
   ss秒





select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;



to_char 
9 :显示数字
0 :不足则补0
. :显示小数点
,;  显示分隔符
$ :  显示美元符号
L :  显示本地货币
C : 显示国际货币符号
G : 制定位置显示分割符号
D : 制定位置显示小数点符号
薪水指定货币符号

select ename, sal,to_char(sal,'L00,999.99') from emp;
select ename, sal,to_char(sal,'L00G999D99') from emp;





to_date  字符转换成日期类型
select to_date('15-9月-10') from dual;
To_number  字符转换成数字类型
select to_number('001') from dual;

select to_date('2017-3-15','yyyy-mm-dd') as days  from dual;
select to_number('009')+1 from dual;









Sum   求和
Avg    平均值
Max    最大值
Min     最小值
Count  有值的记录条数
 
聚集函数不能作为条件放到where后面
--分组group by 求和 sum  ---先根据deptno分组,再根据job来分组 ,将分完组之后的 sal 加起来
select   deptno,job, sum(sal)   from emp group by deptno,job;
--根据部门求平均工资
select  deptno ,avg(sal)  from emp group by deptno;
--请查询出每个部门的最高工资和最低工资
select deptno,max(sal),min(sal) from emp group by deptno;
--统计每个部门有多少个员工
select  deptno ,count(*) from emp group by deptno;



  1 、user      显示用户
   
   2 、decode  布尔判断函数 
  
   3 、nvl         空值函数
       



select user  from dual;


select count(*) from emp where job='CLERK'


select job ,decode( job ,'CLERK','A','B'  )  from emp ;


-- 将所有的人的奖金加50  nvl(comm,0) 如果comm是null就设置为0 否则就是原来的数据

update emp set comm=nvl(comm,0)+50 ;

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值