码迷,mamicode.com
首页 > 移动开发 > 详细

SQL语句 - MERGE INTO 、Cross/Outer Apply用法理解

时间:2016-07-31 14:25:45      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:

MERGE INTO 

语法:

MERGE INTO table_name alias1
USING (table|view|sub_query) alias2
ON (join condition)
WHEN MATCHED THEN
  UPDATE table_name
   SET col1 = col_val1,
     col2 = col2_val
WHEN NOT MATCHED THEN
  INSERT (column_list) VALUES (column_values);

   

理解:

在alias2中Select出来的数据,每一条都跟alias1进行 ON (join condition)的比较,如果匹配,就进行更新的操作(Update),如果不匹配,就进行插入操作(Insert)。
因此,严格意义上讲,"在一个同时存在Insert和Update语法的Merge语句中,总共Insert/Update的记录数,就是Using语句中alias2的记录数。"

 

 

Cross/Outer Apply

语法:

<左表>  {cross|outer} apply <右表>

如:

select *
from Customers as C
 cross apply
    (select top 2 *
     from Orders as O
     where C.customerid=O.customerid
     order by orderid desc) as CA

 

理解:

  它是先得出<左表>【Customers】数据,然后将<左表>里的每一条记录,对应条件查询得到<右表>的n条记录,然后进行合并得到n行记录,最后将所有数据行返回。

     cross和outer的区别:如果对于左表的某一行记录,右表没有数据,那么cross apply结果中将没有这一行记录,而outer apply结果则会有一条右表都为null的记录。

 (实际过程数据库另有优化)

 

SQL语句 - MERGE INTO 、Cross/Outer Apply用法理解

标签:

原文地址:http://www.cnblogs.com/hz-blog/p/5722887.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!