浅谈数据库的内链接与外连接

 

-------------------------------------------------
  a表     id   name        b表    id     job   parent_id   
              1   张三                  1     23     1   
              2   李四                 2     34     2   
              3   王五                 3     34     1      


--------------------------------------------------    

(图一:以下举得例子是以这个数据库表展开的)

 

 

(图二:为了更加清晰地表明内外连接所提供的)

 

 

 

1)内连接:内连接也叫连接,是最早的一种连接。还可以被称为普通连接或者自然连接,内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,所               以内连接可能会丢失信息。

         简单地说:内连接就是查找表与表中共有的部分,就相当于图二的中间的公共部分

         内连接:select a.*,b.* from a inner join b  on a.id=b.parent_id;

            结果是  

      1  张三  1  23  1

      1  张三  3  34  1

      2    李四  2  34   2

  

2)外连接:外连接分左连接与右连接两种

  a)左连接:左向外联接的结果集包括  LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹                     配行,则在相关联的结果集行中右表的所有选择列表列均为空值。相当于图二的中间部分,加上左边那部分

  关键的sql语句:LEFT  JOIN或LEFT OUTER JOIN

    例子:    select a.* , b.* from a left join b on a.id=b.parent_id;

         例子分析,执行上面的语句相当于先查询出a表,然后根据a表的id去与b表的parent_id匹配,不管有多少条匹配,都会一一列出来,就                           好比例子中,a表中id为1的,与b表中parent_id为1的,有两条数据匹配,所以两条都会列出来,如果a表中的id没有与b表中的                                   parent_id有所匹配,则会以null来b表的数据代替。   

        结果如下:

               1  张三    1  23  1

             1   张三         3    34     1

            2     李四         2    34     2

                             3     王五         null  null  null

 

  b)右连接:右连接是与左连接其实是一样的,只是左连接是以左表为标准,而右连接是以右表为准。其它的都是大同小异

      select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id       
      结果是     
      1   张三                   1     23     1   
      2   李四                  2     34     2   
      1   张三                  3     34     1  

 

 

 3) 完全连接   (MySQL不支持全外连接)

    FULL  JOIN 或 FULL OUTER JOIN
    完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,               则整个结果集行包含基表的数据值。 
      select   a.*,b.*   from   a   full   join   b     on   a.id=b.parent_id   
      结果是     
      1   张3                  1     23     1   

      1  张三        3   34     1
      2   李四                2      34     2   
      3   王武                 null null null

 

posted @ 2016-05-31 15:06  danyi  阅读(421)  评论(1)    收藏  举报