cross apply 和 outer apply
使用APPLY运算符可以实现查询操作的外部表表达式返回的每个调用表值函数。表值函数作为右输入,外部表表达式作为左输入。
通过对右输入求值来获得左输入每一行的计算结果,生成的行被组合起来作为最终输出。APPLY 运算符生成的列的列表是左输入
中的列集,后跟右输入返回的列的列表。
APPLY存在两种形式: CROSS APPLY 和 OUTER APPLY .
CROSS APPLY 仅返回外部表中通过表值函数生成结果集的行。
OUTER APPLY 既返回生成结果集的行,又返回不生成结果集的行,其中表值函数生成的列中的值为NULL.
create table employee
(
emp_id int not null,
mgr_id int null,
emp_name varchar(20) not null,
emp_salary money not null,
constraint pk_id primary key(emp_id)
)
insert into employee select 1,null,'忘忘',4500
union all
select 2,1,'找找',2500
union all
select 3,2,'你会',3500
union all
select 4,3,'牛牛',1500
union all
select 5,4,'得到',500
union all
select 6,5,'爱的色放',300
union all
select 7,6,'爱上对方',1000
union all
select 8,4,'阿萨德',300
union all
select 9,8,'阿斯顿',1000
create table departments
(
dep_id int identity(1,1) primary key,
dep_name varchar(30) not null,
dep_m_id int null references employee(emp_id)
)
insert departments select '生成部门',2
union all
select '销售部门',7
union all
select '加工部门',8
union all
select '库存部门',9
union all
select '管理部门',4
union all
select '保卫部门',null
create function gtree
(
@emp_id int
)
returns @tree table
(
emp_id int not null,
emp_name varchar(20) not null,
mgr_id int null,
lvl int not null
)
as
begin
with emp_subtree(emp_id,emp_name,mgr_id,lvl)
as
(
select emp_id,emp_name,mgr_id,0 from employee where emp_id=@emp_id
union all
select e.emp_id,e.emp_name,e.mgr_id,es.lvl+1
from employee e join emp_subtree es on e.emp_id=es.emp_id
)
insert @tree select * from emp_subtree
return
end
select * from employee
select * from departments as a
cross apply
gtree(a.dep_m_id) as b
select * from departments as a
outer apply
gtree(a.dep_m_id) as b
cross apply 和 outer apply的更多相关文章
- SQL 关于apply的两种形式cross apply 和 outer apply(转)
转载链接:http://www.cnblogs.com/shuangnet/archive/2013/04/02/2995798.html apply有两种形式: cross apply 和 oute ...
- SQLServer count函数、cross apply和outer apply、
1.COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入)2.COUNT(*) 函数返回表中的记录数 select * from TABLE_1 T1 outer ap ...
- SQL 关于apply的两种形式cross apply 和 outer apply
SQL 关于apply的两种形式cross apply 和 outer apply 例子: CREATE TABLE [dbo].[Customers]( ) COLLATE Chinese_PRC_ ...
- SQL关于apply的两种形式cross apply和outer apply(转载)
SQL 关于apply的两种形式cross apply 和 outer apply apply有两种形式: cross apply 和 outer apply 先看看语法: <lef ...
- SqlSever 使用 CROSS APPLY 与 OUTER APPLY 连接查询
前言 日常开发中遇到多表查询时,首先会想到 INNER JOIN 或 LEFT OUTER JOIN 等等,但是这两种查询有时候不能满足需求.比如,左表一条关联右表多条记录时,我需要控制右表的某一条或 ...
- SQL Server连接查询之Cross Apply和Outer Apply的区别及用法(转载)
先简单了解下cross apply的语法以及会产生什么样的结果集吧!示例表: SELECT * FROM tableA CROSS APPLY tableB 两张表直接连接,不需要任何的关联条件,产生 ...
- 使用 CROSS APPLY 与 OUTER APPLY 连接查询
Ø 前言 日常开发中遇到多表查询时,首先会想到 INNER JOIN 或 LEFT OUTER JOIN 等等,但是这两种查询有时候不能满足需求.比如,左表一条关联右表多条记录时,我需要控制右表的某 ...
- CROSS APPLY和 OUTER APPLY
背景 好强大的sql,但是我好想真极少用过这两个函数,再次强调,不要总是用sql解决问题.让人欢喜让人悲的sql. -- cross applyselect * from TABLE_1 T1cr ...
- <转>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 Server 关于CROSS APPLY 和 OUTER APPLY应用
先看看语法: <left_table_expression> {cross|outer} apply<right_table_expression> 再让我们了解一下appl ...
随机推荐
- 多项式 Wannafly挑战赛22
后缀表达式 大整数(加法.乘法.gcd java) import java.math.BigInteger; import java.util.Scanner; class Work { String ...
- 从新浪JS服务器获得股票和股指深度行情(.NET)
当我们需要通过网络来自动获取股指或股票的深度行情时,一般有以下两种方法可以获得.目前除了使用Python进行爬虫获取(需要解析html获得)外还可以通过新浪提供的JS行情服务器获得,本文采用的是后者( ...
- P3572 [POI2014]PTA-Little Bird
P3572 [POI2014]PTA-Little Bird 一只鸟从1跳到n.从1开始,跳到比当前矮的不消耗体力,否则消耗一点体力,每次询问有一个步伐限制k,求每次最少耗费多少体力 很简短的题目哼. ...
- NP难问题
转自https://blog.csdn.net/u014295667/article/details/47090639 1.首先涉及到的基本概念有: (1)确定性算法(Determinism): 设A ...
- JS获取当前时间并格式化"yyyy-MM-dd HH:mm:ss"
先来看下JS中的日期操作: var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年 ...
- vue2.0实战记录
1. 初始化项目vue init webpack caseone cd caseonecnpm installcnpm install less less-loader -Dcnpm install ...
- oracle改进之将阿拉伯数字转换成中文数字
本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处 http://www.cnblogs.com/king-xg/p/6839738.html 将阿拉伯数字转 ...
- np.argsort函数
np.argsort函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me numpy.argsort(a, axis=-1, kind='quicksort', order=None) 功能: ...
- vue-router 实践
1. vue-router2学习实践笔记 2. router.push() 3. 使用vue-router跳转页面
- thinkphp 修改分页样式表
原网页:http://blog.csdn.net/u014175572/article/details/53116546 在这里我有先把page的设置做成了一个函数getpage, 将这个方法放到Ap ...