2016.12.2
十二.用外连接来组合表
内连接的主要限制是要显示任何结果的话,都要在所有的连接的表中有相应的匹配。SQL中把内连接作为默认连接,所以可以只是用JOIN来指定一个内连接,而不是一定要用INNER JOIN。
与内连接不同,外连接有3种类型:左连接(LEFT OUTER JOIN),右连接(RIGHT OUTER JOIN)和全连接(FULL OUTER JOIN)。可以直接表示为:LEFT JOIN,RIGHT JOIN,FULL JOIN。
12.1 左连接
SELECT
table1.columnlist
Table2.columnlist
Table3.columnlist
FROM table1
LEFT JOIN table2
ON table1.column1=table2.column2
LEFT JOIN table3
ON table2.column2=table3.column3
ORDER BY table1.columnlist,table2.columnlist
对于关键字LEFT JOIN来说,表排列的顺序是非常重要的,当指定一个LEFT JOIN时,LEFT JOIN左边的表一定是主表,LEFT JOIN右边的是从表。当连接主从表时,我们需要主表的所有行,即使从表中没有行与之匹配。
12.2 与WHERE一起使用判断NULL值
SELECT
table1.columnlist
Table2.columnlist
Table3.columnlist
FROM table1
LEFT JOIN table2
ON table1.column1=table2.column2
LEFT JOIN table3
ON table2.column2=table3.column3
WHERE conditionlist
ORDER BY table1.columnlist,table2.columnlist
12.3 右连接
右连接与左连接的不同在于列出两个表的顺序不同。右连接中,主表出现在RIGHT JOIN的右边,从表出现在RIGHT JOIN的左边,
SELECT
table1.columnlist
Table2.columnlist
Table3.columnlist
FROM table3
RIGHT JOIN table2
ON table3.column2=table2.column2
RIGHT JOIN table1
ON table2.column1=table1.column1
ORDER BY table1.columnlist,table2.columnlist
RIGHT JOIN前后列出表的顺序至关重要,但是ON后面列出的列的顺序则并不重要。建议使用左连接,人的直觉上,先列出的表更重要。
12.4 全连接(MySql中没有)
在内连接中,两个表都是主表,当匹配两个表时,对于选中的行数据,在两个表中必须有一个匹配。在左连接或者右连接中,一个主表,一个从表(可选)。
在全连接中,两个表都是从表,如果表A和表B进行全连接,则会显示:
(1)表A 的所有行,即使它在表B中没有匹配的行
(2)表B的所有行,即使它在表A中没有匹配的行
SELECT
table1.columnlist
Table2.columnlist
FROM table1
FULL JOIN table2
ON table1.column1=table2.column1
ORDER BY table1.columnlist,table2.columnlist
全连接显示了两个表之间双向都没有匹配的数据,这中表之间的关系很少见,所以,全连接很少用到。