
DB2 Merge语句是经常可以用到的DB2语句,下面对DB2 Merge语句作了详细的介绍,如果您对此方面感兴趣的话,不妨一看。
DB2 Merge语句的作用非常强大,它可以将一个表中的数据合并到另一个表中,在合并的同时可以进行插入、删除、更新等操作。我们还是先来看个简单的例子吧,假设你定义了一个雇员表(employe),一个经理表(manager),如下所示:
—雇员表(EMPLOYE)CREATE TABLE EMPLOYE (EMPLOYEID INTEGER NOT NULL,—员工号NAME VARCHAR(20) NOT NULL,—姓名SALARY DOUBLE—薪水);INSERT INTO EMPLOYE (EMPLOYEID,NAME,SALARY) VALUES(1,’张三’,1000),(2,’李四’,2000),(3,’王五’,3000),(4,’赵六’,4000),(5,’高七’,5000);–经理表(MANAGER)CREATE TABLE MANAGER (EMPLOYEID INTEGER NOT NULL,—经理号NAME VARCHAR(20) NOT NULL,—姓名SALARY DOUBLE—薪水);INSERT INTO MANAGER (MANAGERID,NAME,SALARY) VALUES(3,’王五’,5000),(4,’赵六’,6000);—雇员表(EMPLOYE)CREATE TABLE EMPLOYE (EMPLOYEID INTEGER NOT NULL,—员工号NAME VARCHAR(20) NOT NULL,—姓名SALARY DOUBLE—薪水);INSERT INTO EMPLOYE (EMPLOYEID,NAME,SALARY) VALUES(1,’张三’,1000),(2,’李四’,2000),(3,’王五’,3000),(4,’赵六’,4000),(5,’高七’,5000);–经理表(MANAGER)CREATE TABLE MANAGER (EMPLOYEID INTEGER NOT NULL,—经理号NAME VARCHAR(20) NOT NULL,—姓名SALARY DOUBLE—薪水);INSERT INTO MANAGER (MANAGERID,NAME,SALARY) VALUES(3,’王五’,5000),(4,’赵六’,6000);
经过一段时间,你发现这样的数据模型,或者说表结构设计简直就是一大败笔,经理和雇员都是员工嘛,为什么要设计两个表呢?发现错误后就需要改正,所以你决定,删除经理表(MANAGER)表,将MANAGER 表中的数据合并到EMPLOYE 表中,仔细分析发现,王五在两个表中都存在(可能是干的好升官了),而刘八在EMPLOYE 表中并不存在,现在,我们要求把EMPLOYE 表中不存在的MANAGER都插入到EMPLOYE 表中,存在的更新薪水。该怎么办呢?这个问题并不难,通常,我们可以分两步,如下所示:
–更新存在的UPDATE EMPLOYE AS EM SET SALARY=(SELECT SALARY FROM MANAGER WHERE MANAGERID=EM.EMPLOYEID)WHERE EMPLOYEID IN (SELECT MANAGERID FROM MANAGER);—插入不存在的INSERT INTO EMPLOYE (EMPLOYEID,NAME,SALARY)SELECT MANAGERID,NAME,SALARY FROM MANAGER WHERE MANAGERID NOT IN (SELECT EMPLOYEID FROM EMPLOYE);–更新存在的UPDATE EMPLOYE AS EM SET SALARY=(SELECT SALARY FROM MANAGER WHERE MANAGERID=EM.EMPLOYEID)WHERE EMPLOYEID IN (SELECT MANAGERID FROM MANAGER);—插入不存在的INSERT INTO EMPLOYE (EMPLOYEID,NAME,SALARY)SELECT MANAGERID,NAME,SALARY FROM MANAGER WHERE MANAGERID NOT IN (SELECT EMPLOYEID FROM EMPLOYE);
上面的处理是可以的,但是我们还可以有更简单的方法,就是用Merge语句,如下所示:
MERGE INTO EMPLOYE AS EMUSING MANAGER AS MAON EM.EMPLOYEID=MA.MANAGERIDWHEN MATCHED THEN UPDATE SET EM.SALARY=MA.SALARYWHEN NOT MATCHED THEN INSERT VALUES (MA.MANAGERID,MA.NAME,MA.SALARY);MERGE INTO EMPLOYE AS EMUSING MANAGER AS MAON EM.EMPLOYEID=MA.MANAGERIDWHEN MATCHED THEN UPDATE SET EM.SALARY=MA.SALARYWHEN NOT MATCHED THEN INSERT VALUES (MA.MANAGERID,MA.NAME,MA.SALARY);
在上面的处理中,我们用经理表(MANAGER)的薪水更新了雇员表(EMPLOYE)的薪水,假设现在要求,如果经理表(MANAGER)的薪水>雇员表(EMPLOYE)的薪水的时候更新,否则不更新,怎么办呢?如下:
MERGE INTO EMPLOYE AS EMUSING MANAGER AS MAON EM.EMPLOYEID=MA.MANAGERIDWHEN MATCHED AND EM.SALARY
不仔细的朋友可能没有看出上面两条语句的区别,哈哈,请仔细对比一下这两条语句。上面的语句中多了ELSE IGNORE语句,它的意思正如它英文的意思,其它情况忽略不处理。如果你认为理论上应该不存在EM.SALARY>MA.SALARY的数据,如果有,说明有问题,你想抛个异常,怎么办?如下:
MERGE INTO EMPLOYE AS EMUSING MANAGER AS MAON EM.EMPLOYEID=MA.MANAGERIDWHEN MATCHED AND EM.SALARY
对于EM.SALARY>MA.SALARY的情况,如果你不想抛异常,而是删除EMPLOYE中的数据,怎么办?如下:
MERGE INTO EMPLOYE AS EMUSING MANAGER AS MAON EM.EMPLOYEID=MA.MANAGERIDWHEN MATCHED AND EM.SALARY
以上简单介绍了Merge语句的使用,它的应用不只是上面介绍的情况,其实它可以应用在很多其他语句不好处理情况,这需要你去发现,记住熟能生巧
【编辑推荐】
DB2游标原理介绍
db2日志保存的两种方式
几种常用的DB2循环用法
四种常用的DB2循环语句
DB2创建数据库的实现
SQLServer2008:划于2008年第一季度发布的SQL Server 2008不仅对原有性能进行了改进,还添加了许多新特性,比如新添了数据集成功能,改进了分析服务,报告服务,以及Office集成等等。
SQL Server集成服务SSIS(SQL Server集成服务)是一个嵌入式应用程序,用于开发和执行ETL(解压缩、转换和加载)包。
SSIS代替了SQL 2000的DTS。
整合服务功能既包含了实现简单的导入导出包所必需的Wizard导向插件、工具以及任务,也有非常复杂的数据清理功能。
SQL Server 2008 SSIS的功能有很大的改进和增强,比如它的执行程序能够更好地并行执行。
在SSIS 2005,数据管道不能跨越两个处理器。
而SSIS 2008能够在多处理器机器上跨越两个处理器。
而且它在处理大件包上面的性能得到了提高。
SSIS引擎更加稳定,锁死率更低。
Lookup功能也得到了改进。
Lookup是SSIS一个常用的获取相关信息的功能。
比如从CustomerID查找Customer Name,获取数据集。
Lookup在SSIS中很常见,而且可以处理上百万行的数据集,因此性能可能很差。
SQL 2008对Lookup的性能作出很大的改进,而且能够处理不同的数据源,包括 ,XML,OLEDB和其他SSIS压缩包。
SQL 2008可以执行TSQL的MERGE命令。
用MERGE命令,只需一个语句就可以对行进行 UPDATE、INSERT或 DELETE。
下面的例子就是如何用MERGE命令来把新的Inventory Item descriptions 列表插入已有的Inventory Master中。
除了 descriptions, NewInventory表格中还加入了其他一些部分。
如果没有MERGE语句,就需要执行两个命令才能完成。
第一个命令查找匹配的 Description然后更新。
第二个命令查找不匹配项然后插入。
有了MERGE,一个语句就可以完成这两个任务。
步骤如下:MERGE InventoryMaster AS imUSING (SELECT InventoryID, Descr FROM NewInventory) AS srcON im. InventoryID = src. InventoryIDWHEN MATCHED THENUPDATE SET = NOT MATCHED THENINSERT (InventoryID, Descr) VALUES (src. InventoryID, );分析服务SSAS(SQL Server分析服务)也得到了很大的改进和增强。
IB堆叠做出了改进,性能得到很大提高,而硬件商品能够为Scale out管理工具所使用。
Block Computation也增强了立体分析的性能。
报表服务SSRS(SQL Server 报表服务)的处理能力和性能得到改进,使得大型报表不再耗费所有可用内存。
另外,在报表的设计和完成之间有了更好的一致性。
SQL SSRS 2008还包含了跨越表格和矩阵的TABLIX。
Application Embedding 允许用户点击报表中的 URL链接调用应用程序。
Microsoft Office 2007SQL Server 2008能够与 Microsoft Office 2007完美地结合。
例如,SQL Server Reporting Server能够直接把报表导出成为word文档。
而且使用 Report Authoring工具,Word和Excel都可以作为SSRS报表的模板。
Excel SSAS新添了一个数据挖掘插件,提高了其性能。
展开全部在查询页面用语句创建就可以。
1、打开Navicat for MySQL,并登录到指定数据库。
2、点击上方查询。
3、点击新建查询。
4、在空白处写上视图创建语句,点击左上方执行即可。
MERGE语句是SQL语句的一种。
在SQL Server、Oracle数据库中可用,MySQL、PostgreSQL中不可用。
MERGE是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。
通过MERGE语句,根据一张表(原数据表,source table)或子查询的连接条件对另外一张(目标表,target table)表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。
这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。
数据库SQLserver最新版本是什么?
mysql 视图 merge怎么用
merge into仅使用insert和直接执行insert哪个效率高
发表评论