七种JOIN
- INNER JOIN (内连接)
- LEFT JOIN (左连接)
- RIGHT JOIN (右连接)
- OUTER JOIN (外连接)
- LEFT JOIN EXCLUDING INNER JOIN (左连接排除内连接结果)
- RIGHT JOIN EXCLUDING INNER JOIN (右连接排除内连接结果)
- OUTER JOIN EXCLUDING INNER JOIN (外连接排除内连接结果
1、INNER JOIN内连接
这是最简单、最容易理解、最常用的JOIN方式。 内连接查询返回表A和表B中所有匹配行的结果。 SQL样例如下:
SELECT <select_list> FROM Table_A A INNER JOIN Table_B B ON A.Key = B.Key
2、LEFT JOIN左连接
LFET JOIN查询返回所有表A中的记录, 不管是否有匹配记录在表B中。它会返回所有表B中的匹配记录 (没有匹配的当然会标记成null了)。 SQL样例如下:
SELECT <select_list> FROM Table_A A LEFT JOIN Table_B B ON A.Key = B.Key3、RIGHT JOIN右连接
和LEFT JOIN相反。 RIGHT JOIN查询会返回所有表B中的记录,不管是否有匹配记录在表A中。它会返回所有表A中的匹配记录(没有匹配的当然会标记成null了)。 SQL样例如下:
SELECT <select_list> FROM Table_A A RIGHT JOIN Table_B B ON A.Key=B.Key4、OUTER JOIN(外连接)
OUTER JOIN也可以当作是FULL OUTER JOIN 或者FULL JOIN。它会返回两个表中所有行,左表A匹配右表B,右表B也匹配左表A (没有匹配的就显示null了)。
OUTER JOIN一般写成下面样子:
OUTER JOIN一般写成下面样子:
SELECT <select_list> FROM Table_A A FULL OUTER JOIN Table_B B ON A.Key=B.Key
5、LEFT EXCLUDING JOIN
它会返回表A中所有不在表B中的行,一般写成:
SELECT <select_list> FROM Table_A A LEFT JOIN Table_B B ON A.Key=B.Key WHERE B.Key IS NULL
6、RIGHT EXCLUDING JOIN
SELECT <select_list> FROM Table_A A RIGHT JOIN Table_B B ON A.Key = B.Key WHERE A.Key IS NULL
7、OUTER Excluding JOIN
Outer Excluding JOIN 会返回所有表A和表B中没有匹配的行。我还没有遇到要用到这种情况的,但是其他的JOIN,用的比较频繁。
SELECT <select_list> FROM Table_A A FULL OUTER JOIN Table_B B ON A.Key = B.Key WHERE A.Key IS NULL OR B.Key IS NULL