Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数

Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数

2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开
测开的话,你就得学数据库,sql,oracle,尤其sql要学,当然,像很多金融企业、安全机构啥的,他们必须要用oracle数据库
这oracle比sql安全,强大多了,所以你需要学习,最重要的,你要是考网络警察公务员,这玩意你不会就别去报名了,耽误时间!
oracle系列文章:
【1】Oracle数据库:啥是oracle数据库?你为啥要学oracle?
【2】Oracle数据库:oracle 11g安装教程,已安装好的oracle各个文件夹的作用,oracle用户权限怎么样
【3】Oracle数据库:oracle启动,oracle客户端工具plsql安装教程和使用方法
【4】Oracle数据库:创建表空间,创建新用户,给用户分配对象、角色和系统权限,登录新用户建表
【5】Oracle数据库:链接配置,包括sqlnet.ora里面的transnames.ora配置数据库标识符SID,listener暂时简单了解
【6】Oracle数据库:net configureation assistant工具配置监听listener,配置本地网络访问服务器上的数据库
【7】Oracle数据库:oracle字符类型、数字类型、创建表表名的命名规则
【8】Oracle数据库:约束条件:主键约束、唯一约束、检查约束、非空约束、外键约束、默认值填写
【9】Oracle数据库:表的关系:一对多,一对一,多对多,一一继承和修改的关系,表不是重点,重点是数据和约束关系
【10】Oracle数据库:sql语言结构,数据查询语言DQL,select * from table;算术,别名,连接,去重等操作
【11】Oracle数据库:约束行限制where语句,判断条件,比较条件,字符串日期格式,in,like,escape,null语句
【12】Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制
【13】Oracle数据库:排序order by语句,select from where order by的执行先后顺序,各种样例
【14】Oracle数据库:oracle函数,单行函数,多行函数,upper,lower,initcap,字符串函数
【15】Oracle数据库:数字函数,日期函数,round,trunc,mod,months_between,add_months,next_day,last_day,sysdate
【16】Oracle数据库:oracle数据类型转换to_char()日期和数字转字符,to_number()字符转数字,to_date()字符转日期函数


