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是用 ...
随机推荐
- 架构师养成记--29.redis开篇
主要有从下几点讲解 NOSQL(Redis) 简介.redis安装与部署 Redis基础事件类型详解 Redis高级命令 Redis与java的使用 Redis集群搭建 Redis集群与spring的 ...
- 开发基于vue前端框架下的系统的UI自动化,记录总结踩的坑
在使用了pytest完成了一个系统的UI自动化后,因为系统的前端框架,是 基于VUE写的,这就让我编写脚本的时候踩了些坑. 无法用JS 修改标签属性,从而进行的操作 比如上传图片,我们的上传是这样子的 ...
- (转)rsync+inotify实时同步
原文:http://lxw66.blog.51cto.com/5547576/1331048 声明:rsync inotify 需要逆向思考,当只做rsync不实时同步时,我们一般是从rsync服务端 ...
- 菜单根据菜单ID向下递归
第一步:我们根据这个类定义数据库,并插入菜单数据 DROP TABLE IF EXISTS `jrbac_menu`; CREATE TABLE `jrbac_menu` ( `id` ) NOT N ...
- JavaScript设计模式-7.单例模式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Django时间与时区设置问题
在Django的配置文件settings.py中,有两个配置参数是跟时间与时区有关的,分别是TIME_ZONE和USE_TZ 如果USE_TZ设置为True时,Django会使用系统默认设置的时区,即 ...
- master线程的主循环,后台循环,刷新循环,暂停循环
InnoDB存储引擎的主要工作都是在一个单独的后台线程master thread中完成的.master thread的线程优先级别最高.其内部由几个循环(loop)组成:主循环(loop).后台循环( ...
- Linux Directory Structure
Note: Files are grouped according to purpose. Ex: commands, data files, documentation. Parts of a Un ...
- background-position 详解
一.语法 语法:background-position:x, y; 定义:背景图片相对容器原点的起始位置: 取值: 关键字:top | center | bottom | left | cen ...
- [PY3]——内置数据结构(1)——列表及其常用操作
列表及其常用操作_xmind图 about列表 列表是一个序列,用于顺序存储数据 列表分为两种:ArrayList(用数组实现).LinkedList(用链表实现) 定义与初始化 #l ...