数据库多表查询里join到底怎么用,语法和技巧一起说给你听
- 问答
- 2026-01-13 07:07:00
- 1
说到查数据库,单看一张表往往得不到完整的信息,你有一个“用户表”记录谁注册了你的App,还有一个“订单表”记录谁买了什么东西,如果你想看“张三买了哪些商品”,就必须把这两张表的信息拼在一起看,这个“拼在一起”的操作,就是JOIN(连接)。
JOIN的核心思想很简单:找到两张表之间的关联点,然后把它们像拼图一样组合成一张更完整的临时大表,你再从这张大表里查你需要的数据,这个关联点,通常就是两个表都有的那个字段,用户ID”。
基本的JOIN语法长什么样?
最常见的写法是这样的:
SELECT 表1.字段, 表2.字段... FROM 表1 [JOIN的类型] JOIN 表2 ON 表1.关联字段 = 表2.关联字段;
这里有几个关键点:

- SELECT:你要查哪些列,因为多张表可能有同名的列(比如都有
id),为了不混淆,最好用表名.列名的方式指定,你也可以给表起个简单的别名,比如FROM users u,这样后面用u.name就行了,更简洁。 - FROM:从哪张主表开始。
- JOIN ... ON ...:这是灵魂所在。
JOIN后面跟要连接的另一张表,ON后面跟连接的条件,也就是告诉数据库,根据什么规则把两表的行匹配起来。
JOIN的几种主要类型和技巧
光有语法不够,关键是理解不同类型的JOIN会拼出什么样的结果,你可以把两张表想象成两个圆圈。
-
INNER JOIN(内连接):只取交集 这是最常用的一种,它只返回两个表中都能匹配上的记录。

- 场景:还是刚才的例子,“查询所有下了订单的用户信息”,如果一个用户注册了但从没下过单(在用户表里有,订单表里没有),或者一个订单记录的用户ID在用户表里找不到(可能用户被删除了),这些记录都不会出现在结果里。
- 技巧:当你只关心那些在两边表里都有对应关系的完整数据时,就用它,它像是求两个集合的“交集”。
-
LEFT JOIN(左连接):保全左表,右表匹配不上就补空 它会返回左表的全部记录,以及右表中能匹配上的记录,如果右表没有匹配的,结果集中右表的那些列就用
NULL填充。- 场景:“查询所有用户,并显示他们的订单信息(如果有的话)”,这个查询的结果一定会包含所有用户,即使用户没有订单,他的信息也会显示,只是订单相关的字段都是
NULL。 - 技巧:当你需要确保主表(左表)的信息一个不漏,同时想看看附属表(右表)有没有对应信息时,这是首选,还有一个常见用法是查找“没有对应关系”的记录,比如用
WHERE 右表.关联字段 IS NULL来找出“哪些用户从未下过单”。
- 场景:“查询所有用户,并显示他们的订单信息(如果有的话)”,这个查询的结果一定会包含所有用户,即使用户没有订单,他的信息也会显示,只是订单相关的字段都是
-
RIGHT JOIN(右连接):保全右表,左表匹配不上就补空 和LEFT JOIN正好相反,它返回右表的全部记录,以及左表中能匹配上的记录,左表匹配不上的地方补
NULL。- 场景:相对少见,因为通常我们可以通过调换表的位置,用LEFT JOIN来实现同样的效果,查询所有订单,并显示对应的用户信息(即使用户已被删除)”,你可以用
FROM orders LEFT JOIN users,也可以用FROM users RIGHT JOIN orders。
- 场景:相对少见,因为通常我们可以通过调换表的位置,用LEFT JOIN来实现同样的效果,查询所有订单,并显示对应的用户信息(即使用户已被删除)”,你可以用
-
FULL JOIN(全连接):全都要,匹配不上的都补空 它返回左表和右表中的所有记录,当某一边没有匹配时,另一边就补
NULL。- 场景:用于想看到两个表所有数据的完整情况,无论它们之间有没有关系,在做数据对比或合并时可能用到。注意:不是所有数据库都支持FULL JOIN,比如MySQL就不直接支持。
一些实用的技巧和注意事项
- 明确关联条件:
ON后面的条件一定要写对,这是JOIN查询正确与否的关键,如果关联条件写错或漏写,可能会产生巨大的错误结果集(笛卡尔积)。 - 过滤条件放在哪里:
ON条件是连接时用来匹配行的,而WHERE子句是在连接完成后对整个结果集进行过滤,有时把过滤条件放在ON里和WHERE里效果不同,尤其是在用LEFT/RIGHT JOIN时,比如在LEFT JOIN的ON条件里对右表加过滤,和在WHERE里加过滤,结果可能天差地别。 - 可以连接多张表:JOIN不止能连两张表,可以像链条一样一直连下去。
FROM 表A JOIN 表B ON A.id = B.a_id JOIN 表C ON B.id = C.b_id。 - 表别名是好朋友:当表名很长或者需要连接多个表时,给表起一个简短的别名(如
custforcustomers)能让SQL语句更清晰易读。
JOIN就是把分散在不同表里的数据“串联”起来的工具,INNER JOIN用于取交集,LEFT/RIGHT JOIN用于保全集,FULL JOIN用于取并集,理解每种JOIN的行为差异,再结合具体的业务需求(你到底想看什么样的数据),就能写出准确、高效的查询了,多练习几个例子,感受一下不同JOIN类型输出结果的差异,是掌握它的最好方法。 综合参考了数据库通用知识以及如W3Schools、各种数据库入门教程中关于SQL JOIN的普遍性讲解)
本文由盈壮于2026-01-13发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/79787.html
