MySQL多表查询与左连接、右连接、内连接、全连接

粗略地讲,连接数据库表是解决数据分散问题的一个工具,但具体使用哪种连接方式取决于实际需要。
我们先来说说最重要的事情。
内连接是最常用和最有效的。
在我们去年运行的一个电子商务订单分析项目中,使用内连接处理 5 ,000 条数据只花了大约 0.3 秒,因为它只提供两个表的交集数据并删除多余的数据。
还有一点是,左右连接的差别其实很小,就像左右手互相打架一样。
左连接获取左表中的所有字段,并用空值填充右表中不匹配的字段;右连接的作用相反,但最终结果集中字段的顺序将相反。
还有一个关键细节。
例如,当一起查找学生表和成绩表时,如果学生 s_id 为 8 的记录在成绩表中没有对应的分数,则内连接会直接将其过滤掉,但左连接会保留学生行,但与分数相关的列将被填充为零——很多人没有注意到这一点。
老实说,这很令人困惑。
一开始我以为inner join和left join的效果是一样的,后来发现这是错误的。
MySQL不支持full join,但是可以通过double left join和join来使用。
有必要给表起一个别名(aka),尤其是c_id和s_id这样的字段,可能同名,否则select from Course c join account s on c.c_id=s.c_id会写得更清楚。
交叉连接是最简单、最粗暴的方法。
这两个表是直接连接的,但请谨慎使用。
去年,一位新同事通过合并用户表和产品表差点毁掉服务器。
大约3 000个用户和5 000个产品相当于1 5 亿条数据。
我们提醒您,连接顺序是是先做笛卡尔积,然后过滤,所以不要使用内连接来检查左表中是否有右表中没有的记录 - 这是最容易陷入麻烦的方法。

一文讲懂SQL外连接OUTER JOIN

嗯……外部联系……这个东西……相当复杂。

就像你说的...第 1 2 课...这个 SQL 教程...假设 2 02 2 年...当我学习它时...就是这样。

内连接...只是两个表的重叠部分...嗯...就像...两个圆圈...重叠。

外连接...不同...左连接(LEFTJOIN)...这个...那就是...第一个表...第二个表是否匹配并不重要...第一个表中的所有内容都必须在那里...就像...例如...教师表...学生表...左连接...老师肯定会显示...不匹配的学生...是空...空...
右连接(RIGHTJOIN)...反之...是第二个表...全部... 教师表和学生不匹配... 显示为空... 学生表... 匹配教师信息... 都有...
全联接(FULLJOIN)... 也就是... 左联接加右联接... 两者... 嗯... MySQL... 好像不支持... 比如说... 2 02 2 ... 我遇到过... 不多... 可能... 比较少用。

多个表...连接多个表...例如...教师表、学生表、课程表...左连接...也许更直观...是为了确保...例如...所有老师...都能看到...他们教了什么课...哪些学生...没有匹配的学生...教师部分...为空...
自连接...也就是...他们自己连接的表...例如分析用户...2 02 2 ...用户留存...嗯...左连接...你可以看一下...昨天在的人...今天还在的人...谁...
工作...为第二天保存的...即...左连接...用户表...日期函数...呃...聚合函数...GROUPBY...这部分...稍后详细讲...即...找出...昨天在的人...今天还在的人...用户数...就是这个意思...