如何在mysql中使用LEFT JOIN查询数据

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

如何在mysql中使用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限制右表字段,可能导致非预期结果,比如:

如何在mysql中使用LEFT JOIN查询数据

蓝心千询

蓝心千询是vivo推出的一个多功能AI智能助手

如何在mysql中使用LEFT JOIN查询数据34

查看详情 如何在mysql中使用LEFT JOIN查询数据

 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保留左表全部数据的特性,就能准确查询所需信息。

上一篇
下一篇
text=ZqhQzanResources