如何在mysql中使用JOIN关联多表

这很简单。
要使用MySQL JOIN,您需要了解表是如何连接的,选择正确的JOIN方法,并正确编写ON条件。

1 .写入方法是单行: SELECT 列名 FROM table 1 JOIN table 2 ON table 1 .column = table 2 .column; ON是一个桥梁,通常使用主键和外键。

2 JOIN类型视情况而定:
INNER JOIN,如果您有两个表,请使用这个。

LEFT JOIN,全部在左边,NULL在右边。

RIGHT JOIN,相反,右侧的所有内容都将被添加,而左侧将给出NULL。

FULL OUTER JOIN,两边都包含,如果没有则给出NULL。
MySQL并不直接使用UNION来补偿。

3 例如,三个表来检查订单和产品: SELECTu.name、o.order_id、p.product_name 与用户您 INNER JOINorder o ON u.user_id = o.user_id INNER JOINproducts p ON o.product_id = p.product_id;
4 注意:
一定要有索引,别让查询慢。

不要搞乱 JOIN,只使用必要的。

重复数据处理,使用DISTINCT。

5 总结:首先看关系,选择JOIN,写条件。
优化意味着建立索引,不要使其冗余,不要重复数据。

你自己看看,先这样。

mysql如何实现多表关联查询

记得有一次我负责优化一个电商网站的用户订单请求。
当时的数据库表结构比较复杂,涉及到用户表、订单表、产品表。
原查询语句直接使用SELECT FROM users u JOIN orders o ON u.id = o.user_id JOIN products p ON o.product_id = p.id。
该语句运行速度非常慢,因为它没有指定明确的JOIN类型,导致产生大量的笛卡尔积。

那天我正好在喝咖啡,突然我想,为什么不检查一下索引设置呢?所以我回到我的计算机并使用 ALTERTABLE 命令添加索引 ADDINDEX idx_user_id(user_id);然后我再次运行查询,奇迹发生了。
查询速度至少提高三倍。

等等,还有一件事,我突然想到订单表中的 amount 字段似乎经常用于过滤,因此为该字段也创建一个索引可能是一个好主意。
我添加了另一个索引:ALTERTABLE order ADDINDEX idx_amount(amount);。

现在,再看这个查询语句,我信心十足。
我知道如何选择正确的 JOIN 类型、如何按 WHERE 条件过滤数据以及如何避免笛卡尔积。
这让我想到,如果我每次在优化查询之前都能花一些时间思考和计划,我是否能够更快地找到问题的原因?