sql-(Cross||Outer)Apply
Apply - 涉及以下两个步骤中的一步或两步(取决于Apply的类型):
1、A1:把右表表达式应用于左表的行
2、A2:添加外部行
Apply运算符把右表表达式应用于左输入的每一行。右表达式可以引用左输入中的列,对于左表中的每一行,都要计算一次右边输入的表达式。这一步会把左边的每一行和来自右表达式的响应行进行匹配,并将生成的结果集合合并起来,返回组合后的结果
Cross Apply和Outer Apply总是包含步骤A1,只有Outer Apply才包含步骤A2
如果内部(右)表表达式为外部(左)行返回的是空集,则Cross Apply不会返回该外部(左)行。而Outer Apply会返回这样的行,对于内表表达式的属性,则使用Null作为其占位符。
If OBJECT_ID('Orders') Is Not Null Drop Table Orders;
If OBJECT_ID('Customers') Is Not Null Drop Table Customers;
Go
Create Table Customers
(
CustomerID Char(5) Not Null Primary Key,
City Varchar(10) Not Null
);
Create Table Orders
(
OrderID Int Not Null Primary Key,
CustomerID Char(5) Null References Customers(CustomerID)
);
Go
Insert Into Customers(CustomerID,City) Values('FISSA','Madrid');
Insert Into Customers(CustomerID,City) Values('FRNDO','Madrid');
Insert Into Customers(CustomerID,City) Values('KRLOS','Madrid');
Insert Into Customers(CustomerID,City) Values('MRPHS','Zion');
Insert Into Orders(OrderID,CustomerID) Values(1,'FRNDO');
Insert Into Orders(OrderID,CustomerID) Values(2,'FRNDO');
Insert Into Orders(OrderID,CustomerID) Values(3,'KRLOS');
Insert Into Orders(OrderID,CustomerID) Values(4,'KRLOS');
Insert Into Orders(OrderID,CustomerID) Values(5,'KRLOS');
Insert Into Orders(OrderID,CustomerID) Values(6,'MRPHS');
Insert Into Orders(OrderID,CustomerID) Values(7,Null);
Select * From Customers

Select * From Orders

Select a.CustomerID,a.City,c.OrderID From Customers a
Cross Apply
(
Select Top 1 * From Orders b
Where a.CustomerID=b.CustomerID
Order By OrderID Desc
) c

Select a.CustomerID,a.City,c.OrderID From Customers a
Cross Apply
(
Select Top 2 * From Orders b
Where a.CustomerID=b.CustomerID
Order By OrderID Desc
) c

Select a.CustomerID,a.City,c.OrderID From Customers a
Outer Apply
(
Select Top 1 * From Orders b
Where a.CustomerID=b.CustomerID
Order By OrderID Desc
) c

sql-(Cross||Outer)Apply的更多相关文章
- SQL Server outer apply 和 cross apply
先说点题外话,因为后面我会用到这个函数. 前两天自定义了一个 sql 的字符串分割函数(Split),不过后来发现有点问题,例如: select * from Split(default,'123,4 ...
- SQL语句 - MERGE INTO 、Cross/Outer Apply用法理解
MERGE INTO 语法: MERGE INTO table_name alias1 USING (table|view|sub_query) alias2ON (join condition) W ...
- sql的OUTER APPLY
今天写一个查询sql,其中涉及到一个银行卡绑定表(表名:BankBind),我要将这个表的开户行字段的值进行分割出省份.支行, 这个开户行字段存储的值如“广东省广东省分行江门市分行恩平市支行”.“招商 ...
- sql server cross/outer apply 用法
这是 sql server 帮助文档关于apply的描述: 使用 APPLY 运算符(2005或以上版本)可以为实现查询操作的外部表表达式返回的每个行调用表值函数.表值函数作为右输入,外部表表达式作为 ...
- SQL Server Cross/Outer Apply
SQL Server2005引入了APPLY运算符,它非常像连接子句,它允许两个表达式直接进行连接,即将左/外部表达式和右/内部表达式连接起来. CROSS APPLY(类比inner join)和O ...
- SQL 关于apply的两种形式cross apply 和 outer apply(转)
转载链接:http://www.cnblogs.com/shuangnet/archive/2013/04/02/2995798.html apply有两种形式: cross apply 和 oute ...
- SQL关于apply的两种形式cross apply和outer apply(转载)
SQL 关于apply的两种形式cross apply 和 outer apply apply有两种形式: cross apply 和 outer apply 先看看语法: <lef ...
- <转>SQL Server CROSS APPLY and OUTER APPLY
Problem SQL Server 2005 introduced the APPLY operator, which is like a join clause and it allows joi ...
- 转:SQL 关于apply的两种形式cross apply 和 outer apply
原文地址:http://www.cnblogs.com/Leo_wl/archive/2013/04/02/2997012.html SQL 关于apply的两种形式cross apply 和 out ...
- SQL Server中CROSS APPLY和OUTER APPLY应用
1.什么是Cross Apply和Outer Apply ? 我们知道SQL Server 2000中有Cross Join用于交叉联接的.实际上增加Cross Apply和Outer Apply是用 ...
随机推荐
- 把一个集合自定转成json字符串
List<CityData> listData =new List<CityData>(); //把一个集合自定转成json字符串. foreach (var city in ...
- 厉害了,七牛云 CEO 来讲架构了!
说起许式伟,你应该不陌生,他是七牛云的CEO,ECUG 社区发起人,国内 Go 语言圈的领军人物,曾就职于金山.盛大,有超过 10 年的搜索和分布式存储相关技术的研发经验. 他的个人经历颇为传奇,大学 ...
- Android之build.prop属性详解
注:本篇文章是基于MSD648项目(AndroidTV)的prop进行说明. Android版本:4.4.4 内核版本:3.10.86 1.生成build.prop build.prop的生成是由ma ...
- follow up2-20190426
406. Minimum Size Subarray 同向双指针 https://www.lintcode.com/problem/minimum-size-subarray-sum/descript ...
- Hibernate3.3.2_ID生成策略
1,xml生成id generator:常用四个:native.identity.sequence.uuid. Annotation: 1,@GeneratedValue: a)自定义ID b)AUT ...
- DotNetCore跨平台~autofac属性的自动注入
回到目录 在使用autofac这个DI工具时,我们一般使用的是构造方法注入,而dotnetcore的标准框架里也集成了构造方法注入,而属性注入在一些场景下,表现的更为灵活,像java的spring框架 ...
- python-Event事件处理进程同步
#!/usr/bin/python from multiprocessing import Process,Event import os,time def A(e): print "blo ...
- JavaScript设计模式-3.原型模式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 计算2..n的素数
def check(2) , do: true def check(n) when n >2 do b = for x <- (Enum.into 2..n-1,[]),do: x if ...
- java 位运算符,逻辑运算符
逻辑运算符;布尔值时使用 a=true;b=false &: 逻辑或 例:a & b=false; |: 逻辑与 例:a | b=true; !:逻辑非 例:!a=fal ...