• SQL联接查询


    1、内联接(inner join)。

    内联接,显示连接表都有的记录,并按最多记录子表显示最终结果。

    1 select * from table1 a
    2 inner join table2 b on a.Id = b.Id
    3 where a.field...

    2、外联接(outer join)。

    外联接,又分为左联接(left join)和右联接(right join),显示主表所有记录,而子没有相关记录部分返回‘NULL’。outer join默认为左联接。

    1 select * from table1 a
    2 left join table2 b on a.Id = b.Id   --显示table1的所有记录,table2不存在记录部分返回NULL
    3 
    4 select * from table1 a
    5 right join table2 b on a.Id = b.Id --显示table2的所有记录,table1不存在记录部分返回NULL 

    如果我们把两表的所有记录都显示出来,以查看哪些表不存在记录,可以使用完整外部联接(full outer join)。

    1 select * from table1 a
    2 full outer join table2 b on a.Id = b.Id --返回两表的所有记录,两表互不存在的记录部分返回Null 

    联接类型

    保留数据行

    A left outer join B

    all A rows

    A right outer join B

    all B rows

    A full outer join B

    all A and B rows

    3、交叉联接(Cross join)。

    返回两个表的笛卡尔积(M * N 行记录)。效率低下,使用范围小。

    1 select * from table1
    2 cross join table2

    4、表值内联(Cross apply)。

    其实跟inner join差不多,只不过联接部分是function返回值的集合。

     1 CREATE FUNCTION dbo.fn_Apply(@sID int)
     2 RETURNS @Apply TABLE (cName nvarchar(50), major nvarchar(50))
     3 AS
     4 BEGIN
     5   INSERT @Apply SELECT cName, major FROM Apply where [sID] = @sID
     6   RETURN    
     7 END
     8  
     9 ---- Student cross apply function fn_Apply.
    10 SELECT Student.sName, Student.GPA, Student.sizeHS,
    11 cName, major 
    12 FROM Student CROSS APPLY dbo.fn_Apply([sID])

    5、表值外联(Outer apply)。

    跟outer join差不多,跟cross apply差不多。

    1 SELECT Student.sName, Student.GPA, Student.sizeHS,
    2 cName, major 
    3 FROM Student OUTER APPLY dbo.fn_Apply([sID])

     

  • 相关阅读:
    易飞审核接口下载
    易飞ERP和钉钉办公集成——ERP移动审批解决方案
    Delphi XE----Rtti单元一(TRttiContext)
    Delphi XE
    Delphi XE
    Delphi XE -TCharHelper
    多线程编程
    bacula自动恢复测试脚本
    Bacula监控设置告警Zabbix篇
    Bacula监控设置邮件告警Message篇
  • 原文地址:https://www.cnblogs.com/Jinnchu/p/2668246.html
Copyright © 2020-2023  润新知