1、俩种表复制语句

SELECT INTO和INSERT INTO SELECT两种表复制语句
CT: create table <new table> as select * from <exists table>
要求目标表不存在,因为在插入时会自动创建表,并将查询表中指定字段数据复制到新建的表中
IS: insert into table2 (f1,f2,..) select v1,v2.... from table1
要求目标表table2必须存在,由于目标表table2已经存在,所以我们除了插入源表 table1的字段外,还可以插入常量

  

2、merge into 用法

 MERGE INTO用法:
merge into表A
using与表A产生关联字段值
on进行和表A关联
when matched then
update set...
when not matched then
insert ...) values

  

create table PRODUCTS(PRODUCT_ID INTEGER, REQ_NO VARCHAR(32), PRODUCT_NAME VARCHAR2(60), CATEGORY VARCHAR2(60));
insert into PRODUCTS values (1501, '001', 'vIVITAR 35Mм', 'ELECTRNCS');
insert into PRODUCTS values (1502, '002', 'oLYMPUS I85o', 'ELECTRNCS');
insert into PRODUCTS values (1600, '003', 'PIAY GYм', 'тoYS');
insert into PRODUCTS values (1601, '003', 'LAMAZE', 'moYs');
insert into PRODUCTS values (1717, '001', 'HARRY POTTER', 'DVD');
insert into PRODUCTS values (1666, '002', 'HARRY POTTER', 'DVD');
commit; --drop table PRODUCTS;
select * from PRODUCTS; merge into PRODUCTS a
using (select 1717 product_id, '001' req_no from dual) b
on (a.product_id = b.product_id and a.req_no = b.req_no) when matched then
update set product_name = '进行更新啦' , category = '新的category'
when not matched then
insert (product_id ,req_no , product_name , category)
values(1717, '002' , '新产品' , 'CCA');
commit;

  

3、递归函数

select * from emp
--where empno = 79391 or
start with empno = 7369 or empno = 7934
connect by prior mgr = empno
order by sal desc;

--PID在前面ID在后 (向上查询) --ID在前PI在后(向下查询)

  

4、分析函数

over函数
over partition by组合
over partition by order by组合
row_number函数
rollup函数
cube函数
grouping函数

  

over是分组函数

order by 是按什么连续求和

partition by 按什么分区

select deptno,ename, sal,
sum(sal) over (order by deptno) 连续求和,
sum(sal) over() 总和,
100*round(sal/sum(sal) over (),5) 份额
from emp;

 

select deptno,ename,sal,
sum(sal) over (partition by deptno order by ename) 部门连续求和,
sum(sal) over (partition by deptno) 部门总和,
100*round(sal/sum(sal) over (partition by deptno),4) "部门份额(%)",
sum(sal) over (order by deptno,ename) 连续求和,
sum(sal) over() 总和,
100*round(sal/sum(sal) over (),4) "份额(%)"
from emp;

  

求和规则有按部门分区的,有不分区的例子

 

5、row_number()分组排名

create table employee (empid int ,deptid int ,salary decimal (10,2));
insert into employee values (1,10,5500.00);
insert into employee values (2,10,4500.00);
insert into employee values (3,20,1900.00);
insert into employee values (4,20, 4800.00);
insert into employee values (5,40, 6500.00);
insert into employee values (6,40,14500.00);
insert into employee values (7,40,44500.00);
insert into employee values (8,50,6500.00);
insert into employee values (9, 50,7500.00);
commit; select * from employee; select e.*, row_number() over(partition by deptid order by empid) rank from employee e;

6、rollup()

在group by 分组上在加上对earnmonth的汇总统计

