Oracle函数与高级查询
二 Oracle的函数
2.1 什么是函数
函数:指对一堆逻辑的打包,能够支持传入的参数,根据参数得到一定的结果;
那么,在oracle中,都有什么函数,有什么类型的函数,函数有什么分类?
2.2 函数的分类
2.2.1 单行与多行
除了聚合()函数,其它全是单行函数
Oracle的函数咱们可以简单分成再种:多行函数与单行函数,如下图:
2.2.1.1 什么是单行函数
简单理解:对单行数据进行是操作,得到单行数据 ; 比如concat连接函数
concat 连接函数得到的效果; 使用concat 不会影响行数,以前100行,使用concat之后得到的结果也是100行。
单行函数 :在执行获得结果后。可以支持传入参数【列和表达式】,针对每一行单独做运算。最终不会影响结果的行数
单行函数特点:
1接收参数返回一个值
2对每一行返回行起作用
3每一行返回一个结果
4可以修改数据类型
5可以使用嵌套 concat(concat(col1,col2),col2)
除了concat 这样的单行函数以外,还有其他的单行函数,比如字符处理函数;
比如有时要求用户名全部大写或者小写,或者需要得到一个人的姓,这些都需要字符函数进行处理,字符函数中,也存在分类
2.2.1.2 什么是多行函数
多行函数:简单理解对多行数据进行操作,最后返回一个数据
比如count函数:
Count 针对过滤后的结果 支持传入表的列名或者常量,对所有行的记录统一处理。最终只会得到一个结果,会影响结果行数;
多行函数 : 在执行获得结果后。可以支持传入参数【列和表达式】,针对每一行整体统计做运算。最终只会产生1行数据
咱们所说的单行与多行是指这个函数操作的数据是单行还是多行(不是说的结果)
2.2.1.3 单行、多行分别用在哪?
扩展理解与练习
比如concat 用在哪里? 可以放在select 后,把它的姓和名连接起来;
单行函数: 
  select 关键字之后
  where 之后的条件上
 
(where 之后单行函数 如下)
姓名中有e或者a的员工?
把姓名组合起来查询
select * from employees
where first_name || last_name like '%e%'
or first_name || last_name like '%a%'
使用函数
Select * from employees
Where concat(first_name,last_name) like ‘%e%’
Or first_name || last_name like ‘%a%’;
多行函数:
针对Select 关键之后 ;比如count函数 统计所有行 ,放在select之后
 
使用多行函数 得到就一个结果,那我放在where 后面 有意义吗?
Where 是针对每一行, 而多行函数 返回结果只有一行,如果放在where 之后,执行一次,是一个结果,执行二次还是同一个结果,所以没有意义.
2.2.2 函数功能分类
可以分为:字符函数、数字函数,转换函数,日期函数,组函数,其它函数
字符(串)函数:拼接字符串,截取字符串,全变大写,全变小写,首字母大写...
数字(number)函数:四舍五入,舍掉
转换函数:字符《--》日期  字符《--》数字
日期函数:拿到年,月,日,时,分,秒
组函数:sum,
其它函数:
2.3 字符函数
字符函数分为大小写转换函数字符处理函数
2.3.1 大小写转换函数
大小写转换函数:
Lower(列|表达式)  全部转换小写
Upper(列|表达式)  全部转换大写
Initcap(列|表达式)  首字母大写
练习案例:
select 'Hello world' from dual;
大写:select upper('Hello world') from dual;
小写:select lower('Hello world') from dual;
练习案例:
1,查询first_name为randall的员工工资;
分析:我们查询的时候不需要关心名称中的大小写问题
select * from employees where lower(first_name) ='randall';
练习案例:
2,客户在输入名字的时候,可以不会在意名称的大小写,比如,Wang Xiaoer,假设现在在发送邮件,需要按照正规的格式输出姓名;请使用SQL处理
分析:我们可以插入一条小写的名字,然后使用首字母大写查询出来,格式更完整
insert into employees
(employee_id,first_name,last_name,email,phone_number,hire_date,job_id)
values
(300,'wang','xiaoer','xxx@qq','1895236541',sysdate,'SH_CLERK')
查询:
select initcap(first_name)||' '||initcap(last_name) from employees;
sql中round函数怎么使用2.3.2 字符处理函数
1、CONCAT(strexp, strexp):  连接两个字符串
2、Substr(str,start_index,length) :从指定的位置截取指定长度的字符串
3、LENGTH(strexp):返回字符串的长度
  LENGTHB(strexp):返回字节的长度
4、LPAD( string1, padded_length, [ pad_string ] )  在列的左边粘贴字符
    其中string1是需要粘贴字符的字符串
    * padded_length是返回的字符串的数量,如果这个数量比原字符串的长度要短,lpad函数将会把字符串截取成padded_length;
    * pad_string是个可选参数,这个字符串是要粘贴到string1的左边,如果这个参数未写,lpad函数将会在string1的左边粘贴空格。
5、RPAD(粘贴字符)    RPAD  在列的右边粘贴字符
6、Trim():截取字符串两端特殊字符
      Trim('s' from 'string');可以指定从字符串两边要截取的特殊字符
2.3.2.1 CONCAT(strexp, strexp):
连接两个字符串
注意:在Oracle中只能连接两个字符串(MySQL中可以任何加字符串)
      这里可以使用函数嵌套的方式
错误方式:
select concat('123','456',789) from dual
ORA-00909: 参数个数无效
正确方式(嵌套):
select concat(concat('123','456'),'789') from dual;
2.3.2.2 Substr(str,start_index,length)
从指定的位置截取指定长度的字符串
Str:的字符串
start_index:从第几个开始(第1开始计算)
如果是0,和1效果是一样的

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。