今天写程序,碰到了关于数据库的连接问题。所以决定,争取搞定它。。。
查了查网上高手的解释。。。然后结合自己的运行结果。。。貌似自己有点开悟了。。。

SQL语句中有关的连接主要有: 外连接、内链接、全连接。
1、外连接  又分为: 左外连接、右外连接、完整外部联接。。。

LEFT   JOIN   或   LEFT   OUTER   JOIN。  
左向外联接的结果集包括   LEFT   OUTER   子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

RIGHT   JOIN   或   RIGHT   OUTER   JOIN。  
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

FULL   JOIN   或   FULL   OUTER   JOIN。  
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

INNER  JOIN
内连接为 两个表中必须都同时满足条件时,也可以说是两个表中都必须在另一个表中有对应的项,而不能为空。才返回该行。。。

CROSS  JOIN
其实对 交叉连接 还是不太明白,,,只知道 没有 where 字句的交叉连接相当于 笛卡尔积。交叉连接 后面只能接  where  字句,不能接  on  。。。

没有左内连接、右内连接。

个人理解 : 左外连接、右外连接中的 左 、 右 是说的 以哪个表为准。
            外连接、内连接中的  外、 内  是说的 是否去掉 null列。。。
                即外连接  不去掉空列。。。内连接去掉空列。。。

下面是  copy  的例子:
例子:  
  a表     id   name     b表     id   job   parent_id  
              1   张3                   1     23     1  
              2   李四                 2     34     2  
              3   王武                 3     34     4  
   
  a.id同parent_id   存在
关系  
   
  内连接  
  select   a.*,b.*   from   a   inner   join   b     on   a.id=b.parent_id  
   
  结果是    
  1   张3                   1     23     1  
  2   李四                2     34     2  
   
  左连接   
  select   a.*,b.*   from   a   left   join   b     on   a.id=b.parent_id  
   
  结果是    
  1   张3                   1     23     1  
  2   李四                 2     34     2  
  3   王武                 null   

  右连接  
  select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id  
   
  结果是    
  1   张3                   1     23     1  
  2   李四                 2     34     2  
  null                 3     34     4  
   
  完全连接   
  select   a.*,b.*   from   a   full   join   b     on   a.id=b.parent_id   

  结果是    
  1   张3                   1     23     1  
  2   李四                 2     34     2  
  null                 3     34     4  
  3   王武                 null