create table earnings--打工赚线表
(earnmonth varchar2 (6), --打工月份
area varchar2 (20),--打工地区
sno varchar2 (10),--打工者續号
sname varchar2 (20), --打工者姓名
times int,--本月打工次数
singieincome number (10,2), --、每次漠多少钱
personincome number (10,2) --当月总收入
);
-- truncate table earnings;
insert into earnings values ('200912','北平','511601','大',11,30,11*30);
insert into earnings values ('200912','北平','511602','大',8,25,8*25);
insert into earnings values ('200912','北平','511603','小素',30,6.25,30*6.25);
insert into earnings values ('200912','北平','511604','大亮',16,8.25,16*8.25);
insert into earnings values ('200912','北平','511605','搜藏',30,11,30*11);
insert into earnings values ('200912','金展','511301','小玉',15,12.25,15*12.25);
insert into earnings values ('200912','金展','511302','小凡',27,16.67,27*16.67);
insert into earnings values ('200912','金展','511303','小妮',7,39.33,7*99.33);
insert into earnings values ('200912','金展','511304','小角',0,18,0);
insert into earnings values ('200912','金展','511305','儿',11,9.88,11*9.88); insert into earnings values ('201001','北平','511601','大鬼',0,30,0);
insert into earnings values ('201001','北平','511602','大肌',14,25,14*25);
insert into earnings values ('201001','北平','511603','小',19,6.25,19*6.25);
insert into earnings values ('201001','北平','511604','大亮',7,8.25,7*8.25);
insert into earnings values ('201001','北平','511605','硬載',21,11,21*11);
insert into earnings values ('201001','金展','511301','小玉',6,12,25.6*12.25) ;
insert into earnings values ('201001','金展','511302','小凡',17,16.67,17*16.67);
insert into earnings values ('201001','金展','511303','小班',27,33.33,27*39.3);
insert into earnings values ('201001','金展','511304','小角',16,18,16*18);
insert into earnings values ('201001','金展','511305','儿',11,9.8,11*9.88);
commit; select earnmonth, area, sum(personincome)
from earnings
group by earnmonth, area ; select earnmonth, area, sum(personincome)
from earnings
group by rollup(earnmonth, area);

7、cube()分组

select earnmonth, area, sum(personincome)
from earnings
group by cube(earnmonth, area)
order by earnmonth, area;

8、grouping()

别名

select earnmonth,
(case
when ((grouping(area) = 1) and (grouping(earnmonth) = 0)) then
'月份小计'
when ((grouping(area) = 1) and (grouping(earnmonth) = 1)) then
'总计'
else
area
end) as area, sum(personincome)
from earnings
group by rollup(earnmonth, area);

  

9、排名  rank() dense_rank() row_number()

rank()  相同的值排名相同,但是下一位排名需要算上前面的,跳跃式排名

elect earnmonth 月份, area 地区, sname 打工者, personincome 收入,
rank() over(partition by earnmonth,area order by personincome desc) 排名
from earnings;
select earnmonth 月份, area 地区, sname 打工者, personincome 收入,
dense_rank() over(partition by earnmonth,area order by personincome desc) 排名
from earnings;
select earnmonth 月份, area 地区, sname 打工者, personincome 收入,
row_number() over(partition by earnmonth,area order by personincome desc) 排名
from earnings;

 

10、sum()

 select earnmonth 月份, area 地区, sname 打工者, personincome 收入,
sum(personincome) over(partition by sname order by personincome desc) 总收入
from earnings;

  

11、多行函数参与分组

 select distinct earnmonth 月份, area 地区,
max(personincome) over(partition by earnmonth, area) 最高值,
min(personincome) over(partition by earnmonth, area) 最低值,
avg(personincome) over(partition by earnmonth, area) 平均值,
sum(personincome) over(partition by earnmonth, area) 总收入
from earnings;

  

