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的更多相关文章

  1. SQL Server outer apply 和 cross apply

    先说点题外话,因为后面我会用到这个函数. 前两天自定义了一个 sql 的字符串分割函数(Split),不过后来发现有点问题,例如: select * from Split(default,'123,4 ...

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

    MERGE INTO 语法: MERGE INTO table_name alias1 USING (table|view|sub_query) alias2ON (join condition) W ...

  3. sql的OUTER APPLY

    今天写一个查询sql,其中涉及到一个银行卡绑定表(表名:BankBind),我要将这个表的开户行字段的值进行分割出省份.支行, 这个开户行字段存储的值如“广东省广东省分行江门市分行恩平市支行”.“招商 ...

  4. sql server cross/outer apply 用法

    这是 sql server 帮助文档关于apply的描述: 使用 APPLY 运算符(2005或以上版本)可以为实现查询操作的外部表表达式返回的每个行调用表值函数.表值函数作为右输入,外部表表达式作为 ...

  5. SQL Server Cross/Outer Apply

    SQL Server2005引入了APPLY运算符,它非常像连接子句,它允许两个表达式直接进行连接,即将左/外部表达式和右/内部表达式连接起来. CROSS APPLY(类比inner join)和O ...

  6. SQL 关于apply的两种形式cross apply 和 outer apply(转)

    转载链接:http://www.cnblogs.com/shuangnet/archive/2013/04/02/2995798.html apply有两种形式: cross apply 和 oute ...

  7. SQL关于apply的两种形式cross apply和outer apply(转载)

    SQL 关于apply的两种形式cross apply 和 outer apply   apply有两种形式: cross apply 和 outer apply   先看看语法:   <lef ...

  8. <转>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 ...

  9. 转:SQL 关于apply的两种形式cross apply 和 outer apply

    原文地址:http://www.cnblogs.com/Leo_wl/archive/2013/04/02/2997012.html SQL 关于apply的两种形式cross apply 和 out ...

  10. SQL Server中CROSS APPLY和OUTER APPLY应用

    1.什么是Cross Apply和Outer Apply ? 我们知道SQL Server 2000中有Cross Join用于交叉联接的.实际上增加Cross Apply和Outer Apply是用 ...

随机推荐

  1. hibernate调用mysql自己手动创建函数报错

    split为自己手动在mysql中创建的函数,在hibernate调用时出错,解决方案如下: jdbc调用可以.不用改hibernate的方言. 正常的为:

  2. 插播一条 QQ头像无法正常显示问题

    问题背景 不知道啥什么,QQ群的头像有些显示不全直接是默认的头像.想一想最近也没做啥,怎么就出问题了. 后来想一想,大概是个人文件夹的文件出问题了 解决办法 好友头像显示问题的删除 MiscHead. ...

  3. (转)OpenStack —— 原理架构介绍(一、二)

    原文:http://blog.51cto.com/wzlinux/1961337 http://blog.51cto.com/wzlinux/category18.html-------------O ...

  4. PHP 浮点数 转化 整数方法对比 ceil,floor,round,intval,number_format

    ceil,floor,round,intval,number_format - 执行1000W此效率对比 Header("Content-Type:text/html;charset=utf ...

  5. Oracle练习笔记

    1 基本查询 SQL> --当前用户 SQL> show user USER 为 "SCOTT" SQL> --当前用户下的表 SQL> select * ...

  6. linux下的grep命令

    grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正 ...

  7. SharePoint如何创建能够继承站点左面导航(Left Navigation)的Web Part页面

    转自:http://social.msdn.microsoft.com/Forums/zh-CN/b069e6f8-e4d5-4bf3-93a1-4eecb55489d6/sharepointleft ...

  8. 【Chat】实验 -- 实现 C/C++下TCP, 服务器/客户端 "多人聊天室"

    本次实验利用TCP/IP, 语言环境为 C/C++ 利用套接字Socket编程,以及线程处理, 实现Server/CLient 之间多人的聊天系统的基本功能. 结果大致如: 下面贴上代码(参考参考.. ...

  9. ORCLE报错解决(ora-01747:无效的用户.表.列,表.列)

    原因: 这个问题出现是因为表中存在关键字造成.

  10. PL/SQL之游标的使用

    Oracle中的游标有两种: 显式游标 用CURSOR...IS 命令定义的游标,它可以对查询语句(SELECT)返回的多条记录进行处理. 隐式游标 是在执行插入(INSERT).删除(DELETE) ...