开发者社区> 问答> 正文

SQL Server的cross apply与inner join区别是什么?

cross apply ,好像也是用于内联接的啊。可是感觉没啥用。因为用join就可以直接代替了。请问大家是不是啊。如果不是,那又是为什么?

展开
收起
吴孟桥 2016-06-15 15:23:08 5476 0
2 条回答
写回答
取消 提交回答
  • 阿里云数据库专家,负责SQL Server数据库产品线。SQL Server从业10年,经历过SQL 2000、SQL 2005、SQL 2008、SQL 2008R2、SQL 2012、SQL 2014、SQL 2016和SQL on Linux各个版本。

    哎呀,当然替代不了啦。据一个简单的业务场景,比如有两个数据结果集1,和2,1结果集很小,2结果集很大。如果,让1和2在连接的时候,我只需要找到2中一个满足条件的纪录,就不用接着往下找,这一次连接循环退出。这种业务场景INNER JOIN很难实现,因为INNER JOIN必须要找到所有满足条件的纪录。例子如下:

    use tempdb
    GO
    
    ;WITH dataSet1
    AS( SELECT *    FROM (VALUES(0), (1), (2), (3), (4), (5), (6), (7), (8), (9)) AS T(C)
    ), dataSet2
    as(
    SELECT a = a.C, b = b.C, c = c.C, d = d.C
     FROM dataSet1 as a, dataSet1 as b, dataSet1 as c, dataSet1 as d
     )
     SELECT A.C, B.a
     FROM dataSet1 AS A
        CROSS APPLY(
            SELECT TOP 1 *
            FROM dataSet2 AS B
            WHERE B.a = A.C
        ) AS B

    Screen_Shot_2017_01_28_at_8_59_54_PM

    2019-07-17 19:39:24
    赞同 展开评论 打赏
  • cross apply是sql server 2005新增加的,最大的用处是和分组配合使用,比如说分组后每一组数据的排序和查询。

    2019-07-17 19:39:24
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载