数据库左连接、右连接、内连接、全连接笔记

诶,你这描述听起来挺像数据库课的笔记啊... 各种连接类型解释得倒是挺清楚,左连接、右连接、内连接、全连接,还有那些带"不包含内连接"的变种,都给你解释明白了。

不过说实话,光看文字描述有时候还是有点绕。
我之前搞懂这些连接的时候,也是对着韦恩图反复琢磨,画来画去才慢慢清晰。
特别是内连接就像集合交集,左连接是左边的都给你,没匹配上的右边就空着,右连接反过来... 这些图示帮助太大了。

MySQL确实不直接支持全连接啊,这个你得特别注意。
我上次用的时候,也是先做左连接再右连接,然后用 UNION 去重,最后才勉强搞出个全连接的效果。
代码写出来也挺繁琐的。

你要是真搞不懂,或者想看更直观的例子,我可以找个简单的表结构给你写段代码演示一下各种连接的差别。
或者你找个现成的数据库教程视频看看,很多都有动态图解,可能比你一直看文字描述更容易明白。

反正你看着办,要是觉得文字太抽象,我建议还是找点图或者视频看看。
我还在想这个问题

mysql的left join、right join、inner join

哎哟,咱们聊聊数据库里的那些事儿。
我之前在做项目的时候,就深陷在LEFT JOIN、RIGHT JOIN和INNER JOIN的坑里好几次。

记得有一次,我是在2 01 8 年,那会儿公司项目上要做一个用户和订单的关联查询。
我一开始用的是LEFT JOIN,想着左表的用户信息肯定不能少,结果发现订单表里有些用户没有订单,那些用户信息就全变成了NULL,这可不好看。

然后我又试了RIGHT JOIN,想着反正右边是订单信息,用户信息哪怕没订单也重要。
结果反过来,左边那些没订单的用户信息就全没了,这回又不行。

后来我明白了,这两种JOIN都是基于一个表的全部记录来匹配另一个表的记录。
LEFT JOIN是左表优先,RIGHT JOIN是右表优先,它们都会把没有匹配的记录用NULL来填充。

再后来,我决定用INNER JOIN,这样就只显示两个表都有匹配的记录。
这回好多了,用户信息和订单信息都对上了,没有多余的NULL。

但要注意的是,这些JOIN的效率问题。
我之前没注意,结果查询慢得要死。
有一次,一个订单表有几十万条记录,用户表也有几万条,我用了LEFT JOIN,结果数据库卡了整整五分钟才出来结果。

总结一下,LEFT JOIN和RIGHT JOIN都是基于一个表的所有记录来匹配另一个表的,INNER JOIN只显示两个表都有的记录。
ON条件决定了匹配逻辑,是唯一匹配还是多对多匹配,这直接影响结果集的行数。

性能这块,要小心多对多匹配,可能会导致大量数据,影响查询速度。
记得我在那个项目里,后来加了索引,优化了查询条件,才解决了性能问题。

哦对了,INNER JOIN和LEFT JOIN、RIGHT JOIN最大的区别就是,INNER JOIN不会显示没有匹配的记录,所以它返回的结果集是两个表都有的交集部分。

这块儿我就讲到这里,其他的我可能没碰过,不敢乱讲。
有啥其他问题,咱们再聊。