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高级查询技巧"的详细阐述。 一、子查询 子查询是嵌套在其他SQL语句中的查询,用于获取主查询所需的值。它可以作为SELECT、FROM或WHERE子句的一部分。例如,你可以使用子查询来找到某个部门薪水最高...
数据库 增、删、改、查练习题目,多表联查练习及答案详解
Day06-Oracle高级查询一.pdf Day07-Oracle高级查询二.pdf Day08-Oracle分页查询和视图.pdf Day09-存储过程.pdf Day10-变量定义和循环控制.pdf Day11-plsql游标和函数.pdf Day12-触发器.pdf Day13-索引.pdf
本培训教程专注于Oracle SQL的高级查询与优化技术,结合实际案例,帮助用户深入理解和掌握高效的数据操作技巧。 首先,我们来看"高级查询"部分。在商业分析和报表制作中,常见的高级查询包括计算"上期数"、"上年数...
本文将深入探讨Oracle中的高级查询技术,帮助你提升在数据库操作上的技能。 一、子查询 子查询是Oracle查询中的一个强大特性,它允许在一个查询内部嵌套另一个查询。例如,你可以用子查询来找出销售额最高的产品,...
2. 高级查询技术:使用Oracle SQL的高级特性,如分析函数、子查询、连接以及数据聚合等。 3. 事务处理:深入理解如何使用Oracle的事务控制语句,如COMMIT、ROLLBACK以及SAVEPOINT,进行有效的事务管理。 4. 锁机制:...
调优是Oracle高级编程的重要部分,涵盖SQL调优、存储调优、内存调优和并发控制等多个方面。SQL调优主要通过优化查询结构、减少全表扫描、使用索引等方式实现。存储调优涉及到表空间、数据块、段和分区等概念,调整...
Oracle 高级语法详解 Oracle 高级语法是指在 Oracle 数据库管理系统中使用的高级语法结构,包括事务、函数、存储过程、触发器、异常等。这些语法结构是 Oracle 数据库开发和管理的核心内容,对于数据库开发者和管理...
oracle笔记高级子查询,oracle中的高级子查询有点难度,不太好理解,有具体的案例代码!
Oracle高级SQL学习与练习涵盖了数据库编程中的一系列高级主题,旨在帮助数据库开发者和管理员提高解决复杂问题的能力。在Oracle数据库系统中,高级SQL技能是进行高效数据管理、查询优化和复杂数据处理的基础。 1. ...
oracle 高级教程-深入学习集合 oracle 高级教程-深入学习集合
Oracle高级复制是Oracle数据库系统提供的一种复杂的数据同步技术,它允许在不同的数据库之间实时或近实时地复制数据。本教程将详细介绍如何进行Oracle高级复制的配置。 首先,我们需要准备两个运行Oracle数据库的...
Oracle 高级应用列表 Oracle 高级应用列表是 Oracle 数据库管理系统中高级应用的集合,涵盖了 PL/SQL、存储过程、函数、触发器等高级内容。下面是对每个知识点的详细解释: 1. PL/SQL PL/SQL 是 Oracle 数据库...
本文将基于"Oracle高级详细资料"的标题和描述,深入探讨Oracle物理内存的分配、数据库碎片整理、回滚段的管理、系统使用经验和性能优化技术。 首先,Oracle物理内存的分配是数据库高效运行的基础。在Oracle 9i版本...
"Oracle高级用法"主要涵盖了数据库的优化、安全管理、备份恢复、性能监控和复杂SQL操作等核心内容。下面我们将深入探讨这些高级主题。 一、优化 Oracle数据库优化主要包括SQL优化和索引优化。SQL优化涉及到编写高效...
精通Oracle SQL【第2版】ORACLE SQL高级编程【第二版】学习笔记
oracle_高级查询,使用oracle数据库最终上升到高级用法