SQL 多表查询常用语法速查:INNER JOIN / LEFT JOIN / RIGHT JOIN

在实际开发和面试中,SQL 的多表查询是最常见的场景之一。比如:

用户信息存放在 users 表;

订单信息存放在 orders 表;

如果想要查询用户的订单,就必须把这两张表的数据结合起来。

SQL 提供了 JOIN 语法 来完成多表查询,其中最常用的是:

INNER JOIN(内连接)

LEFT JOIN(左连接)

RIGHT JOIN(右连接)

本文将用简洁的语法示例帮你快速掌握这些 JOIN 的区别与用法。

一、INNER JOIN(内连接)

语法

SELECT u.id, u.name, o.order_id, o.amount

FROM users u

INNER JOIN orders o ON u.id = o.user_id;

特点

只返回两张表中 匹配成功 的数据。

如果某个用户没有订单,他不会出现在结果里。

适用场景

只关心两张表都有交集的数据,例如:查询"有下过单的用户"。

二、LEFT JOIN(左连接)

语法

SELECT u.id, u.name, o.order_id, o.amount

FROM users u

LEFT JOIN orders o ON u.id = o.user_id;

特点

返回左表的全部数据。

如果右表没有匹配,则结果中的右表字段为 NULL。

适用场景

需要保留左表的完整数据,例如:查询"所有用户及其订单情况",即使有用户没有下过单,也要展示。

三、RIGHT JOIN(右连接)

语法

SELECT u.id, u.name, o.order_id, o.amount

FROM users u

RIGHT JOIN orders o ON u.id = o.user_id;

特点

和 LEFT JOIN 相反,返回右表的全部数据。

如果左表没有匹配,则结果中的左表字段为 NULL。

适用场景

需要保留右表的完整数据,例如:查询"所有订单对应的用户",即使有订单没有匹配到用户(脏数据),也要展示。

四、JOIN 的总结对比

● INNER JOIN:只要匹配成功的数据,交集。

● LEFT JOIN:保留左表全部,右表能匹配则显示,不能则 NULL。

● RIGHT JOIN:保留右表全部,左表能匹配则显示,不能则 NULL。

面试时常问:INNER JOIN 和 LEFT JOIN 的区别?

答:INNER JOIN 过滤掉不匹配的数据,而 LEFT JOIN 会保留左表全部行。

五、面试高频考点

  1. INNER JOIN 和 WHERE 的区别?

INNER JOIN 在连接阶段就决定匹配,WHERE 是对结果进一步过滤。

写错位置可能导致结果数量不同。

  1. LEFT JOIN 为什么容易写出逻辑错误?

如果把条件写在 WHERE,而不是 ON,会把没有匹配的数据也过滤掉,相当于变成 INNER JOIN。

正确做法:过滤条件写在 ON 上,WHERE 用于最终筛选。

  1. 什么时候用 RIGHT JOIN?

实际开发中较少用,一般用 LEFT JOIN 调整表顺序即可。

但面试里可能会考概念。

六、总结

● INNER JOIN:最常用,取交集。

● LEFT JOIN:保留左表,常用于"全量用户 + 订单情况"。

● RIGHT JOIN:保留右表,实际开发少用。

面试常考 ON 和 WHERE 的区别,千万不要混淆。

👉 建议:多写实际 SQL,配合 EXPLAIN 分析执行计划,才能理解 JOIN 的本质。

相关推荐
一 乐6 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
1.14(java)8 小时前
SQL数据库操作:从CRUD到高级查询
数据库
Full Stack Developme8 小时前
数据库索引的原理及类型和应用场景
数据库
IDC02_FEIYA10 小时前
SQL Server 2025数据库安装图文教程(附SQL Server2025数据库下载安装包)
数据库·windows
辞砚技术录10 小时前
MySQL面试题——联合索引
数据库·面试
萧曵 丶11 小时前
MySQL 主键不推荐使用 UUID 的深层原因
数据库·mysql·索引
小北方城市网11 小时前
分布式锁实战指南:从选型到落地,避开 90% 的坑
java·数据库·redis·分布式·python·缓存
毕设十刻11 小时前
基于Vue的人事管理系统67zzz(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
TDengine (老段)13 小时前
TDengine Python 连接器入门指南
大数据·数据库·python·物联网·时序数据库·tdengine·涛思数据
萧曵 丶13 小时前
事务ACID特性详解
数据库·事务·acid