zoukankan      html  css  js  c++  java
  • sql server join ,inner join ,left join ,right join 的使用

    测试数据脚本

    复制代码
    CREATE TABLE Atable
      ( 
         S#    INT, 
         Sname nvarchar(32), 
         Sage  INT, 
         Sfrom  nvarchar(8) 
      ) 
    
    
     insert into Atable 
     select 1,N'李四',18,N'A' union all
     select 2,N'tom',19, N'A' union all
     select 3,N'刘一',17,N'A' union all
     select 4,N'jack',18,N'A'
    
     
    
     CREATE TABLE Btable
      ( 
         S#    INT, 
         Sname nvarchar(32), 
         Sage  INT, 
         Sfrom  nvarchar(8) 
      ) 
    
    
     insert into Btable
     select 1,N'刘一',18,N'B' union all
     select 2,N'钱二',19,N'B' union all
     select 3,N'张三',17,N'B' union all
     select 4,N'李四',18,N'B'
    复制代码

    数据表

    Join(麻蛋  废话不多说 有图有真相)

    1.cross join

      交叉连接不需要任何连接条件。两个表的的数据直接进行笛卡尔积运算。如果一个表有m行,而另一个表有n行,将得到m*n的结果集。

    1
    SELECT FROM Atable as A  cross join Btable as order by A.S#

    2.inner join == join

      内连接的功能是,把两个表相关联的记录列出来,必须是相关联的记录。

      对两个输入表进行笛卡尔积,然后根据指定的谓词对结果行进行过滤。

    怎么理解内联接:

      理解内联接最容易的方法是认为A表中每一行同C表中的所有行进行比较,如果A表中的idC表中的id相等,则匹配成功。

      另外一种更正式的方法是在关系代数的基础上来考虑内联接,联接运算首先对两个表求笛卡尔积(4A记录*5C记录=20行记录),然后根据条件C.id=A.id对行进行过滤,最终返回16行。

    1
    SELECT FROM Atable as A  INNER JOIN Btable as ON A.Sname = B.Sname

    3.left outer join == left join

      产生表B的完全集,而A表中匹配的则有值,没有匹配的则以null值取代。

    1
    SELECT FROM Atable as left outer join Btable as ON A.Sname = B.Sname

    4.right outer join == right jion

      产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。

    1
    SELECT FROM Atable as right outer join Btable as ON A.Sname = B.Sname

    5.full outer  join  == full join  

      产生A和B的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。

    1
    SELECT FROM Atable as full join Btable as ON A.Sname = B.Sname

    6.union与union all

      区别就是联合查询的时候union会去重,union all不会去重

    1
    通过UNION运算符来将两张表纵向联接,基本方式为:
    1
    2
    3
    4
    5
    6
    7
    SELECT 列1 , 列2 FROM 表1
    UNION
    SELECT 列3 , 列4 FROM 表2;
    UNION ALL为保留重复行:
    SELECT 列1 , 列2 FROM 表1
    UNION ALL
    SELECT 列3 , 列4 FROM 表2;
    1
    2
    SELECT Sname FROM Atable  UNION  SELECT Sname FROM  Btable 
    SELECT Sname FROM Atable  UNION ALL SELECT Sname FROM  Btable 

    自交叉联接

      对同一个表进行联接,就是自联接。交叉联接、内联接、外联接都支持自联接。

    SELECT A1.a,A2.a FROM A AS A1 CROSS JOIN A AS A2

      A表有4行,查询会生成一个包含4*4=16行的数据的结果集。

      在自联接中,必须为表起别名。如果不为表指定别名,联接结果中的列名就会有歧义。

      比如在本例中,别名为A1,A2

    小结

  • 相关阅读:
    扩展方法的定义及使用
    HTTP协议及POST与GET操作差异,C#中如何使用POST、GET等
    C#多线程学习(三) 生产者和消费者
    .NET设计模式(18):迭代器模式(Iterator Pattern)
    Net设计模式实例之备忘录模式(Memento Pattern)
    安装中文VS2008 SP1 和.NETFRAMEWORK 3.5SP1后智能提示是英文的解决办法
    ASP.NET MVC 入门系列教程
    在ASP.NET MVC中使用DropDownList
    .NET设计模式(2):单件模式(Singleton Pattern)
    想要成功,请记住!
  • 原文地址:https://www.cnblogs.com/baili-luoyun/p/11132004.html
Copyright © 2011-2022 走看看