SQL各种Join的区别

101 阅读2分钟

SQL中的JOIN用于根据两个或多个表之间的相关列来合并这些表的行。以下是各种JOIN的主要区别:

1. INNER JOIN(内连接,默认JOIN)

  • 作用:返回两个表中满足连接条件的记录
  • 特点:只显示在两个表中都存在的匹配记录

image.png

SELECT columns
FROM table1
INNER JOIN table2 ON table1.column = table2.column;

2. LEFT JOIN(左外连接)

  • 作用:返回左表中的所有记录,以及右表中满足连接条件的记录
  • 特点:如果右表中没有匹配的记录,则结果中右表的列显示为NULL

image.png

SELECT columns
FROM table1
LEFT JOIN table2 ON table1.column = table2.column;

3. RIGHT JOIN(右外连接)

  • 作用:返回右表中的所有记录,以及左表中满足连接条件的记录
  • 特点:如果左表中没有匹配的记录,则结果中左表的列显示为NULL

image.png

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类型都有其特定的用途,选择哪种取决于业务需求和想要获取的数据范围。