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是用 ...
随机推荐
- js 的概念和声明-js 的变量-js 的运算符和逻辑结构-js 的数组
js 的概念和声明Js的概念和声明:问题:在网页的发展历程中,发现网页不能对用户的数据进行自动校验,和提供一些特效造成用户体验极差解决:使用JavaScript作用:可以让网页和用户之间进行直接简单的 ...
- 【算法笔记】A1039 Course List for Student
https://pintia.cn/problem-sets/994805342720868352/problems/994805447855292416 题意: 有N个学生,K节课.给出选择每门课的 ...
- 平衡树 替罪羊树(Scapegoat Tree)
替罪羊树(Scapegoat Tree) 入门模板题 洛谷oj P3369 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入xx数 删除xx数(若有多个相同 ...
- 语言模型预训练方法(ELMo、GPT和BERT)——自然语言处理(NLP)
1. 引言 在介绍论文之前,我将先简单介绍一些相关背景知识.首先是语言模型(Language Model),语言模型简单来说就是一串词序列的概率分布.具体来说,语言模型的作用是为一个长度为m的文本确定 ...
- Mac下Go2Shell打开配置界面
open -a Go2Shell --args config
- 自定义类型转换器之TypeConverter
C#提供了很多类型转换的方法如ConvertToInt.int.Parse.int.tryParse等等,这些方法都能将一个C#的基本数据类型转换成另一个C#基本数据类型.那么.既然如此,C#肯定会提 ...
- php在单个文件内开启dbug
1.在文件开头添加如下代码 ini_set('display_errors', true); error_reporting(E_ALL);
- StackMapTable属性说明
(1)StackMapTable属性的说明 https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.4 (2)S ...
- java算法----------二叉树的遍历
二叉树的遍历分为前序.中序.后序和层序遍历四种方式 首先先定义一个二叉树的节点 //二叉树节点 public class BinaryTreeNode { private int data; priv ...
- js Array vs [],以及是否为空的判断
两者基本相同,唯一不同点在于初始化: var a = [], // these are the same b = new Array(), // a and b are arrays with len ...