数据库JOIN

JOIN关键字

1
2
3
4
SELECT column
FROM join_table
JOIN_TYPE join_table
ON (join_condition)
  1. join_table指参与连接操作的表名
  2. column指查询的列
  3. JOIN_TYPE 指连接类型

INNER JOIN,内连接(等同连接)

返回结果集只返回满足ON字句中的搜索条件的数据,不满足则不显示。默认情况下,DBMS会将JOIN也认定为INNER JOIN

表R

ABC
a1b1c1
a2b2c2
a3b3c3

表S

CD
c1d1
c2d2
c4d3

执行R INNER JOIN S ON R.C = S.C

ABCCD
a1b1c1c1d1
a2b2c2c2d2

交集。

OUTER JOIN,外连接

LEFT OUTER JOIN(LEFT JOIN),左外连接

结果集返回匹配行加上左表的不匹配行

表R

ABC
a1b1c1
a2b2c2
a3b3c3

表S

CD
c1d1
c2d2
c4d3

执行R LEFT JOIN S ON R.C = S.C

ABCCD
a1b1c1c1d1
a2b2c2c2d2
a3b3c3nullnull

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

RIGHT OUTER JOIN(RIGHT JOIN),右外连接

结果集返回匹配行加上右表的不匹配行

表R

ABC
a1b1c1
a2b2c2
a3b3c3

表S

CD
c1d1
c2d2
c4d3

执行R RIGHT JOIN S ON R.C = S.C

ABCCD
a1b1c1c1d1
a2b2c2c2d2
nullnullnullc4d3

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

FULL OUTER JOIN,全外连接

结果集返回匹配行和左右表的不匹配行

表R

ABC
a1b1c1
a2b2c2
a3b3c3

表S

CD
c1d1
c2d2
c4d3

执行R FULL JOIN S ON R.C = S.C

ABCCD
a1b1c1c1d1
a2b2c2c2d2
a3b3c3nullnull
nullnullnullc4d3

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