SQL Server基础:Apply关键字用法介绍

数据库 SQL Server
APPLy关键字是SQLServer版本中开始提供的一个系统关键字。APPLY的功能同联接很类似,APPLY运算分左右两个部分.

[[393784]]

1、概念介绍

APPLy关键字是SQLServer版本中开始提供的一个系统关键字。

APPLY的功能同联接很类似,APPLY运算分左右两个部分,

APPLY的右表达式:左表达式的每一行都和右表达式进行一次计算,即右表达式需要根据左表达式提供的值进行相关计算来获取相关结果,然后返回给客户端。

APPLY的右表达式:是一个子查询或表值函数。

2、APPLY运算符和联接查询区别

APPLY:先进行左表达式的数据获取,然后根据左表达式的记录依次对右表达式的值进行相关获取。

联接:先对左右两张表进行笛卡尔乘积运算。

3、APPLY运算符的语法格式

CROSS APPLY:内部联接,两张表直接连接,不需要任何的关联条件,产生的结果就是这两张表的笛卡儿集等价于CROSS JOIN;

CROSS Apply 和 CROSS JOIN的区别:Cross Apply 可以在关联表子查询中用前一个关联表的字段的值,CROSS JOIN不可以。

比如:

  1. SELECT * FROM t1 a CROSS APPLY t2 b WHERE a.id=b.id  
  2. --相当于 inner join  
  3. SELECT * FROM t1 a CROSS JOIN t2 b WHERE a.id=b.id --报错 

OUTER APPLY:左外联接,右侧的表表达式返回一个空集合,CROSS APPLY运算符不会返回相应的左侧行,即OUTER APPLY和在派生表上进行LEFT JOIN是等同的

  1. SELECT * FROM t1 a OUTER APPLY (select * from t2 where id=a.id) b  
  2. -- 相当于 left join。 

4、Cross Apply 用途

4.1 配合表值函数使用

如果查询结果集需要用到表值函数对某个字段的值进行处理的话,可以使用CROSS APPLY。

4.2 top子查询的用法

-- 查询语文第一名,数学前两名,英语前五名的name,学科,分数,用cross apply实现方法如下

  1. SELECT b.* FROM ( 
  2. select Subject='Chiness',num=1  
  3. union all 
  4. select 'Math',3 union all 
  5. select 'English',5 
  6. )a cross apply (select top(a.num) * from Students  
  7. where Subject=a.Subject )b 

 

责任编辑:姜华 来源: IT技术分享社区
相关推荐

2021-10-13 06:49:13

SQL Server优化

2011-06-21 09:50:51

volatile

2010-07-23 14:32:43

SQL Server

2010-11-12 14:49:28

SQL Server外

2009-08-21 14:58:56

C# this关键字

2009-12-17 13:57:15

Ruby关键字

2011-02-25 14:42:10

SQLwith关键字

2023-11-10 09:29:30

MySQLExplain

2011-06-27 15:08:15

SEO

2009-09-07 18:53:46

static关键字

2010-05-10 11:16:14

Oracle ESCA

2022-01-04 16:35:42

C++Protected关键字

2009-09-17 09:30:00

Linq LET关键字

2009-09-02 09:24:03

C# this关键字

2012-03-01 12:50:03

Java

2018-04-20 15:56:09

Pythonglobal关键字

2013-01-30 10:12:14

Pythonyield

2009-08-13 09:49:16

C#关键字

2021-08-26 09:50:06

鸿蒙HarmonyOS应用

2021-04-21 07:17:16

SQLServer数据库SQL
点赞
收藏

51CTO技术栈公众号