LEFT JOIN可保留左表所有记录,右表无匹配时字段为NULL;ON用于连接条件,WHERE可能过滤掉左表数据,应谨慎使用;多表关联可用多个LEFT JOIN实现。

在MySQL中使用LEFT JOIN可以获取左表中的所有记录,即使右表中没有匹配的记录也会保留左表的数据。这种方式特别适合需要完整展示主表信息,并附带关联表数据的场景。
LEFT JOIN的基本语法
LEFT JOIN通过连接两个表,返回左表的所有行和右表中满足连接条件的行。如果右表没有匹配项,对应字段值为NULL。
SELECT 列名 FROM 左表名 LEFT JOIN 右表名 ON 左表名.列 = 右表名.列;
例如有两张表:users(用户)和orders(订单),想查看每个用户的订单情况,包括没有下单的用户:
SELECT users.name, orders.order_number FROM users LEFT JOIN orders ON users.id = orders.user_id;
结果会列出所有用户,未下单用户的order_number显示为NULL。
使用WHERE与ON的区别
注意ON是连接条件,决定如何匹配两表数据;而WHERE是在连接完成后过滤结果。
若在LEFT JOIN后使用WHERE限制右表字段,可能导致非预期结果,比如:
蓝心千询
蓝心千询是vivo推出的一个多功能AI智能助手
34 查看详情
SELECT users.name, orders.amount FROM users LEFT JOIN orders ON users.id = orders.user_id WHERE orders.amount > 100;
这条语句实际上会排除右表为NULL的行(即没订单的用户),相当于变成了INNER JOIN的效果。如需保留所有用户,应把条件写在ON中:
SELECT users.name, orders.amount FROM users LEFT JOIN orders ON users.id = orders.user_id AND orders.amount > 100;
多表LEFT JOIN的应用
可以连续使用多个LEFT JOIN来关联三张或更多表。
比如再加一个product表记录订单商品:
SELECT users.name, orders.order_number, product.name FROM users LEFT JOIN orders ON users.id = orders.user_id LEFT JOIN product ON orders.product_id = product.id;
这样能展示用户、其订单及对应商品,任何环节缺失数据都不会导致整条记录被忽略。
基本上就这些。掌握ON条件的使用,理解LEFT JOIN保留左表全部数据的特性,就能准确查询所需信息。
以上就是如何在mysql中使用LEFT JOIN查询数据的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/633376.html
微信扫一扫
支付宝扫一扫