表的插入、更新、删除、合并操作_21_合并表中数据
合并表中数据
需求描述
需求:如果emp_temp表中的员工存在于emp中,则将他们的提成(comm字段)更新为1000;
对于提成已经更新为1000的员工,如果他们的工资(SAL字段)少于2000,则从emp_temp表里删除他们;
其它情况从EMP表里取员工编号(EMPNO字段)、员工名称(ENAME字段)、部门号(DEPTNO字段)插入到emp_temp中.
解决方法:通过Merge into语法对插入、更新、删除进行操作。
注: 数据库数据集SQL脚本详见如下链接地址
员工表结构和数据初始化SQL脚本
SQL代码
-- Oracle:
CREATE TABLE emp_temp ASSELECT deptno,empno,ename,comm FROM empWHERE empno IN (7782,7839,7934);SELECT et.empno,et.ename,et.deptno,et.comm,emp.sal
FROM emp_temp et
JOIN emp
ON et.empno = emp.empno;MERGE INTO emp_temp etUSING(SELECT empno,ename,deptno,comm,SAL FROM emp) empON (et.empno = emp.empno)WHEN MATCHED THENUPDATE SET et.comm = 1000DELETE WHERE (SAL < 2000)WHEN NOT MATCHED THENINSERT (et.empno,et.ename,et.deptno,et.comm) VALUES(emp.empno,emp.ename,emp.deptno,emp.comm);SELECT et.empno,et.ename,et.deptno,et.comm,emp.salFROM emp_temp etJOIN empON et.empno = emp.empno;
执行结果
-- Sql Server:
CREATE TABLE emp_temp(deptno int NULL,empno int NOT NULL,ename varchar(15) NULL,comm decimal(7, 2) NULL
)INSERT INTO emp_temp
SELECT deptno,empno,ename,comm FROM emp
WHERE empno IN (7782,7839,7934);BEGIN TRAN SELECT et.empno,et.ename,et.deptno,et.comm,emp.sal
FROM emp_temp et
JOIN emp
ON et.empno = emp.empno;MERGE INTO emp_temp etUSING(SELECT empno,ename,deptno,comm,SAL FROM emp) empON (et.empno = emp.empno)WHEN MATCHED AND SAL < 2000 THEN DELETE WHEN MATCHED THENUPDATE SET et.comm = 1000WHEN NOT MATCHED THEN
INSERT VALUES(emp.deptno,emp.empno,emp.ename,emp.comm);SELECT et.empno,et.ename,et.deptno,et.comm,emp.sal
FROM emp_temp et
JOIN emp
ON et.empno = emp.empno;ROLLBACK TRAN
注:
- 这里SQL Server和Oracle的merge into语法还是有差异的.SQL Server里如下代码:
WHEN MATCHED AND SAL < 2000 THEN
DELETE
要写在前面,如果和UPDATE互换了位置,则会报如下错:
消息 5324,级别 16,状态 1,第 11 行
在 MERGE 语句中,带搜索条件的 'WHEN MATCHED' 子句不能出现在不带搜索条件的 'WHEN MATCHED' 子句后。
- 目前Mysql并没有有merge into的语法.
表的插入、更新、删除、合并操作_21_合并表中数据相关推荐
- asp vb 插入,更新,删除数据库操作。
记笔记. 离开学校,东西都还给老师了,哎. Select Case str Case "insert": sql="select * from ["&a ...
- 顺序表的插入和删除操作
C语言线性表的插入和删除操作 C语言数据结构的学习之线性表的插入与删除操作 C语言线性表的插入和删除操作 一.插入操作 插入操作的时间复杂度分析: 二.删除操作 删除操作的时间复杂度分析: 查找操作 ...
- 顺序表的插入与删除java_C++实现顺序表的常用操作(插入删出查找输出)
实现顺序表的插入,删除,查找,输出操作在C语言中经常用到.下面小编给大家整理实现代码,一起看下吧 代码如下所示: #include using namespace std; #define MAXSI ...
- 2 顺序表的插入,删除,查找操作(详细)
一 顺序表的结构体定义和函数声明 #include<iostream> using namespace std; #define ElemType int // 自定义 #define ...
- c语言编程文件中删除数据结构,C语言数据结构实战(一)顺序表的插入与删除
今天学习了思成老师的数据结构实战教程 写了一个顺序表 插入和删除的操作 把源码共享给大家 一共包括list.c stu.h main.c list.h .h文件是头文件 需要引入 具体的功能我都已 ...
- java中线性表删除元素和删除指定元素_线性表的插入和删除(Java版)
1.线性表的定义: (1).线性表是一种可以在任意位置插入和删除数据元素操作.由n(n≥0)个相同类型数据元素a0, a1,-, an-1组成的线性结构.除了第一个元素没有前驱元素和最后一个元素没有后 ...
- 折半查找和线性表的插入与删除实验
学号 姓名 博客名 2103101018 罗玛 桃花岛-戌时 题目:折半 ...
- mysql 修改表卡死_MySQL表不能修改、删除等操作,卡死、锁死情况的处理办法。...
MySQL如果频繁的修改一个表的数据,那么这么表会被锁死.造成假死现象. 比如用Navicat等连接工具操作,Navicat会直接未响应,只能强制关闭软件,但是重启后依然无效. 解决办法: 首先执行: ...
- MFC二叉树可视化绘制 (C++)—— 插入、删除、先序遍历、中序遍历、后序遍历、层序遍历(基于平衡二叉树实现)
界面展示: 相关文章目录 平衡二叉树的构造过程图解 C/C++平衡二叉树实现 -- 插入.删除.先序遍历.中序遍历.后序遍历.层序遍历(设计详解) MFC 在对话框中绘制图形的方法 -- 及二叉树绘制 ...
最新文章
- 每日问题记录20171117
- python3 装饰器_python3装饰器
- 部分和问题 (dfs搜索 尺取)
- Struts2 注解中跳转 action
- k8s:pod容器的生命周期之init容器
- TensorSpace:超酷炫3D神经网络可视化框架
- 速战速决?你不会是不行吧......
- apache lucene_Apache Lucene中的并发查询执行
- javascript如何阻止事件冒泡和默认行为
- tabel表格制作及操作
- 用busybox制作并配置根文件系统
- Git学习文档之二 应用总结-svn迁移到git
- idea 查看jsp是否被引用_IDEA集成Java性能分析神器JProfiler
- C++的多态原理和实现
- 去除 AutoCAD 2013 x64 教育版打印戳记
- 关于代码运行速度与cpu关系的一点小事
- qconshanghai2017
- 西北大学第四届程序设计竞赛新生赛(同步赛)(J)
- 谷歌Zxing Utils
- 超市收银系统服务器,超市收银系统
热门文章
- VTK:图像平面小部件用法实战
- VTK:创建颜色系列用法实战
- boost::units模块实现测试数量之间的转换的测试程序
- boost::mpl模块实现pop_front相关的测试程序
- boost::mp11::mp_assign相关用法的测试程序
- boost::graph模块实现closeness中心性的测试程序
- DCMTK:创建,编写和读取细分对象
- DCMTK:创建大型(> 4 GB)增强型CT对象的测试
- DCMTK:部分元素访问API的应用程序
- VTK:Shaders之MarbleShader