mysql 多表连接结果分析
数据准备
- t1_user
- t2_user
-
t_user_info
左外连接
t1_user作为主表
sql语句
SELECT * FROM t1_user a LEFT JOIN t2_user b ON a.id = b.id
查询结果:
这里可以看到id是t2_user中的id实际上也会被复制一份出来
t2_user表删除id = 6的记录
查询结果
这里可以看到因为t1_user表作为主表,所以t2_user表中未与主表中对应上的数据部分显示为空
将主表t1_user中id = 3的记录删除
查询结果
这里可以看到左外连接只会连接主表中有的数据
当主表中id = 4的记录消失之后,即便副表中有id = 4的记录,也不会出现在查询结果当中
所以选择哪张表作为主表很重要,一旦选择错主表,很可能导致查询出的结果不准确
接下来引入第三张表
sql语句
SELECT * FROM t1_user a
LEFT JOIN t2_user b ON a.id = b.id
LEFT JOIN t_user_info c ON a.id = c.id
查询结果
可以看到id被复制了两份,依然是t_user作为主表关联数据
不同联表字段的查询结果
SELECT * FROM t_user1 a
LEFT JOIN t2_user b ON a.id = b.id
LEFT JOIN t_user_info c ON a.id = c.id
这里删除t2_user 表中id = 4的数据
查询结果
主表和t_user_info表中都存在id=4的值,t2_user表中的id = 4的值被删除了,所以只有该表中id = 4的数据是空的
SELECT * FROM t1_user a
LEFT JOIN t2_user b ON a.id = b.id
LEFT JOIN t_user_info c ON b.id = c.id
连接t_user_info表的时候关联t2_user表进行连接,而不是t1_user表
查询结果
数据没有任何变化,但是查询结果却发生了变化
由于 LEFT JOIN t_user_info c ON b.id = c.id 这里是按照t2_user的id来连接的
所以当t2_user中id = 4的值删除后,t_user_info表中id = 4的值即使仍然存在,也不会被查出来
这意味着此时对于t_user_info表来说,t2_user表才是主表,而不再是t1_user
这里的三表连接关系是:
t2_user以t1_user为主表连接
t_user_info以t2_user表为主表连接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)