SQL 学习笔记
SQL 指merge into关键字 Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于Merge的解释非常的短小精悍:根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在另一个表中
SQL 指merge into关键字
Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。”,通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行操作的。
使用merge关键字的场景比如
- 数据同步
- 数据转换
- 基于源表对目标表做insert update delete操作
使用Merge关键字的好处
首先是更加短小精悍的语句,在SQL Server 2008之前没有Merge的时代,基于源表对目标表进行操作需要分别写好几条Insert,Update,Delete。而使用Merge,仅仅需要使用一条语句就好。下面我们来看一个例子。
merge into [Employee] as E //merge into是要修改的目标表 using Test_Employee as T //using是源表 ON T.ID=E.ID WHEN MATCHED THEN update set E.Name=T.Name // 如果存在匹配数据 ,就对目标表进行修改 WHEN NOT MATCHED THEN insert values(T.ID,T.Name,T.department,'','') // 如果不存在匹配数据 ,就进行插入
WHEN NOT MATCHED BY SOURCE THEN DELETE; //如果源表中不存在目标表中的数据,那么对目标表的中的不同步数据进行删除
SQL SELECT INTO 语法
SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。
SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。
可以把所有的列插入新表:(new_table_name 可以是在数据库中不存在的表,如果不存在,那么使用这条语句之后,会在数据库中创建这个表)
SELECT *INTO new_table_name [IN externaldatabase] FROM old_tablename
或者只把希望的列插入新表:
SELECT column_name(s)INTO new_table_name [IN externaldatabase] FROM old_tablename
where11 语法
比如上面的select into语句中在对表进行备份存档的时候你可以选择存档的方式,一种是指存表的结构,另一种表的全部数据
SELECT *INTO new_table_name [IN externaldatabase] FROM old_tablename where 11(11 因为条件不为真,所以不会查询得到表的数据。表示只存旧表的结构)
SELECT *INTO new_table_name [IN externaldatabase] FROM old_tablename where 1=1(1=1 因为条件为真,所以会查询得到表的数据。表示存旧表的整个数据)