SQL的各种连接Join详解

最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN)、SQL LEFT JOIN、SQL  RIGHT JOIN、SQL FULL JOIN,其中前一种是内连接,后三种是外链接。

假设我们有两张表,Table 1是左边的表,Table 2是右边的表。

Table1

idname
1Google
2淘宝
3微博
4Facebook

Table2

idaddress
1美国
5中国
3中国
6美国

一、INNER JOIN


内连接是最常见的一种连接,只连接匹配的行。

inner join语法

select column_name(s)
from table1
INNER JOIN table2
ON
table1.column_name=table2.column_name

注释:INNER JOIN与JOIN是相同

INNER JOIN产生的结果集中,是1和2的交集。

select * from Table1 inner join Table2
on Table1.id=Table2.id

 执行以上SQL输出结果如下:

idnameaddress
1Google美国
3微博中国

二、LEFT JOIN


LEFT JOIN返回左表的全部行和右表满足ON条件的行,如果左表的行在右表中没有匹配,那么这一行右表中对应数据用NULL代替。

LEFT JOIN 语法

select column_name(s)
from table1
LEFT JOIN table2
ON table1.column_name=table2.column_name

注释:在某些数据库中,LEFT JOIN 称为LEFT OUTER JOIN

LEFT JOIN产生表1的完全集,而2表中匹配的则有值,没有匹配的则以null值取代。

select * from Table1 left join Table2
on Table1.id=Table2.id

 执行以上SQL输出结果如下:

idnameaddress
1Google美国
2淘宝null
3微博中国
4Facebooknull

 三、RIGHT JOIN


RIGHT JOIN返回右表的全部行和左表满足ON条件的行,如果右表的行在左表中没有匹配,那么这一行左表中对应数据用NULL代替。

RIGHT JOIN语法

select column_name(s)
from table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name

注释:在某些数据库中,RIGHT JOIN 称为RIGHT OUTER JOIN

RIGHT JOIN产生表2的完全集,而1表中匹配的则有值,没有匹配的则以null值取代。

select * from Table1 right join Table2
on Table1.id=Table2.id

执行以上SQL输出结果如下:

idnameaddress
1Google美国
5null中国
3微博中国
6null美国

四、FULL OUTER JOIN


FULL JOIN 会从左表 和右表 那里返回所有的行。如果其中一个表的数据行在另一个表中没有匹配的行,那么对面的数据用NULL代替

FULL OUTER JOIN语法

select column_name(s)
from table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name

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

select * from Table1 full outer join Table2
on Table1.id=Table2.id

执行以上SQL输出结果如下:

idnameaddress
1Google美国
2淘宝null
3微博中国
4Facebooknull
5null中国
6null美国

分类: SQL数据库

留下评论