APPLY
APPLY运算符把右表表达式应用左输入中的每一行。右表达式可以引用左输入中的列,对于左表中的每一行,都要计算一次右边输入中表达式。这一步会把左边每一行和来自右表表达式的相应行进行匹配,并将生成的结果集合并起来,返回组合后结果。
APPLY有两种类型:
1、CROSS APPLY 2、OUTER APPLY
两者的区别是如果内部(右)表表达式为外部(左)行返回的是空集,则CROSS APPLY不会返回该外部(左)行。而OUTER APPLY 会返回这样的行,对于内表表达式的属性,则使用NULL作为其占位符
举例 :
创建一个顾客 表和一个订单员
APPLY运算符把右表表达式应用左输入中的每一行。右表达式可以引用左输入中的列,对于左表中的每一行,都要计算一次右边输入中表达式。这一步会把左边每一行和来自右表表达式的相应行进行匹配,并将生成的结果集合并起来,返回组合后结果。
APPLY有两种类型:
1、CROSS APPLY 2、OUTER APPLY
两者的区别是如果内部(右)表表达式为外部(左)行返回的是空集,则CROSS APPLY不会返回该外部(左)行。而OUTER APPLY 会返回这样的行,对于内表表达式的属性,则使用NULL作为其占位符
举例 :
创建一个顾客 表和一个订单员
SET NOCOUNT ON; IF OBJECT_ID('dbo.Orders') IS NOT NULL DROP TABLE dbo.Orders; IF OBJECT_ID('dbo.Customers') IS NOT NULL DROP TABLE dbo.Customers; GO CREATE TABLE dbo.Customers ( customerid CHAR(5) NOT NULL PRIMARY KEY, city VARCHAR(10) NOT NULL ); CREATE TABLE dbo.Orders ( orderid INT NOT NULL PRIMARY KEY, customerid CHAR(5) NULL REFERENCES Customers(customerid) ); GO INSERT INTO dbo.Customers(customerid, city) VALUES('FISSA', 'Madrid'); INSERT INTO dbo.Customers(customerid, city) VALUES('FRNDO', 'Madrid'); INSERT INTO dbo.Customers(customerid, city) VALUES('KRLOS', 'Madrid'); INSERT INTO dbo.Customers(customerid, city) VALUES('MRPHS', 'Zion'); INSERT INTO dbo.Orders(orderid, customerid) VALUES(1, 'FRNDO'); INSERT INTO dbo.Orders(orderid, customerid) VALUES(2, 'FRNDO'); INSERT INTO dbo.Orders(orderid, customerid) VALUES(3, 'KRLOS'); INSERT INTO dbo.Orders(orderid, customerid) VALUES(4, 'KRLOS'); INSERT INTO dbo.Orders(orderid, customerid) VALUES(5, 'KRLOS'); INSERT INTO dbo.Orders(orderid, customerid) VALUES(6, 'MRPHS'); INSERT INTO dbo.Orders(orderid, customerid) VALUES(7, NULL); SELECT * FROM dbo.Customers; SELECT * FROM dbo.Orders; --要求查询为每个顾户返回具有最大订单ID的两个订单 -- Two most recent orders for each customer SELECT C.customerid, C.city, A.orderid FROM dbo.Customers AS C CROSS APPLY (SELECT TOP (2) O.orderid, O.customerid FROM dbo.Orders AS O WHERE O.customerid = C.customerid ORDER BY orderid DESC) AS A; -- Two most recent orders for each customer, -- including customers that made no orders SELECT C.customerid, C.city, A.orderid FROM dbo.Customers AS C OUTER APPLY (SELECT TOP (2) O.orderid, O.customerid FROM dbo.Orders AS O WHERE O.customerid = C.customerid ORDER BY orderid DESC) AS A;
发表评论
-
转:避免全表扫描的sql优化
2015-02-05 16:37 1278http://tech.diannaodian.com/dw/ ... -
给表加上聚集索引和非聚集索引
2014-12-11 17:28 652创建简单非聚集索引 以下示例为 Purchasing.Pro ... -
查看表中索引语句
2014-12-11 10:37 641SELECT object_name(object_id) ... -
SQL2008一行转多行的精典写法
2013-08-28 12:06 382--创建测试表 create table t1( id ... -
在sql server中利用with as实现递归功能
2013-06-25 10:48 496在sqlserver2005之前,要实现递归功能比较麻烦,比如 ... -
SQL 2005 with(nolock)详解
2013-06-17 17:03 555大家在写查询时, ... -
用SQL语句查询每门成绩都大于80的学生姓名
2013-05-29 10:39 1679昨天遇到的一个SQL面试题,感觉很有趣。 表名stu 结构 ... -
SqlServer强制断开数据库已有连接的方法
2013-02-22 11:03 1593在master数据库中执行如下代码 declare @i IN ... -
Sql获取第一天、最后一天
2013-01-03 14:56 9603① 本月第一天(--减去今天再加上1天) SELECT DAT ... -
表函数与游标
2012-12-25 16:07 707--建立数据源 create table tb1(zm ch ... -
sql server 2005 输出表的函數用法
2012-12-25 16:02 801view sourceprint? 01 --sql ser ... -
SQL杂谈
2012-12-14 17:33 6721、如何用convert什么的把带有时分秒的日期转为时分秒都0 ... -
用FOR XML PATH将查询结果以XML输出
2012-09-20 17:54 1001本文从此而来 http://www.cnblogs.com/d ... -
left join on and
2012-09-20 10:23 840数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临 ... -
筛选索引简单使用
2012-08-17 11:29 1112对于在强制实施数据完整性时的一种常见需求,也可以用筛选索引来解 ... -
排名函数(ROW_NUMBER、RANK、DENSE_RANK)及OVER子句
2012-08-10 10:36 6587--在部门内新水排名(如果有相同名次,用dense_rank) ... -
SQL SERVER 中行列转换 PIVOT UNPIVO
2012-08-18 15:34 2289PIVOT用于将列值旋转为列名、同时执行聚合运算(即行转列), ... -
SQL Server 2008语句大全完整版
2012-08-09 10:39 1356--======================== ... -
Not Exists练习
2012-07-23 14:40 852IF OBJECT_ID(N'a') IS NOT NU ... -
Exists练习查找最小缺失值(Missing Value)
2012-07-17 09:34 949第一种方法 USE tempdb; GO IF OBJE ...
相关推荐
作用都是一样的,简单来说就是改变当前使用该方法的对象中的this指向,指向调用方法中的thisObj对象二者的区别(第一个参数是相同的)就是call方法中传入的参数是是一个个列举出来的,而apply方法中的参数二是一个...
使用jquery实现ajax同样异常简单 代码 (1) $.get("search. do",{id:1},rend); function rend(xml){ alert(xml); } (2) $.post("search. do",{id:1},rend); function rend(xml){ alert(xml); } (3) $...
另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法 第1步:申请授权KEY 本插件采用...
另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法 第1步:申请授权KEY 本插件采用...
另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法 第1步:申请授权KEY 本插件采用...
另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法 第1步:申请授权KEY 本插件采用...
另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法 第1步:申请授权KEY 本插件采用...
另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! ECSHOP快递物流单号查询插件安装方法 第1步:申请...
另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法 第1步:申请授权KEY 本插件采用...
另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法 第1步:申请授权KEY 本插件采用...
另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法 第1步:申请授权KEY 本插件采用...
另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法 第1步:申请授权KEY 本插件采用...
另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法 第1步:申请授权KEY 本插件采用...
实现JavaScript继承的最简单的方式是call方法(或者apply方法)及原型链方法,但这两种方法都有缺陷,而其混合体就是很好的继承实现方式。下面举例说明: 代码如下: function Animal(age){ this.age = age; } ...
11.7.2 内建函数apply().cfilter().cmap().creduce() 11.7.3 偏函数应用 11.8 变量作用域 11.8.1 全局变量与局部变量 11.8.2 globa语句 11.8.3 作用域的数字 11.8.4 闭包...
11.7.2 内建函数apply()、filter()、map()、reduce() 11.7.3 偏函数应用 11.8 变量作用域 11.8.1 全局变量与局部变量 11.8.2 globa语句 11.8.3 作用域的数字 11.8.4 闭包...
比如一个路由器只有一个用于终端连接的端口(当然这种情况基本不可能发生,只不过简化举例),这个端口被分配了192.168.1.1/24的地址。然而由于公司有两个部门,一个销售部,一个企划部,每个部门要求单独成为一个...