在 SQL 中,连接(JOIN)是将两个或多个表根据它们之间的关联条件组合在一起的操作。
连接可以分为内连接(INNER JOIN)和外连接(OUTER JOIN)。
外连接又可以进一步细分为左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。
这些连接类型的主要区别在于它们处理不匹配记录的方式。
内连接(INNER JOIN)
内连接只返回两个表中关联条件匹配的记录。如果某个表中的记录在另一个表中没有匹配的记录,这些记录将不会出现在最终结果中。
SELECT A.id, A.name, B.address
FROM table_A A
INNER JOIN table_B B ON A.id = B.id;
左连接(LEFT JOIN)
左连接返回左表中的所有记录,以及右表中与左表匹配的记录。如果左表中的某条记录在右表中没有匹配的记录,那么结果中右表的字段将显示为 NULL。
SELECT A.id, A.name, B.address
FROM table_A A
LEFT JOIN table_B B ON A.id = B.id;
右连接(RIGHT JOIN)
右连接返回右表中的所有记录,以及左表中与右表匹配的记录。如果右表中的某条记录在左表中没有匹配的记录,那么结果中左表的字段将显示为 NULL。
SELECT A.id, A.name, B.address
FROM table_A A
RIGHT JOIN table_B B ON A.id = B.id;
全连接(FULL JOIN)
全连接返回左表和右表中的所有记录。如果左表中的某条记录在右表中没有匹配的记录,那么结果中右表的字段将显示为 NULL。反之,如果右表中的某条记录在左表中没有匹配的记录,那么结果中左表的字段将显示为 NULL。
SELECT A.id, A.name, B.address
FROM table_A A
FULL JOIN table_B B ON A.id = B.id;
总结
- 内连接只返回匹配的记录;
- 左连接返回左表的所有记录,以及右表中匹配的记录;
- 右连接返回右表的所有记录,以及左表中匹配的记录;
- 全连接返回左表和右表的所有记录,并用 NULL 填充不匹配的记录。