zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    With great power comes great responsibility
    2016年你应该学习的语言和框架
    箜篌长萧各一曲,月清淡似风人未眠。
    使用 RUP 管理小型项目和团队
    php文件加锁 lock_sh ,lock_ex
    PHP_EOL
    PHP输入流php://input介绍
    获取ip地址
    关键词拍卖和广义二阶拍卖(Internet Advertising and the Generalized Second-Price Auction译文)
    常用js选择
  • 原文地址:https://www.cnblogs.com/xiaozhi1236/p/5730459.html
Copyright © 2011-2022 走看看