• 空值处理


    特点:oracle数据库中,没有数据表示空,如果空参与计算结果为空.oracle数据库中任何类型都可以为空.

    nvl(exp1,exp2)
    作用:如果exp1不为空,返回exp1的结果,如果exp1为空,那么返回exp2的结果.
    # 查询员工姓名以及员工的月收入(sal+comm)
    select ename,sal+nvl(comm,0) from emp;
    -- 为查询的结果定义别名
    select ename,sal+nvl(comm,0) salary from emp;
    -- 使用as关键字
    select ename,sal+nvl(comm,0) as salary_total from emp;
    -- 别名中存在特殊符号
    select ename,sal+nvl(comm,0) "salary total" from emp;
    1
    2
    3
    4
    5
    6
    7
    8
    dual:虚表(伪表),oracle提供一个用于测试函数或者过程的表.
    -- 测试nvl2的功能
    select nvl2(null,1,2) from dual;
    1
    2
    nvl2(exp1,exp2,exp3)
    如果exp1不为null返回exp2的结果,如果exp1为null,那么返回exp3;
    -- 如果该员工有提成,那么工资涨幅0.2,没有提成工资不变,存在comm为0
    select ename,nvl2(comm,sal+sal*0.2,sal) salary from emp;
    1
    2
    nullif(expr1,expr2)
    如果两个表达式相等,那么返回null,否则返回exp1的结果
    select nullif(1,1) from dual;
    -- 如果该员工有提成,那么工资涨幅0.2,没有提成工资不变,存在comm为0
    select ename,nvl2(nullif(comm,0),sal+sal*0.2,sal) salary from emp;
    1
    2
    3
    COALESCE(expr1,…,exprn)
    返回第一个非空的表达式的值
    -- 发奖金,如果工资为null并且提成null发200,如果工资不为空直接发工资,如果提成不为空那么发提成.
    select coalesce(sal,comm,200) from emp;
    1
    2
    case 表达式:类似于java中的switch语句
    case expr1
    when value1 then 执行语句
    ...
    else 执行语句
    end --表示结束

    -- 如果职位是SALESMAN,工资提高20%,MANAGER工资提高10%,其他提高5%
    select ename,sal old_sal,
    case job(http://www.amjmh.com/v/BIBRGZ_558768/)
    when 'SALESMAN' then sal*1.2
    when 'MANAGER' then sal*1.1
    else sal*1.05
    end new_sal
    from emp;

    -- 创建成绩表
    create table t_grade(
    id number primary key,
    class varchar2(20),
    score number
    );
    -- 准备数据
    insert into t_grade values(1001,'语文',80);
    insert into t_grade values(1002,'java',70);
    insert into t_grade values(1003,'C++',60);
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    SIGN(n)
    如果n>0返回1,如果n<0返回-1,如果n=0返回0
    select sign(-1) from dual;
    --获得成绩表中的等级
    select class,
    case sign(score-80)
    when 1 then '优秀'
    when 0 then '优秀'
    when -1 then '良好'
    end lel
    from t_grade;

    select class,
    case sign(score-80)
    when 1 then '优秀'
    when 0 then '优秀'
    when -1 then
    case sign(score-70)
    when 1 then '良好'
    when 0 then '良好'
    else '不及格'
    end
    end lel
    from t_grade;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    decode(expr1,match1,reustl1,…,default);
    说明:如果expr1的值和match1匹配,返回result1的结果,如果都不匹配返回defualt的值.
    ---- 如果职位是SALESMAN,工资提高20%,MANAGER工资提高10%,其他提高5%
    select ename,sal old_sal,
    decode(job,'SALESMAN',sal*1.2,'MANAGER',sal*1.1,sal*1.05) new_sal
    from emp;
    --获得成绩表中的等级
    select class,
    decode(sign(score-80),
    0,'优秀',
    1,'优秀',
    -1,decode(sign(score-70),0,'良好',1,'良好',
    -1,decode(sign(score-60),-1,'不及格','及格'))) lel
    from t_grade;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    ---------------------

  • 相关阅读:
    C_数据结构_栈
    C_数据结构_链表
    C_数据结构_数组的修改和删除
    C_数据结构_数组
    Python_闭包_27
    Python_函数的镶嵌和作用域链_26
    P1428 小鱼比可爱
    P2915 [USACO08NOV]奶牛混合起来Mixed Up Cows
    P2946 [USACO09MAR]牛飞盘队Cow Frisbee Team
    codevs 2173 忠诚
  • 原文地址:https://www.cnblogs.com/ly570/p/11335147.html
Copyright © 2020-2023  润新知