当前位置:  首页  >  PHP教程  >  PHP 应用  >  知识库

SQL关于apply的两种形式crossapply和outerapply

SQL关于apply的两种形式crossapply和outerapplyapply有两种形式:crossapply和outerapply先看看语法:left_table_expression{cross|outer}applyright_table_expression再让我们了解一下apply运算涉及的两个步骤:A1:把右表表达式(right_

SQL 关于apply的两种形式cross apply 和 outer apply apply有两种形式: cross apply 和 outer apply 先看看语法: left_table_expression {cross|outer} apply right_table_expression 再让我们了解一下apply运算涉及的两个步骤: A1 :把右表表达式( right_

SQL 关于apply的两种形式cross apply 和 outer apply

apply有两种形式: cross apply 和 outer apply

先看看语法:

   {cross|outer} apply

再让我们了解一下apply运算涉及的两个步骤:

  • A1:把右表表达式()应用到左表()输入的行;
  • A2:添加外部行;
  •   使用apply就像是先计算左输入,让后为左输入中的每一行计算一次右输入。(这一句很重要,可能会不理解,但要先记住,后面会有详细的说明)

    最后结合以上两个步骤说明cross apply和outer apply的区别:

      cross apply和outer apply 总?#21069;?#21547;步骤A1,只有outer apply包含步骤A2如果cross apply左行应用右表表达式时返回空积,则不返回该?#23567;?#32780;outer apply返回改行,并且改行的右表表达式的属性为null。

    看到上面的解释或步骤大家可能还是一头的雾水,不知所云。下面用例子来说明:

    , city -- 所在城市):

    .( (5) COLLATE Chinese_PRC_CI_AS NOT NULL, (10) COLLATE Chinese_PRC_CI_AS NOT NULL, ( ) )

    向表一插入数据:

    ,); ,); ,); ,);

    查询所插入的数据:

    dbo.Customers

    结果如图:

    再建表二([dbo].[Orders] 字段说明:orderid -- 订单id , customerid -- 消费者id):

    .( , (5) COLLATE Chinese_PRC_CI_AS NULL, ( ) )

    向表二插入数据:

    ); ); ); ); ); ); insert into dbo.Orders values(7,null);

    查询插入的数据:

    dbo.orders

    结果如图:

    例子:题目:得到每个消费者最新的两个订单:

    用cross apply

    sql:

    dbo.Customers as C cross apply (dbo.Orders as O where C.customerid=O.customerid order by orderid desc) as CA

    结果如图:

    过程分析:

      它是先得出左表【dbo.Customers】里的数据,然后把此数据一条一条的放入右表表式中,分别得出结果集,最后把结果集整?#31995;?#19968;起就是最终的返回结果集了(T1的数据 像for循环一样 一条一条的进入到T2中 然后返回一个集合 最后把所有的集合整?#31995;?#19968;块 就是最终的结果),网站空间,最后我们再理解一下上面让记着的话(使用apply就像是先计算左输入,让后为左输入中的每一行计算一次右输入)是不是有所明白了。

    实验:用outer apply 试试看看的到的结果:

    sql语句:

    dbo.Customers as C outer apply (dbo.Orders as O where C.customerid=O.customerid order by orderid desc) as CA

    结果如图:

    结果分析:

      发现outer apply得到的结果比cross多了一行,我们结合上面所写的区别(cross apply和outer apply 总?#21069;?#21547;步骤A1,虚拟主机,只有outer apply包含步骤A2如果cross apply左行应用右表表达式时返回空积,则不返回该?#23567;?#32780;outer apply返回改行,并且改行的右表表达式的属性为null)就会知道了。

    ,香港虚拟主机
    吐了个 "CAO" !
    扫码关注 PHP1 官方微信号
    PHP1.CN | 中国最专业的PHP?#24418;?#31038;区 | PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | PHP问答
    Copyright ? 1998 - 2020 PHP1.CN. All Rights Reserved PHP1.CN 第一PHP社区 版权所有
         
    28玩法
    澳洲幸运10怎么玩 新疆时时彩三星走势图 辽宁35选七的走势图 上海时时彩统计图 辽宁11选5前三组选走势图 3月14双色球号码查询 3d走势图网易彩票 福彩时时彩三星基本走势图 吉林快三开奖结果一定的 浙江体彩11选五 新疆福彩18选7微信群 中福彩 打开河南十一选五 快乐十分三胆全拖金额 快彩乐老11选5遗漏