mysql 多表连接结果分析

数据准备

  • t1_user

image-20220126142327541

  • t2_user

image-20220126142353410

  • t_user_info

    image-20220126144546176

左外连接

t1_user作为主表

sql语句

SELECT * FROM t1_user a LEFT JOIN t2_user b ON a.id = b.id

查询结果:

image-20220126142521893

这里可以看到id是t2_user中的id实际上也会被复制一份出来

t2_user表删除id = 6的记录

查询结果

image-20220126142825640

这里可以看到因为t1_user表作为主表,所以t2_user表中未与主表中对应上的数据部分显示为空

将主表t1_user中id = 3的记录删除

查询结果

image-20220126143108255

这里可以看到左外连接只会连接主表中有的数据

当主表中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

查询结果

image-20220126144646889

可以看到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的数据

查询结果

image-20220126145250174

主表和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表为主表连接

posted @ 2022-01-26 15:26  尽深  阅读(167)  评论(0编辑  收藏  举报