mysql中的几种join 及 full join问题 (仅学习)

说实话,谈MySQL JOIN,还得从我当时冒的风险说起。
我记得当我第一次写JOIN时,我混淆了左连接和右连接。
因此,所有报告都堆放有空值。
总统立即说道……算了,我们不谈这个了。

我们先来谈谈基本的笛卡尔积。
这是实战中很少用到的东西,但是了解它却很有用。
上次遇到是在调优一个老系统,发现查询突然返回了上亿条数据。
经过检查发现两个表都没有添加ON条件,直接使用了INNER JOIN。
结果是笛卡尔积。
感觉就像我正在为学校编制整个班级名单和课程。
每个人都修完了所有课程。
太神奇了。

左连接和右连接必须成对注册。
例如,当我检查用户和订单时,我使用左侧连接来查看所有用户,即使他们没有下订单(结果中的订单列为 NULL)。
另一方面,如果我想查看所有订单,即使匹配订单的用户消失了,我也会使用正确的连接。
有趣的是,您选择哪张桌子完全取决于您想要保证哪张桌子的安全。
我记得有一次,当我准备一份报告时,客户坚持要看到所有订单号,即使用户信息不完整。
最后唯一的选择就是使用右连接+左连接的组合。

内部联接是最好的,特别是在两个表中选择数据。
我写业务逻辑的时候用得最多的是内部通信,简单又原始。
例如,查看销售数据时,只需查看包含产品信息和销售记录的产品即可。
只需输入 ON Product_id = Products.id 即可。

独特的数据?这就要求它存在或不存在。
我有一个情况,我想检查丢失的用户,即左连接后在右表中找不到相应的活动记录。
MySQL 不直接支持全连接。
您应该使用左手连接、UNION 连接和右手连接。
不过,写的时候要小心。
记得在ON处加上条件,不要乱写。

连接正常?这件事听起来很简单,但其实也隐藏着很大的隐患。
之前改过一次字段名,但是正常连接突然失效了,没有结果。
说白了就是它依赖于隐式列匹配,这不如显式 ON 条件可靠。
有时,当表格的结构发生变化时,与你的自然联系可能会消失。

最后说一个容易被忽视的点:JOIN案例中的索引。
上次优化一个很慢的JOIN,发现运行状态没有索引,所以直接全表暴力扫描。
更改索引后,几秒钟内启动它。
所以写JOIN的时候不仅要看语法,还要考虑条件是否能够快速运行。

事实上,它更实用。
这些 JOIN 类型类似于烹饪香料。
根据情况使用,一定要靠经验。
例如,有些人喜欢将所有联接写为 INNER JOIN。
他们认为这是最安全的方法。
但是,不匹配的项目不会自动显示。
有些人还喜欢用LEFT JOIN,认为这样的数据最全,用NOT EXISTS来过滤。
这两种想法都是正确的,只是取决于你的个人习惯。

MySQL表间关联字段分析mysql不同表字段关联

mysql 两个表中的信息怎么关联起来使用?

这两个表使用外键约束关联。

UserInfo 表有一个 UserID 主键。

news表使用UserID作为外键与UserInfo表关联。

建表时直接添加外键约束。

如果表已存在,请使用 ALTER TABLE 添加约束。

添加新表News 参数 fk_user_id FOREIGN KEY (UserID) 属性 UserInfo(UserID);
News 表用于关联用户信息表。

无需等待,立即进入。

数量取决于字段类型; UserID 是一个 int。

该方法是否适用于所有情况还有待证实。

给自己计时。