写SQL时,LEFT JOIN和RIGHT JOIN的区别你真的清楚吗?很多人以为这是三种不同的连接方式,其实它们都隶属于同一个"家族"——外连接。真正独立的只有两种:内连接和外连接。

这个分类逻辑很纯粹:看哪些行能进结果集,以及哪张表的"落单行"被保留。内连接求的是交集,匹配不上的两边都不要;外连接则专门收留那些落单的记录。除此之外,没有第三种底层逻辑。

打开网易新闻 查看精彩图片

外连接往下再分三个方向。LEFT保留左表全部行,RIGHT保留右表全部行,FULL则是两边全要。三者的核心机制完全一致,区别只在"保哪边"。GBase 8a这类遵循SQL标准的数据库,查询引擎里就是这么划分的。

打开网易新闻 查看精彩图片

实际写查询时,这个层级关系能帮你少犯错。一旦确定用外连接,必须立刻想清楚方向——左、右还是全?但内连接没这烦恼,它本身就是完整规格,不需要二次选择。

打开网易新闻 查看精彩图片

很多性能问题或数据遗漏,根子都在这里:该用内连接时用了外连接,或者外连接的方向选反了。理解这套分类 hierarchy,比死记语法更重要。