SQL之CURD操作(三)

修改数据

UPDATE语句是标准的SQL语句,用于对表中数据行的一个子集进行更新。为了标识作为更新的子集行,须要在WHERE子句中指定一个谓词。在SET子句中要指定更改的列和这些列的新值(或表达式),各列之间用逗号分隔。

 

“同时操作”是SQL表达式中一个重要的特性,在编写UPDATE语句时应该谨记这一点。

例如:

UPDATE T

SET col1 = col1 + 10,col2 = col1 + 10

假如在更新钱col1等于100,col2等于200,你能计算出最终的结果值吗?

如果不考虑同时操作的概念,你可能认为col将等于110,col2等于120。好像赋值表达式是从左到右执行的。但是两个表达式是同时执行的它们都等于110.

用同时操作的思想,如果想交换两个变量的值该怎么操作呢?在大多数编程语言中,得需要一个临时变量。然而在SQL中这个问题非常简单:

UPDATE  T

SET col1 = col2,col2 = col1

 

和DELETE一样,T-SQL也支持一种基于联接的UPDATE语法,这不是标准的SQL语法。和基于联接的DELETE语句一样,联接在此也起到过滤的作用。

UPDATE还支持一种特殊语法,可以对表中的数据更新的同时为变量赋值,这种语法可以使你不必单独使用UPDATE和SELECT语句,就能完成同样的任务。

例如:

declare @i AS int = 123;

update T_Customer

set @i = CustID = CustID + 1

select @i

 

合并数据

SQLServer2008引入了一个称为MERGE的语句,它在一条语句根据逻辑条件做出不同的修改操作(INSERT,UPDATE,DELETE),使用MERGE的好处是:用较少的代码就可以表达需求,提高查询性能,因为它可以更少地查询设计表。

在MERGE子句中指定目标表的名称,在USING子句中指定来源表的名称。然后在ON子句中用谓词来定义合并条件,合并条件用来定义来源表中哪些行在目标表中有匹配,哪些没有匹配。

我们可以在WHEN MATCHED THEN子句中定义找到匹配行时执行的操作,也可以在WHEN NOT MATCHED THEN子句中定义没有找到匹配行时要进行的操作。

例如:

--MERGE语句

MERGE T_Employee AS e1

USING T_Employee2 AS e2

ON e1.Empid = e2.Empid

WHEN Matched THEN    --USING的表为准,修改MERGE的表

UPDATE SET

e1.FirstName = e2.FirstName,e1.LastName = e2.LastName,e1.Country = e2.Country

WHEN NOT Matched THEN   --USING的表为准,新增MERGE的表

INSERT(FirstName,LastName,Country) VALUES

(e2.FirstName,e2.LastName,e2.Country)

WHEN NOT MATCHED BY SOURCE THEN  --USING的表为准,删除MERGE的表

UPDATE SET

e1.IsDelete = 1;

 

T-SQL还支持第三种子句:WHEN NOT MATCHED BY SOURCE它用于当来源表中没有行对应目标表时,一般可以采取删除操作。

我们还可以在WHEN MATCHED后面添加AND来为操作子句增加谓词条件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值