• 高级查询


    使用别名作为该字段的名字
    别名本身不区分大小写,而且不能含有空格。若希望别名区分大小写或含有空格,那么可以在别名上使用双引号括起来.
    select ename ,sal*12 sal from emp


    子查询 是一条select语句,嵌套在其他SQL语句中,为的是给该SQL提供数据以支持其执行操作。
    select ename ,sal from emp
    where sal>(select sal from emp where ename='CLARK')

    在ddl中使用子查询
    可以根据子查询的结果快速创建一张表 子查询函数和表达式必须用别名
    as可以作为连接语句的操作符
    create table employee
    as
    select e.ename,e.empno,e.job,e.sal,
    d.dname,d.loc from emp e,dept d
    where e.deptno(+)=d.deptno

    dml 中使用子查询

    delete from emp
    where deptno=(select deptno from emp where name='CLARK')

    子查询常用于select语句中

    子查询根据查询结果集的不同分为:
    单行单列子查询:常用于过滤条件可以配合:
    =,<,<=,>,>=使用
    多行单列子查询:常用于过滤条件,由于查询出多个值,在判断=时要用in
    判断>,>=等操作要配合ANY,ALL
    多行多列子查询:常看做一张表

    select ename ,job,deptno from emp
    where deptno IN(select deptno from emp where job='SALESMAN')
    AND job<>'SALESMAN'


    select ename ,sal from emp
    where sal> all(select sal from emp where job in('CLERK','SALESMAN'))

    EXISTS 关键字
    exists 后面跟一个子查询,当该子查询出至少一条记录时,则exists表达式成立并返回

    select dname ,deptno from dept d
    where
    exists(select * from emp e
    where e.deptno=d.deptno)

    select dname ,deptno from dept d
    where
    not exists(select * from emp e
    where e.deptno=d.deptno)

    子查询在from子句中的使用
    当一个子查询是多列子查询,通常将该子查询的结果集当做一张表看,待并基予它进行二次查询

    select e.ename,e.sal,e.deptno
    from emp e, (select avg(sal) avg_sal ,deptno from emp
    group by deptno) t
    where e.deptno=t.deptno
    and e.sal>t.avg_sal


    子查询在select 子句中使用
    可以将查询的结果当做外层查询记录中的一个字段值显示

    分页查询

    将查询表中数据时分段查询,而不是一次性将所有数据查询出来
    有时查询的数据量非常庞大,这会导致系统资源消耗大,影响速度长,数据
    冗余严重。
    为此当遇到这种情况时,一般使用分页查询解决。
    不同数据库语法不一样(方言)


    rownum 不存在与任何一张表中,但是所有的表都可以查询该字段,该字段随着查询自动生成的,方式是:每当可以从表中查询出一条记录时,该字段的值即为该条记录的行号,从1开始逐次递增。

    select rownum ,empno,sal,job from emp

    不能使用rownum>1以上的数字判断,否则查询不出任何数据

    ROWNUM是当oracle进行select查询表数据时,
    确定一条数据需要时,才会对其进行编号(伪劣的
    值),这就导致,没有数据被查出前,rownum永远
    没有值。所以rownum不能在第一次查询时作为
    where条件。

    SELECT * from (select rownum rn ,empno,sal,job from emp) where rn between 5 and 10


    select *
    from(SELECT rownum rn ,t.*
    from (select empno,sal,job
    from emp
    order by sal desc ) t)
    where rn between 5 and 10

    rownum:有数据了才有值
    where里出现:有值才有数据
    所以这里有一个矛盾

    分页的三步:
    1:排序
    2:编号
    3:取范围


    分页的算法:
    page:页数 pagesize:一页的条数
    start :(page-1)*pagesize+1
    end :page*pagesize


    SELECT ename, job, sal,
    DECODE(job,
    'MANAGER', sal * 1.2,
    'ANALYST', sal * 1.1,
    'SALESMAN', sal * 1.05,
    sal
    ) bonus
    FROM emp


    decode 在group by分组中的应用可以将字段值不同的记录看做一做

    按字段内容排序
    SELECT *
    FROM dept
    ORDER BY
    DECODE(dname,
    'OPERATIONS',0,
    'ACCOUNTING',1,
    'SALES',2,
    3)

    排序函数允许对结果集按照指定的字段分组,在组内再按照指定的字段排序,
    最终生成组内编号
    row_number():生成组内连续且唯一的编号
    SELECT
    ename,sal,deptno,
    ROW_NUMBER()
    OVER(PARTITION BY deptno
    ORDER BY sal DESC) rank
    FROM
    emp

    rank():生成组内不连续且不唯一的编号
    排序的列若值相同,会得到相同的编号
    SELECT
    ename,sal,deptno,
    RANK()
    OVER(PARTITION BY deptno
    ORDER BY sal DESC) rank
    FROM
    emp

    dense_rank():生成组内连续但不唯一的编号
    排序的列若值相同,会得到相同的编号
    SELECT
    ename,sal,deptno,
    DENSE_RANK()
    OVER(PARTITION BY deptno
    ORDER BY sal DESC) rank
    FROM
    emp

    CREATE table sales_tab(
    year_id number not null,
    month_id number not null,
    day_id number not null,
    sales_value number(10,2) not null
    );
    insert into sales_tab
    select trunc(dbms_random.value(2010,2012)) as year_id,
    trunc(dbms_random.value(1,13) )as month_id,
    trunc(dbms_random.value(1,32) )as day_id,
    round(dbms_random.value(1,100) ,2)as sales_value
    from dual
    connect by level<=1000;

    集合操作


    union、 union all 并集

    intersect 交集

    minus 差集


    高级分组函数用在group by 子句中,每个高级分组函数都有一套分组策略

    rollup():分组原则,参数主次递减,一直到所有参数都不要,每一种分组都统计一次结果并且并在一个结果集显示。

    select year_id,month_id,day_id,sum(sales_value)
    from sales_tab
    group by
    rollup(year_id,month_id,day_id)

    cube() 每种组合都要来一次


    GROUP BY
    ROLLUP(a,b,C)

    abc ab a 整体

    GROUP BY
    CUBE(y,m,d)

    ymd,ym,yd,md,y,m,d,整体一次


    grouping sets: 每个参数是一种分组方式,然后将这些分组统计后并在一个结果集显示。

    SELECT
    year_id,month_id,day_id,SUM(sales_value)
    FROM sales_tab
    GROUP BY
    GROUPING SETS(
    (year_id,month_id,day_id),
    (year_id,month_id)
    )
    ORDER BY year_id,month_id,day_id

  • 相关阅读:
    WebApi接口返回值不困惑:返回值类型详解
    Autofac 依赖注入框架 使用
    ASP.NET Core:使用Dapper和SwaggerUI来丰富你的系统框架
    ASP .Net Core 使用 Dapper 轻型ORM框架
    基于AspNet Core2.0 开发框架,包含简单的个人博客Demo
    Asp.Net MVC及Web API框架配置会碰到的几个问题及解决方案 (精髓)
    精简版自定义 jquery
    vs code 前端如何以服务器模式打开 [安装服务器] server insteall
    RestSharp用法小结
    翻译:WebApi 认证--用户认证Oauth解析
  • 原文地址:https://www.cnblogs.com/Bighua123/p/7567318.html
Copyright © 2020-2023  润新知