在 SQL 中,**连接查询(JOIN)**主要用于根据两个或多个表之间的关联条件查询数据。常见的连接类型如下:
只返回两表中满足连接条件的记录。
SELECT *
FROM A
INNER JOIN B
ON A.id = B.a_id;
✅ 结果:A 和 B 中都存在的匹配数据
返回左表所有记录,右表无匹配时补 NULL。
SELECT *
FROM A
LEFT JOIN B
ON A.id = B.a_id;
✅ 结果:A 全有,B 匹配不到则为 NULL
返回右表所有记录,左表无匹配时补 NULL。
SELECT *
FROM A
RIGHT JOIN B
ON A.id = B.a_id;
✅ 结果:B 全有,A 匹配不到则为 NULL
返回左右两表所有记录,无匹配处补 NULL。
SELECT *
FROM A
FULL JOIN B
ON A.id = B.a_id;
⚠️ 注意:MySQL 不支持 FULL JOIN(可用 UNION 模拟)
返回两表的笛卡尔积(无连接条件)。
SELECT *
FROM A
CROSS JOIN B;
✅ 结果:A 行数 × B 行数
同一张表自己连接自己(通常用别名)。
SELECT e1.name, e2.name
FROM employee e1
JOIN employee e2
ON e1.manager_id = e2.id;
自动按同名字段连接。
SELECT *
FROM A
NATURAL JOIN B;
⚠️ 容易因字段名变化产生意外结果
| 类型 | 是否返回未匹配 | 说明 |
|---|---|---|
| INNER JOIN | ❌ | 只返回匹配 |
| LEFT JOIN | ✅(右表 NULL) | 左表全 |
| RIGHT JOIN | ✅(左表 NULL) | 右表全 |
| FULL JOIN | ✅ | 两边全 |
| CROSS JOIN | — | 笛卡尔积 |
| SELF JOIN | 看类型 | 自己连自己 |
如果你用的是 MySQL / Oracle / SQL Server,我也可以结合具体数据库再细讲。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。