`

oracle 高级查询

 
阅读更多

7、高级查询
    7.1:UNION ALL:返回查询检索出的所有行,包括重复的行
    7.2:UNION:返回查询检索出的所有非重复行。
    7.3:INTERSECT:返回查询检查出来的共有行。
    7.4:MINUS:返回将第二个查询检索出的行从第一个查询检索出的行中减去之后剩余的行。
    7.5:GROUP BY 之ROLLUP,可以为每个分组返回小计记录以及为所有分组返回总计记录。
         eg:
  select divid,sum(salary) from employee group by divid order by divid;
         DIV  SUM(SALARY)
  ----  ----------
  bus   1610000
  ope   1320000
  sal     4936000
  sup    1015000

  向ROLLUP传递一列
         eg:
  select divid,sum(salary) from employee group by rollup(divid) order by divid;
         DIV  SUM(SALARY)
  ----  ----------
  bus   1610000
  ope   1320000
  sal     4936000
  sup    1015000
            8881000
    
         向ROLLUP传递多列
  eg:
         select divid,jobid,sum(salary) from employee group by rollup(divid,jobid) order by divid,jobid;
  DIV     JOB     SUM(SALARY)
  -----   ------   -------------------
  BUS    MGR    530000
  BUS    PRE      800000
  BUS    WOR    180000
  BUS               1610000
  OPE    ENG      240000
  OPE    MGR      805000
  OPE    WOR      270000
  OPE                 1320000
  SAL     MGR      4446000
  SAL     WOR        490000
  SAL                   1936000
  SUP    MGR         465000
  SUP    TEC           115000
  SUP     WOR         435000
  SUP                     1015000
                            8881000

          修改传递给ROLLUP的列的位置,则会得到以jobid为准的一组数字统计

    7.6:GROUP BY 之CUBE,返回CUBE中所有列组合的小计信息,同时在最后显示总计信息
    7.7:GROUPING函数
         GROUPING函数可以接受一列,返回0或者1,如果列值为空,那么GROUPING()返回1;如果列值非空,则返回0,GROUPING()只能在使用ROLLUP或CUBE的查询中使用
    7.8:GROUPING SETS子句
         使用GROUPING SETS子句可以只返回小计记录.
  eg:
  select divid,jobid,sum(salary) from employee group by GROUPING SETS(divid,jobid) order by divid,jobid;
  DIV       JOB        SUM(SALARY)
  ------    -------    ---------------------
  BUS                    1610000
  OPE                    1320000
  SAL                     4936000
  SUP                    1015000
                     ENG         245000
       MGR       6246000
       PRE           800000
       TEC           115000
       WOR        1475000
 
       GROUPING SETS子句的性能一般比CUBE好,因此,应该尽可能使用GROUPING SETS,少使用CUBE..

       7.9:GROUPING_ID函数
        GROUPING位向量
 divid           jobid              位向量                  grouping_id返回值
 非空            非空                00                        0
 非空               空                 01                       1
 空                非空                10                       2
 空                   空                11                       3
 /** 位向量是2进制,grouping_id是10进制  */
      
       GROUPING_ID()用武之地在于使用HAVING子句过滤记录,HAVING子句可以将不包含小计或总计的记录除去,这只要简单的检查grouping_id()的返回值,看其大于0就可以实现
       select divid,jobid,grouping_id(divid,jobid) grpId,sum(salary) from employee group by cube(divid,jobid) having grouping_id(divid,jobid) > 0 order by divid,jobid;


       8.0:在GROUP_ID函数
            GROUP_ID函数可用于消除GROUP BY子句返回重复记录,GROUP_ID()不接受任何参数,如果某个特定的分组重复出现N次,那么GROUP_ID返回0到N-1之间的一个整数
     如果出现两次,那么GROUP_ID()函数等于1
     去重
     eg:
     select divid,jobid,group_id(),sum(salary) from employee group by divid,rollup(divid,jobid) having group_id = 0;

分享到:
评论

相关推荐

    oracle高级查询技巧

    以下是对"Oracle高级查询技巧"的详细阐述。 一、子查询 子查询是嵌套在其他SQL语句中的查询,用于获取主查询所需的值。它可以作为SELECT、FROM或WHERE子句的一部分。例如,你可以使用子查询来找到某个部门薪水最高...

    oracle高级查询练习

    数据库 增、删、改、查练习题目,多表联查练习及答案详解

    Oracle从入门到高级应用的全部课程文档

    Day06-Oracle高级查询一.pdf Day07-Oracle高级查询二.pdf Day08-Oracle分页查询和视图.pdf Day09-存储过程.pdf Day10-变量定义和循环控制.pdf Day11-plsql游标和函数.pdf Day12-触发器.pdf Day13-索引.pdf

    Oracle数据库SQL培训 数据库SQL语句编写培训教程 Oracle高级查询SQL优化 结合实际案例讲 视频+PPT.rar

    本培训教程专注于Oracle SQL的高级查询与优化技术,结合实际案例,帮助用户深入理解和掌握高效的数据操作技巧。 首先,我们来看"高级查询"部分。在商业分析和报表制作中,常见的高级查询包括计算"上期数"、"上年数...

    oracle高级查询

    本文将深入探讨Oracle中的高级查询技术,帮助你提升在数据库操作上的技能。 一、子查询 子查询是Oracle查询中的一个强大特性,它允许在一个查询内部嵌套另一个查询。例如,你可以用子查询来找出销售额最高的产品,...

    Oracle SQL高级编程

    2. 高级查询技术:使用Oracle SQL的高级特性,如分析函数、子查询、连接以及数据聚合等。 3. 事务处理:深入理解如何使用Oracle的事务控制语句,如COMMIT、ROLLBACK以及SAVEPOINT,进行有效的事务管理。 4. 锁机制:...

    Oracle 高级编程书籍

    调优是Oracle高级编程的重要部分,涵盖SQL调优、存储调优、内存调优和并发控制等多个方面。SQL调优主要通过优化查询结构、减少全表扫描、使用索引等方式实现。存储调优涉及到表空间、数据块、段和分区等概念,调整...

    oracle高级语法(事物、函数、存储过程、触发器、异常)[参照].pdf

    Oracle 高级语法详解 Oracle 高级语法是指在 Oracle 数据库管理系统中使用的高级语法结构,包括事务、函数、存储过程、触发器、异常等。这些语法结构是 Oracle 数据库开发和管理的核心内容,对于数据库开发者和管理...

    oracle笔记高级子查询

    oracle笔记高级子查询,oracle中的高级子查询有点难度,不太好理解,有具体的案例代码!

    Oracle高级sql学习与练习

    Oracle高级SQL学习与练习涵盖了数据库编程中的一系列高级主题,旨在帮助数据库开发者和管理员提高解决复杂问题的能力。在Oracle数据库系统中,高级SQL技能是进行高效数据管理、查询优化和复杂数据处理的基础。 1. ...

    oracle 高级教程-深入学习集合

    oracle 高级教程-深入学习集合 oracle 高级教程-深入学习集合

    oracle高级复制操作过程

    Oracle高级复制是Oracle数据库系统提供的一种复杂的数据同步技术,它允许在不同的数据库之间实时或近实时地复制数据。本教程将详细介绍如何进行Oracle高级复制的配置。 首先,我们需要准备两个运行Oracle数据库的...

    Oracle高级应用列表

    Oracle 高级应用列表 Oracle 高级应用列表是 Oracle 数据库管理系统中高级应用的集合,涵盖了 PL/SQL、存储过程、函数、触发器等高级内容。下面是对每个知识点的详细解释: 1. PL/SQL PL/SQL 是 Oracle 数据库...

    Oracle高级详细资料

    本文将基于"Oracle高级详细资料"的标题和描述,深入探讨Oracle物理内存的分配、数据库碎片整理、回滚段的管理、系统使用经验和性能优化技术。 首先,Oracle物理内存的分配是数据库高效运行的基础。在Oracle 9i版本...

    oracle高级用法

    "Oracle高级用法"主要涵盖了数据库的优化、安全管理、备份恢复、性能监控和复杂SQL操作等核心内容。下面我们将深入探讨这些高级主题。 一、优化 Oracle数据库优化主要包括SQL优化和索引优化。SQL优化涉及到编写高效...

    精通 ORACLE SQL高级编程 学习笔记

    精通Oracle SQL【第2版】ORACLE SQL高级编程【第二版】学习笔记

    oracle_高级查询

    oracle_高级查询,使用oracle数据库最终上升到高级用法

Global site tag (gtag.js) - Google Analytics