合并表中数据

需求描述

需求:如果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

注:

  1. 这里SQL Server和Oracle的merge into语法还是有差异的.SQL Server里如下代码:

WHEN MATCHED AND SAL < 2000 THEN

DELETE

要写在前面,如果和UPDATE互换了位置,则会报如下错:

消息 5324,级别 16,状态 1,第 11 行

在 MERGE 语句中,带搜索条件的 'WHEN MATCHED' 子句不能出现在不带搜索条件的 'WHEN MATCHED' 子句后。

  1. 目前Mysql并没有有merge into的语法.

表的插入、更新、删除、合并操作_21_合并表中数据相关推荐

  1. asp vb 插入,更新,删除数据库操作。

    记笔记. 离开学校,东西都还给老师了,哎. Select Case str  Case "insert":    sql="select * from ["&a ...

  2. 顺序表的插入和删除操作

    C语言线性表的插入和删除操作 C语言数据结构的学习之线性表的插入与删除操作 C语言线性表的插入和删除操作 一.插入操作 插入操作的时间复杂度分析: 二.删除操作 删除操作的时间复杂度分析: 查找操作 ...

  3. 顺序表的插入与删除java_C++实现顺序表的常用操作(插入删出查找输出)

    实现顺序表的插入,删除,查找,输出操作在C语言中经常用到.下面小编给大家整理实现代码,一起看下吧 代码如下所示: #include using namespace std; #define MAXSI ...

  4. 2 顺序表的插入,删除,查找操作(详细)

    一 顺序表的结构体定义和函数声明 #include<iostream> using namespace std; #define ElemType int  // 自定义 #define ...

  5. c语言编程文件中删除数据结构,C语言数据结构实战(一)顺序表的插入与删除

    今天学习了思成老师的数据结构实战教程 写了一个顺序表 插入和删除的操作 把源码共享给大家 一共包括list.c stu.h main.c list.h   .h文件是头文件 需要引入 具体的功能我都已 ...

  6. java中线性表删除元素和删除指定元素_线性表的插入和删除(Java版)

    1.线性表的定义: (1).线性表是一种可以在任意位置插入和删除数据元素操作.由n(n≥0)个相同类型数据元素a0, a1,-, an-1组成的线性结构.除了第一个元素没有前驱元素和最后一个元素没有后 ...

  7. 折半查找和线性表的插入与删除实验

    学号                     姓名                   博客名 2103101018         罗玛                   桃花岛-戌时 题目:折半 ...

  8. mysql 修改表卡死_MySQL表不能修改、删除等操作,卡死、锁死情况的处理办法。...

    MySQL如果频繁的修改一个表的数据,那么这么表会被锁死.造成假死现象. 比如用Navicat等连接工具操作,Navicat会直接未响应,只能强制关闭软件,但是重启后依然无效. 解决办法: 首先执行: ...

  9. MFC二叉树可视化绘制 (C++)—— 插入、删除、先序遍历、中序遍历、后序遍历、层序遍历(基于平衡二叉树实现)

    界面展示: 相关文章目录 平衡二叉树的构造过程图解 C/C++平衡二叉树实现 -- 插入.删除.先序遍历.中序遍历.后序遍历.层序遍历(设计详解) MFC 在对话框中绘制图形的方法 -- 及二叉树绘制 ...

最新文章

  1. 每日问题记录20171117
  2. python3 装饰器_python3装饰器
  3. 部分和问题 (dfs搜索 尺取)
  4. Struts2 注解中跳转 action
  5. k8s:pod容器的生命周期之init容器
  6. TensorSpace:超酷炫3D神经网络可视化框架
  7. 速战速决?你不会是不行吧......
  8. apache lucene_Apache Lucene中的并发查询执行
  9. javascript如何阻止事件冒泡和默认行为
  10. tabel表格制作及操作
  11. 用busybox制作并配置根文件系统
  12. Git学习文档之二 应用总结-svn迁移到git
  13. idea 查看jsp是否被引用_IDEA集成Java性能分析神器JProfiler
  14. C++的多态原理和实现
  15. 去除 AutoCAD 2013 x64 教育版打印戳记
  16. 关于代码运行速度与cpu关系的一点小事
  17. qconshanghai2017
  18. 西北大学第四届程序设计竞赛新生赛(同步赛)(J)
  19. 谷歌Zxing Utils
  20. 超市收银系统服务器,超市收银系统

热门文章

  1. VTK:图像平面小部件用法实战
  2. VTK:创建颜色系列用法实战
  3. boost::units模块实现测试数量之间的转换的测试程序
  4. boost::mpl模块实现pop_front相关的测试程序
  5. boost::mp11::mp_assign相关用法的测试程序
  6. boost::graph模块实现closeness中心性的测试程序
  7. DCMTK:创建,编写和读取细分对象
  8. DCMTK:创建大型(> 4 GB)增强型CT对象的测试
  9. DCMTK:部分元素访问API的应用程序
  10. VTK:Shaders之MarbleShader