文章目录

  • Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数
    • @[TOC](文章目录)
  • oracle函数嵌套
  • 通用函数:处理null的
    • NVL函数![在这里插入图片描述](https://img-blog.csdnimg.cn/6c10b82bfd0f45aa8221a76f1d4970ed.png)
    • NVL2函数
    • NULLIF函数
    • COALESCE函数
  • 总结

oracle函数嵌套

Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数_第1张图片
函数从里面到外面执行
类型要返回匹配的类型哦

和java等等等等一样

Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数_第2张图片

SQL> select to_char(next_day(add_months(hire_date, 6), 6), 'day,mm"月",dd"日",yyyy"年"') from employees order by hire_date;

TO_CHAR(NEXT_DAY(ADD_MONTHS(HIRE_DATE,6),6),'DAY,MM"月",DD"日",YYYY"年"')
----------------------------------------------------------------------
星期五,07,20,2001年
星期五,12,13,2002年
星期五,12,13,2002年
星期五,12,13,2002

先执行
add_months(hire_date, 6)
返回一个加6个月的日期值
然后把这个日期值给算一个下一个星期5
1–7表示星期日–星期六
最后再把这个日期转化为字符串,格式还是我们说过的格式,上一篇文章说的很清楚了

通用函数:处理null的

Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数_第3张图片

NVL函数Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数_第4张图片

Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数_第5张图片
有很多员工是没有佣金的
那佣金为0呗
所以佣金需要把null转为数字0

SQL> select last_name, salary, 12*salary + commission_pct from employees;

LAST_NAME                     SALARY 12*SALARY+COMMISSION_PCT
------------------------- ---------- ------------------------
King                        24000.00 
Kochhar                     17000.00 
De Haan                     17000.00 
Hunold                       9000.00 

你看看算不了
咱可以
将null转为0

SQL> select last_name, salary, commission_pct, 12*salary, 12*salary*nvl(commission_pct, 0) from employees;

LAST_NAME                     SALARY COMMISSION_PCT  12*SALARY 12*SALARY*NVL(COMMISSION_PCT,0)
------------------------- ---------- -------------- ---------- -------------------------------
King                        24000.00                    288000                               0
Kochhar                     17000.00                    204000                               0
De Haan                     17000.00                    204000                               0
Hunold                       9000.00                    108000                               0
Ernst                        6000.00                     72000                               0
Austin                       4800.00                     57600                               0
Pataballa                    4800.00                     57600                               0
Lorentz                      4200.00                     50400                               0
Greenberg                   12008.00                    144096                               0
Faviet                       9000.00                    108000                               0
Chen                         8200.00                     98400                               0
Sciarra                      7700.00                     92400                               0
Urman                        7800.00                     93600                               0
Popp                         6900.00                     82800                               0
Raphaely                    11000.00                    132000                               0
Khoo                         3100.00                     37200                               0
Baida                        2900.00                     34800                               0
Tobias                       2800.00                     33600                               0
Himuro                       2600.00                     31200                               0
Colmenares                   2500.00                     30000                               0

LAST_NAME                     SALARY COMMISSION_PCT  12*SALARY 12*SALARY*NVL(COMMISSION_PCT,0)
------------------------- ---------- -------------- ---------- -------------------------------
Weiss                        8000.00                     96000                               0
Fripp                        8200.00                     98400                               0
Kaufling                     7900.00                     94800                               0
Vollman                      6500.00                     78000                               0
Mourgos                      5800.00                     69600                               0
Nayer                        3200.00                     38400                               0
Mikkilineni                  2700.00                     32400                               0
Landry                       2400.00                     28800                               0
Markle                       2200.00                     26400                               0
Bissot                       3300.00                     39600                               0
Atkinson                     2800.00                     33600                               0
Marlow                       2500.00                     30000                               0
Olson                        2100.00                     25200                               0
Mallin                       3300.00                     39600                               0
Rogers                       2900.00                     34800                               0
Gee                          2400.00                     28800                               0
Philtanker                   2200.00                     26400                               0
Ladwig                       3600.00                     43200                               0
Stiles                       3200.00                     38400                               0
Seo                          2700.00                     32400                               0
Patel                        2500.00                     30000                               0

LAST_NAME                     SALARY COMMISSION_PCT  12*SALARY 12*SALARY*NVL(COMMISSION_PCT,0)
------------------------- ---------- -------------- ---------- -------------------------------
Rajs                         3500.00                     42000                               0
Davies                       3100.00                     37200                               0
Matos                        2600.00                     31200                               0
Vargas                       2500.00                     30000                               0
Russell                     14000.00           0.40     168000                           67200
Partners                    13500.00           0.30     162000                           48600

没有佣金的把佣金当做0,然后×年薪就这么点了

Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数_第6张图片

SQL> select last_name, salary, commission_pct, 12*salary + 12*salary*nvl(commission_pct, 0) as "AN_SAL" from employees;

LAST_NAME                     SALARY COMMISSION_PCT     AN_SAL
------------------------- ---------- -------------- ----------
King                        24000.00                    288000
Kochhar                     17000.00                    204000
De Haan                     17000.00                    204000
Hunold                       9000.00                    108000
Ernst                        6000.00                     72000

好说,上面我就实现过了

NVL2函数

Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数_第7张图片
return expr1?expr2:expr3
exper1为1返回expr2
否则返回expr3
Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数_第8张图片

SQL> select last_name, salary, commission_pct, nvl2(commission_pct, 12*salary*(1+commission_pct), 12*salary) as "AN_SAL" from employees;

LAST_NAME                     SALARY COMMISSION_PCT     AN_SAL
------------------------- ---------- -------------- ----------
King                        24000.00                    288000
Kochhar                     17000.00                    204000
De Haan                     17000.00                    204000
Hunold                       9000.00                    108000
Ernst                        6000.00                     72000
Austin                       4800.00                     57600

反正就三目呗
好说
有佣金,我们就带上佣金
没有佣金,直接返回原始的薪水

NULLIF函数

Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数_第9张图片
互相比较,都是null
返回null

否则返回第一个expr1,它还不能空
Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数_第10张图片

SQL> select first_name,length(first_name) as e1,last_name,length(last_name) as e2, nullif(length(first_name), length(last_name)) as result from employees;

FIRST_NAME                   E1 LAST_NAME                         E2     RESULT
-------------------- ---------- ------------------------- ---------- ----------
Ellen                         5 Abel                               4          5
Sundar                        6 Ande                               4          6
Mozhe                         5 Atkinson                           8          5
David                         5 Austin                             6          5
Hermann                       7 Baer                               4          7
Shelli                        6 Baida                              5          6
Amit                          4 Banda                              5          4
Elizabeth                     9 Bates                              5          9
Sarah                         5 Bell                               4          5
David                         5 Bernstein                          9          5
Laura                         5 Bissot                             6          5
Harrison                      8 Bloom                              5          8
Alexis                        6 Bull                               4          6
Anthony                       7 Cabrio                             6          7
Gerald                        6 Cambrault                          9          6
Nanette                       7 Cambrault                          9          7
John                          4 Chen                               4 
Kelly                         5 Chung                              5 
Karen                         5 Colmenares                        10          5
Curtis                        6 Davies                             6 

你瞅瞅,姓名,如果长度相等,返回就是null
否则返回firstname的长度

COALESCE函数

Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数_第11张图片
依次寻找,扩展了nvl2函数

返回第一个非空表达式的值
Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数_第12张图片

SQL> select last_name, coalesce(commission_pct, salary, 10) from employees;

LAST_NAME                 COALESCE(COMMISSION_PCT,SALARY,10)
------------------------- ----------------------------------
King                                                   24000
Kochhar                                                17000
De Haan                                                17000
Hunold                                                  9000
Ernst                                                   6000
Austin                                                  4800
Pataballa                                               4800
Lorentz                                                 4200
Greenberg                                              12008
Faviet                                                  9000
Chen                                                    8200
Sciarra                                                 7700
Urman                                                   7800
Popp                                                    6900
Raphaely                                               11000
Khoo                                                    3100
Baida                                                   2900
Tobias                                                  2800
Himuro                                                  2600
Colmenares                                              2500

LAST_NAME                 COALESCE(COMMISSION_PCT,SALARY,10)
------------------------- ----------------------------------
Weiss                                                   8000
Fripp                                                   8200
Kaufling                                                7900
Vollman                                                 6500
Mourgos                                                 5800
Nayer                                                   3200
Mikkilineni                                             2700
Landry                                                  2400
Markle                                                  2200
Bissot                                                  3300
Atkinson                                                2800
Marlow                                                  2500
Olson                                                   2100
Mallin                                                  3300
Rogers                                                  2900
Gee                                                     2400
Philtanker                                              2200
Ladwig                                                  3600
Stiles                                                  3200
Seo                                                     2700
Patel                                                   2500

LAST_NAME                 COALESCE(COMMISSION_PCT,SALARY,10)
------------------------- ----------------------------------
Rajs                                                    3500
Davies                                                  3100
Matos                                                   2600
Vargas                                                  2500
Russell                                                  0.4
Partners                                                 0.3

不会出现10
因为都有月薪

否咋谁去给你用爱发电呀


总结

提示:重要经验:

1)
2)学好oracle,即使经济寒冬,整个测开offer绝对不是问题!同时也是你考公网络警察的必经之路。
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

你可能感兴趣的:(oracle,oracle,sql,嵌套函数,nul函数,nullif函数)