mysql关于left join关联查询时on和where条件区别
在MySQL中进行LEFT JOIN操作时,ON条件和WHERE条件的区别在于:
- ON条件是在生成临时表时使用的条件,它起到了过滤关联表的作用,如果关联表中没有匹配的行,那么结果中的关联列将为NULL。
- WHERE条件是在生成临时表后,再次对结果进行过滤的条件。
简单来说,ON条件中的关联条件是在生成临时表时就应用的,而WHERE条件是在生成临时表后再进行过滤的。
举例说明:
假设有两张表,一张是用户表user,一张是订单表order,我们想要查询所有用户及其对应的订单信息,即使某些用户没有订单信息也要显示出来。
使用ON条件的SQL语句:
SELECT * FROM user
LEFT JOIN order ON user.id = order.user_id
使用WHERE条件的SQL语句:
SELECT * FROM user
LEFT JOIN order ON user.id = order.user_id
WHERE order.status = 'completed'
在第二个例子中,即使用户没有订单信息,也只会显示状态为'completed'的订单信息。这是因为WHERE条件是在LEFT JOIN生成的临时表后再次过滤数据。如果想要在生成临时表时就过滤数据,应该将条件放到ON后面。
评论已关闭