`

Oracle 高级查询

 
阅读更多
create table tt as select * from emp;
alter table tt add (sex varchar2(1) default '0' );
select * from tt for update;


-- 职位分别是’MANAGER’、’ANALYST’、’SALESMAN’时,奖励金额分别是薪水的1.2倍、1.1倍、1.05倍,如果不是这三个职位,则奖励金额取薪水值:

select  e.empno , e.ename , e.job ,
        decode(
                e.job , 'MANAGER' ,e.sal*1.2,
                      'ANALYST' , e.sal*1.1,
                      'SALESMAN' ,e.sal*1.05,
                      e.sal
        ) bouns 
 from emp e ;
 
 select decode(e.job , 'MANAGER' ,'vip',
                                 'ANALYST' , 'vip',
                                 'OPERATION' ) job  , count(1) countJob from emp e group by decode(e.job , 'MANAGER' ,'vip','ANALYST' , 'vip', 'OPERATION' );
-- 查询tt表的男女多少(sex 列有可能为空,不知道男女)?  1 :男 , 0 :女
select count(*) as "性别" from tt where sex='0' union all  select count(*) as "性别" from tt where sex='1';
--decode 实现
select decode(t.sex , '1' , '男'  , '女')  from tt t ;
                       
SELECT deptno, dname, loc
FROM dept
ORDER BY 
      DECODE(dname, '研发部',1,'市场部',2,'销售部',3), loc;

-- 排序函数 : 
-- row_number() over (partition by c1  order by c2 )       
-- 表示根据c1分组,在分组内部根据c2排序。此函数计算的值就表示每组内部排序后的顺序编号,组内连续且唯一
SELECT deptno, ename, empno,
       ROW_NUMBER()
               OVER (PARTITION BY deptno ORDER BY sal)     AS  empSal
   FROM emp;      

-- RANK : rank()  over(partition by  c1 order by c2 )    
--表示根据c1分组,在分组内部根据c2排名,相同的数据返回相同排名。
-- 特点是跳跃排序,如果有相同数据,则排名相同,比如并列第二,则两行数据都标记为2,但下一位将是第四名。 
 -- 注意: row_number 结果没有重复,  rank(); 有重复
 select e.*  , rank() over(partition by e.deptno order by e.sal ) as "e.sal"  from emp e;
 
-- DENSE_RANK:  dense_rank() over ( partition by c1 order by c2 )
--表示根据c1分组,在分组内部根据c2排名,相同的数据返回相同排名。
-- 特点是排序不跳跃,如果有相同数据,则排名相同,比如并列第二,则两行数据都标记为2,但下一位将是第3名。 
 -- 注意: row_number 结果没有重复(相同的数据也没有重复),  rank(); 有重复
 -- rank() 排名是跳跃的,dense_rank(); 拍名是连续的
 select e.* , dense_rank() over(partition by e.deptno order by e.sal ) as "e.sal" from emp e;
 
 
 -- 高级分组函数:是 GROUP BY 子句的扩展 (简化union all 的结果,比union all的效率高)
 --GROUP BY ROLLUP(a, b, c)          rollup 汇总
-- GROUP BY CUBE(a, b, c)            cube 立方
-- GROUP BY GROUPING SETS ( (a), (b))      

--SELECT a,b,c,SUM(d) FROM test GROUP BY ROLLUP(a,b,c);
-- 等价于: (group by a, b ,c)  union all  (group by a, b)  union all (group by a ) union all  (select sum(d) from test); 
-- 对ROLLUP的列从右到左以一次少一列的方式进行分组直到所有列都去掉后的分组(也就是全表分组)。
-- 对于n个参数的ROLLUP,有n+1次分组。

-- GROUP BY CUBE(a, b, c)
-- (group by a, b ,c)  union all  (group by a, b )    union all  (group by a, c)  union all  (group by a )  union all  (group by b ,c ) 
 -- union all  (group by b)  union all  (group by c )   union all  (select sum(d) from test); 
 --对cube的每个参数,都可以理解为取值为参与分组和不参与分组两个值的一个维度,
 -- 所有维度取值组合的集合就是分组后的集合。对于n个参数的cube,有2^n次分组。
    
 -- grouping sets
 -- 如果不需要获得由完备的 ROLLUP 或 CUBE 运算符生成的全部分组,
 -- 则可以使用 GROUPING SETS 仅指定所需的分组。GROUPING SETS 列表可以包含重复的分组。 
 --使用GROUP BY GROUPING SETS(a,b,c),则对(a),(b),(c)进行GROUP BY
 --使用GROUP BY GROUPING SETS((a,b),c), 则对(a,b),(c)进行GROUP BY
 --GROUPING BY GROUPING SET(a,a) , 则对(a)进行2次GROUP BY, GROUPING SETS的参数允许重复
 
                       
 
 
 
 
 
 
 
 

 

分享到:
评论

相关推荐

    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