oracle--高级使用(merge)(递归START WITH)分析函数over的更多相关文章

  1. oracle 高级函数2

    原 oracle 高级函数 2017年08月17日 16:44:19 阅读数:1731 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u013278 ...

  2. oracle 高级函数

    原 oracle 高级函数 2017年08月17日 16:44:19 阅读数:1731 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u013278 ...

  3. oracle 高级分组

    oracle 高级分组 博客分类: 数据库基础 oraclesql  10.高级分组 本章目标: 对于增强的group by需要掌握: 1.使用rollup(也就是roll up累计的意思)操作产生s ...

  4. oracle高级查询(实例基于scott用户四张表)

    oracle高级查询(实例基于scott用户四张表) 分组查询 多表查询 子查询 综合实例 ====================================================== ...

  5. Oracle基础之Merge into

    Merge into语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句. 通过MERGE语句,根据一张表或多表联合查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDA ...

  6. 在oracle中使用merge into实现更新和插入数据

    目录 oracle中使用merge into DUAL表解释 使用场景 用法 单表 多表 oracle中使用merge into DUAL表解释 在Oracle数据库中,dual是Oracle中的一个 ...

  7. 39.oracle高级篇

    标题说是高级篇,其实也就是相对于基础篇来说的,也不是很深奥,自己平时工作中也都会用到,这里回忆的并不是特别冷门的知识,不要掉以轻心,以为“高级”就觉得工作中不会用到了. 一.select into 和 ...

  8. oracle数据匹配merge into

    来源于:http://blog.csdn.net/vtopqx/article/details/50633865 前言: 很久之前,估计在2010年左右在使用Oralce,当时有个需求就是需要对两个表 ...

  9. Oracle高级查询之OVER

    注释:为了方便大家学习和测试,所有的例子都是在Oracle自带用户Scott下建立的 oracel的高级用法:rank()/dense_rank() over(partition by ...orde ...

  10. [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)

    原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...

随机推荐

  1. Linux包安装及搭建服务

    IP地址:以·分隔成4部分,每部分在底层是以8位二进制存储 例:172.16.45.10/16(后面是子网掩码,表示网络地址是前面16位二进制) 网路地址:172.16.00 主机地址:172.16. ...

  2. [人工智能]IBM Watson人工智能API|一步步创建智能微信翻译官|第一章

    最近参加了IBM可认知内部创业活动,想从零创建一个微信翻译工具,这就是我的AI翻译官.

  3. Qt带参数的信号和槽

    在Qt的开发过程中,信号带参数是很常见的,在使用带参数的信号槽时,有以下几点需要注意. 当信号和槽函数的参数数量相同时,它们的参数类型要完全一致. 信号和槽函数的声明: signals: void i ...

  4. html2canvas 把h5网页保存为图片 区域保存

    html2canvas 把h5网页保存为图片 想把一个网页得某些元素,绘制成图片保存,有些数据是接口动态加载的,所以不能UI给到图片,需要我们把api的数据也绘制到图片上 html2canvas这个插 ...

  5. CommandLineRunner接口

    一.首先创建一个MyCommandLineRunner类实现CommandLineRunner接口     @Commponent把pojo注册到spring容器中 @Order(2)这个数越小优先级 ...

  6. reverse/inverse a mapping but with multiple values for each key

    reverse/inverse a mapping but with multiple values for each key multi mappping dictionary , reverse/ ...

  7. SpringMVC最新教程IDEA版

    1.servlet项目结构与识别 Idea里带个蓝点的文件夹为tomcat吃的网站内容,idea会通过“Web Resource Directory”来标注,会被打成一个war包 这个文件夹里,MET ...

  8. HDU 2296 Ring ( Trie图 && DP && DP状态记录)

    题意 : 给出 m 个单词,每一个单词有一个权重,如果一个字符串包含了这些单词,那么意味着这个字符串拥有了其权重,问你构成长度为 n 且权重最大的字符串是什么 ( 若有权重相同的,则输出最短且字典序最 ...

  9. [USACO08FEB]连线游戏Game of Lines

    题目背景 Farmer John最近发明了一个游戏,来考验自命不凡的贝茜. 题目描述 Farmer John has challenged Bessie to the following game: ...

  10. 舞蹈课(dancingLessons)

    有n个人参加一个舞蹈课.每个人的舞蹈技术由整数ai来决定.在舞蹈课的开始,他们从左到右站成一排.当这一排中至少有一对相邻的异性时,舞蹈技术相差最小的那一对会出列并开始跳舞.如果相差最小的不止一对,那么 ...