在 SQL 中,JOIN 用于将两个表的数据合并查询,主要有三种常见的连接方式:

1. INNER JOIN(内连接)

  • 只返回两个表中满足连接条件的匹配数据。

  • 不匹配的数据不会出现在结果集中。

📌 示例

1
SELECT A.*, B.* FROM A INNER JOIN B ON A.id = B.a_id;

结果:

  • 仅包含 ABid = a_id 匹配的行。

2. LEFT JOIN(左连接)

  • 返回左表的所有数据,即使右表中没有匹配的数据。

  • 右表中没有匹配的数据时,对应的列会填充 NULL

📌 示例

1
2
3
SELECT A.*, B.*
FROM A
LEFT JOIN B ON A.id = B.a_id;

结果:

  • A 表为主,B 中没有匹配的行会显示 NULL

3. RIGHT JOIN(右连接)

  • 返回右表的所有数据,即使左表中没有匹配的数据。

  • 左表中没有匹配的数据时,对应的列会填充 NULL

📌 示例

1
2
3
4
SELECT A.*, B.*
FROM A
RIGHT JOIN B ON A.id = B.a_id;

结果:

  • B 表为主,A 中没有匹配的行会显示 NULL

总结对比

JOIN 类型 结果集包含的数据 可能的 NULL 出现位置
INNER JOIN 两表匹配的数据
LEFT JOIN 左表全部数据,匹配的右表数据(不匹配填 NULL) 右表
RIGHT JOIN 右表全部数据,匹配的左表数据(不匹配填 NULL) 左表

示例数据

A (id, name) B (a_id, score)
1, ‘Alice’ 1, 85
2, ‘Bob’ 3, 90
5, ‘Charlie’ 4, 78

执行不同 JOIN 的结果:

1️⃣ INNER JOIN

1
2
3
4
SELECT A.*, B.*
FROM A
INNER JOIN B ON A.id = B.a_id;

id name a_id score
1 Alice 1 85

2️⃣ LEFT JOIN

1
2
3
4
SELECT A.*, B.*
FROM A
LEFT JOIN B ON A.id = B.a_id;

id name a_id score
1 Alice 1 85
2 Bob NULL NULL
5 Charlie NULL NULL

3️⃣ RIGHT JOIN

1
2
3
4
SELECT A.*, B.*
FROM A
RIGHT JOIN B ON A.id = B.a_id;

id name a_id score
1 Alice 1 85
NULL NULL 3 90
NULL NULL 4 78