SQL中的JOIN用于根据两个或多个表之间的相关列来合并这些表的行。以下是各种JOIN的主要区别:
1. INNER JOIN(内连接,默认JOIN)
- 作用:返回两个表中满足连接条件的记录
- 特点:只显示在两个表中都存在的匹配记录
SELECT columns
FROM table1
INNER JOIN table2 ON table1.column = table2.column;
2. LEFT JOIN(左外连接)
- 作用:返回左表中的所有记录,以及右表中满足连接条件的记录
- 特点:如果右表中没有匹配的记录,则结果中右表的列显示为NULL
SELECT columns
FROM table1
LEFT JOIN table2 ON table1.column = table2.column;
3. RIGHT JOIN(右外连接)
- 作用:返回右表中的所有记录,以及左表中满足连接条件的记录
- 特点:如果左表中没有匹配的记录,则结果中左表的列显示为NULL
SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.column = table2.column;
4. FULL OUTER JOIN(全外连接)
- 作用:返回两个表中的所有记录
- 特点:当某一行在另一个表中没有匹配时,另一个表的列显示为NULL
SELECT columns
FROM table1
FULL OUTER JOIN table2 ON table1.column = table2.column;
5. CROSS JOIN(交叉连接)
- 作用:返回两个表的笛卡尔积
- 特点:结果集的行数等于两个表行数的乘积
SELECT columns
FROM table1
CROSS JOIN table2;
可视化理解
假设:
Table A: 1, 2, 3
Table B: 2, 3, 4
INNER JOIN: 2, 3 (只返回两表都有的值)
LEFT JOIN: 1, 2, 3 (返回左表所有值,匹配右表)
RIGHT JOIN: 2, 3, 4 (返回右表所有值,匹配左表)
FULL OUTER JOIN: 1, 2, 3, 4 (返回两表所有值)
每种JOIN类型都有其特定的用途,选择哪种取决于业务需求和想要获取的数据范围。