摘要:数据库的连接包括内连接,外连接,自然连接,交叉连接等,这篇文章对这几种连接作了简单介绍。

交叉连接

交叉连接其实就是笛卡尔积。返回左表每一行与有表所有行之间的组和。如果A表有m行,B表有n行,则A与B的交叉连接有m*n行。

 Select * from table1 cross join table2

等值连接

等值连接会先将两个表进行笛卡尔积,再从新表中筛选出符合条件的行。

 Select * from table1, table2 on table1.a=table2.e

内连接

内联接通过比较运算符,筛选两张表中指定的列,进行连接,可以设定连接条件。

 Select * from table1 inner join table2 on table1.a=table2.e


PS: 内连接的效果和等值连接的效果相同,但实际使用时推荐使用内连接,因为等值连接查询时会将2个表进行笛卡尔乘积运算,生成一个新表格,当表的数据量较大时,比较影响效率;内连接查询时则会将2个表根据条件进行逐条匹配,不会进行笛卡尔乘积,效率较高。

外连接

  1. 左外连接
    对两表进行等值连接,只保留左表中需要舍弃的部分,右表中没有对应值的部分用空值填充。

    Select * from table1 left outer join table2 on table1.c=table2.c
    

  2. 右外连接
    对两表进行等值连接,只保留右表中需要舍弃的部分,左表中没有对应值的部分用空值填充。

    Select * from table1 right outer join table2 on table1.c=table2.c
    

  3. 全外连接
    对两表进行等值连接,保留两表中需要舍弃的部分,没有对应值的部分用空值填充。

     Select * from table1 full join table2 on table1.C=table2.C
    

自然连接

通常情况下提到自然连接实际上是自然内连接(NATURAL INNER JOIN),它是一种特殊的等值连接,不支持设定连接条件。会自动连接两个表中同名的属性列,并只保留同名属性列中的一个。

Select * from table1 natural join table2

另外,可以指定除交叉连接外的任何连接为自然连接,由此,还产生了:

  1. NATURAL LEFT OUTER JOIN
  2. NATURAL RIGHT OUTER JOIN
  3. NATURAL FULL OUTER JOIN

自然和非自然连接的主要区别是,前者无法指定连接条件(会自动选择同名属性)且在最终结果中会消去多余的同名属性。