• Oracle Sql基础


    1、nvl('A','B') 如果a为null,则显示B

    2、DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )

    3、grouping函数用法,带一个参数,参数为字段名,结果是根据该字段得出来的就返回1,反之返回0

    4、Over

    over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用。
    其参数:over(partition by col1 order by col2)
    含义:按col1指定的字段进行分组,然后再按照col2进行排序

    4、开窗函数:rank() over ( partition by [col1],[col2]... by [col3]desc) 

    rank,dense_rank,row_number的区别:
    结果集中如果出现两个相同的数据,那么rank会进行跳跃式的排名,
    比如两个第二,那么没有第三接下来就是第四;
    但是dense_rank不会跳跃式的排名,两个第二接下来还是第三;
    row_number最牛,即使两个数据相同,排名也不一样。

    5、distinct 去重复

    6、Lag和Lead函数可以在一次查询中取出某个字段的前N行和后N行的数据(可以是其他字段的数据,比如根据字段甲查询上一行或下两行的字段乙),原来没有分析函数的时候采用子查询方法,但是比较麻烦,惭愧,我用子查询有的还查不出来呢。


    语法如下:
    lag(value_expression [,offset] [,default]) over ([query_partition_clase] order_by_clause);
    lead(value_expression [,offset] [,default]) over ([query_partition_clase] order_by_clause);
    其中:
    value_expression:可以是一个字段或一个内建函数。
    offset是正整数,默认为1,指往前或往后几点记录.因组内第一个条记录没有之前的行,最后一行没有之后的行,
    default就是用于处理这样的信息,默认为空。

    求出每个打工者上个月和下个月有没有赚钱(personincome大于零即为赚钱)

    select distinct earnmonth,sname,
           lag(decode(nvl(personincome,0),0,'No','Yes'),1,0) over(partition by sname order by earnmonth) PerMonth,
           lead(decode(nvl(personincome,0),0,'No','Yes'),1,0) over(partition by sname order by earnmonth) NextMonth
    from earnings;

    详细内容:http://love-flying-snow.iteye.com/blog/573083

    7、两种CASE

    简单case:

    CASE search_expression
      WHEN expression1 THEN result1
      WHEN expression2 THEN result2
      ...
      WHEN expressionN THEN resultN
      ELSE default_result

    如果search_expression 是null,则会走ELSE,不会进行其他匹配,而decode无此问题。

    搜索case:
    直接使用case when +比较条件 到end为返回的结果,end之后可以做运算。
    语法:

    case when Boolean then returnvalue
    when Boolean then return value
    ...
    Else
    Returnvalue
    End

    简单case和searched case之间的区别:
    一、 简单case只能是when后面的表达式完全匹配case后的表达式,相当于 =,所以也不
    能匹配null。
    二、 searched case可以作为比较条件,那么可以使用like,!=,between ..and,<,=,
    is null,is not null等,比简单case的使用更加广泛,完全可以替代简单case。

    8、存储过程基本结构

    CREATE OR REPLACE PROCEDURE 存储过程名字
    (
        参数1 IN NUMBER,
        参数2 IN NUMBER
    ) IS
    变量1 INTEGER :=0;
    变量2 DATE;
    BEGIN
    ...
    END 存储过程名字

    9、触发器基本结构

    CREATE [OR REPLACE] TRIGGER trigger_name
    {BEFORE | AFTER }
    {INSERT | DELETE | UPDATE [OF column [, column …]]}
    [OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]
    ON [schema.]table_name | [schema.]view_name 
    [REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
    [FOR EACH ROW ]
    [WHEN condition]
    PL/SQL_BLOCK | CALL procedure_name;
  • 相关阅读:
    我对Web开发相关技术的认识过程
    JavaScript、JSP和Java之间的关系
    中断处理中的save_all、restore_all和iret
    实验五:Linux操作系统是如何工作的?破解操作系统的奥秘
    java CPU的乱序执行
    java缓存行对齐(缓存行二)
    解决ojdbc6升级ojdbc8中文乱码问题
    Caused by: java.lang.ClassNotFoundException: com.alibaba.dubbo.common.Version
    springSecurity5 重定向登录页面后 报错:尝试清除 Cookie.net::ERR_TOO_MANY_REDIRECTS status:200
    java 工厂模式 从无到有-到简单工厂模式-到工厂方法模式-抽象工厂模式
  • 原文地址:https://www.cnblogs.com/fuxinci/p/3131766.html
Copyright © 2020-2023  润新知