oracle高级使用
1.merge into using 详解
MERGE 是 Oracle9i 新增的语法,根据源表对目标表进行匹配查询,匹配成功时更新,不成功时插入
比单独的 update + insert 的方式效率要更高,尤其是on条件下有唯一索引的时候,效率更高。
使用场景
在写数据同步的脚本时,常常会遇到这样的需求:‘存在时 - 更新,不存在时,插入’1
语法
MERGE INTO 目标表 a
USING 源表 b
ON (a.字段1 = b.字段2 and a.字段n = b.字段n)
WHEN MATCHED THEN
UPDATE SET a.新字段 = b.字段
WHERE 限制条件
WHEN NOT MATCHED THEN
INSERT (a.字段名1,a.字段名n) VALUES(b.字段值1, b.字段值n)
WHERE 限制条件123456789
基础数据
源表1:同上基础数据(0.1)
目标表:
CREATE TABLE stu1
AS SELECT * from student t where t.id = 1;1234
实例
MERGE INTO stu1 a
USING student b
ON (a.sid = b.sid) -- 必须带 ‘()’括号
WHEN MATCHED THEN -- 整体扫描,匹配时,执行此处
UPDATE SET a.sname = '小小'
<delete>
WHEN NOT MATCHED THEN -- 整体扫描,不匹配时,执行此处
INSERT (a.sid, a.xm)VALUES(5, 'e')
本文来自 鱼丸丶粗面 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qq_34745941/article/details/81176140?utm_source=copy</delete>
作者:蜗牛滴追逐
链接:https://www.jianshu.com/p/ddf320275f10
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
start with connect by prior 递归查询用法
这个子句主要是用于B树结构类型的数据递归查询,给出B树结构类型中的任意一个结点,遍历其最终父结点或者子结点。
start with 子句:遍历起始条件,有个小技巧,如果要查父结点,这里可以用子结点的列,反之亦然。
connect by 子句:连接条件。关键词prior,prior跟父节点列parentid放在一起,就是往父结点方向遍历;prior跟子结点列subid放在一起,则往叶子结点方向遍历, parentid、subid两列谁放在“=”前都无所谓,关键是prior跟谁在一起。
如果表中存在层次数据,则可以使用层次化查询子句查询出表中行记录之间的层次关系
基本语法:
[ START WITH CONDITION1 ]
CONNECT BY [ NOCYCLE ] CONDITION2
[ NOCYCLE ]参数暂时不解释
例:
select empno, ename, job, mgr, hiredate, sal, comm, deptno, level as lv
from emp
start with empno = 7839
connect by (prior empno) = mgr;
原文链接:https://blog.csdn.net/xiaocai0923/java/article/details/90018261

