当前位置: 首页 > 科技观察

SQLServer基础:Apply关键字用法介绍

时间:2023-03-16 14:57:15 科技观察

1.概念介绍APPLy关键字是从SQLServer版本开始提供的系统关键字。APPLY的功能与join非常相似。APPLY操作分为左右两部分。APPLY的右表达式:左表达式的每一行都用右表达式计算一次,即右表达式需要根据左表达式提供的值进行计算。通过相关计算得到相关结果,然后返回给客户端。APPLY:的正确表达式是子查询或表值函数。2、APPLY运算符和连接查询APPLY的区别:先获取左边表达式的数据,然后根据左边表达式的记录依次获取右边表达式的值。Join:先对左右表进行笛卡尔积运算。3、APPLY运算符的语法格式为CROSSAPPLY:innerjoin,两张表直接相连,没有任何关联条件,其结果是这两张表的笛卡尔集等价于CROSSJOIN;CROSSApply和CROSSJOIN的区别:CrossApply可以在关联表的子查询中使用上一个关联表的字段的值,而CROSSJOIN不能。例如:SELECT*FROMt1aCROSSAPPLYt2bWHEREa.id=b.id--等价于innerjoinSELECT*FROMt1aCROSSJOINt2bWHEREa.id=b.id--errorOUTERAPPLY:leftouterjoin,右边的表表达式返回空集合,CROSSAPPLY运算符不会返回对应的左行,即派生表上的OUTERAPPLY和LEFTJOIN等同于SELECT*FROMt1aOUTERAPPLY(select*fromt2whereid=a.id)b--等同于leftjoin。4.CrossApply的使用4.1与表值函数一起使用如果查询结果集需要使用表值函数来处理某个字段的值,可以使用CROSSAPPLY。4.2top子查询的用法——查询语文第一名、数学前二名、英语前五名的姓名、科目、成绩。crossapply的实现方法如下SELECTb.*FROM(selectSubject='Chiness',num=1unionallselect'Math',3unionallselect'English',5)acrossapply(selecttop(a.num)*fromStudentswhereSubject=a.Subject)b