• SQLSERVER表联结(INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN,CROSS JOIN,CROSS APPLY,OUTER APPLY)


    1 常用表联结(inner join,left join,right join,full join,cross join)

    if object_id(N'table1',N'U') is not null
        drop table table1
    if object_id(N'table2',N'U') is not null
        drop table table2
    create table table1(id int,name varchar(20))
    insert into table1
    select 1,'小明' union all
    select 2,'小李' union all
    select 3,'小陈' union all
    select 4,'小吴'
    
    create table table2(id int,age int)
    insert into table2
    select 1,23 union all
    select 2,24 union all
    select 3,25 union all
    select 5,26
    --连接举例
    --,
    select a.*,b.* from table1 a,table2 b where b.id = a.id
    --cross join 交叉联接(注:cross join后加条件只能用where,不能用on)
    select * from table1 a cross join table2 b where b.id = a.id
    --inner join 内连接
    select * from table1 a inner join table2 b on b.id = a.id
    --left join 左外连接
    select * from table1 a left join table2 b on b.id = a.id
    --right join 右外连接
    select * from table1 a right join table2 b on b.id = a.id
    --full join 全外连接
    select * from table1 a full join table2 b on b.id = a.id
    
    --以下两个语句,效果相同
    select * from table1 cross join table2
    select * from table1,table2
    
    --以下三个语句,效果相同
    select * from table1 a,table2 b where b.id = a.id
    select * from table1 a cross join table2 b where b.id = a.id
    select * from table1 a inner join table2 b on b.id = a.id

    2 cross apply,outer apply

    (cross apply,outer apply 是SQL Server 2005 新增的)

    SQL Server 2000 中有个 cross join 是用于交叉连接。

    增加 cross apply 和 outer apply 是用于交叉连接表值函数。

    APPLY 的两种形式:CROSS APPLY 和 OUTER APPLY。

    CROSS APPLY 仅返回外部表中通过表值函数生成结果集的行。

    OUTER APPLY 既返回生成结果集的行,也返回不生成结果集的行,其中表值函数生成的列中的值为 NULL。

    --创建表值函数 FN_TableValue
    IF object_id(N'FN_TableValue',N'TF') IS NOT NULL
    DROP FUNCTION FN_TableValue
    GO
    create function FN_TableValue(@id varchar(100))
    returns @a TABLE (
        id int,
        name varchar(10) NULL
    )
    AS begin
    insert into @a
    select * from table2 where id = @id
    return
    end
    go
    
    --cross apply
    select *
    from table1 t1
    cross apply (SELECT 1 id,'test1' name UNION ALL SELECT 2,'test2') t2
    where t1.id= t2.id
    
    select * from table1
    select *
    from table1 T1
    cross apply FN_TableValue(T1.id)
    
    --outer apply
    select *
    from table1 T1
    outer apply FN_TableValue(T1.id)
  • 相关阅读:
    springboot与docker
    Docker入门笔记(Centos7)
    记录VUE-CLI项目创建及初始化相关
    centos下安装mysql5.6
    GitLab权限介绍
    属性文件操作之Properties与ResourceBundle
    Shell入门基础
    JavaScript基础的记录
    Java基本排序算法
    解读闭包,这次从ECMAScript词法环境,执行上下文说起
  • 原文地址:https://www.cnblogs.com/xiaozhi1236/p/5730459.html
Copyright © 2020-2023  润新知