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)
  • 相关阅读:
    日常
    hdoj 5690 All X (快速幂+取模)
    hdoj 4004 The Frog's Games(二分)
    Mac androidStudio cannot resolve corresponding JNI function
    Mac 切换JDK版本
    MAC系统 如何显示隐藏的文件(文件夹)
    C 读写文件以及简单的文件加密
    C 双向链表的简单排序实现
    Android ViewDragHelper详解
    android Toast的内容过长,如何居中显示?
  • 原文地址:https://www.cnblogs.com/xiaozhi1236/p/5730459.html
Copyright © 2011-2022 走看看