mysql中left join条件在on与where时的区别
发布网友
发布时间:2024-10-01 03:21
我来回答
共1个回答
热心网友
时间:2024-10-29 18:44
在MySQL的left join操作中,on和where关键字用于设置连接条件时,有着明显的区别。以下是它们在不同情况下的表现:
1. 当仅使用on进行无条件连接时(如`select a.*,b.* from a left join b on a.id=a_id;`),左表a的所有记录都将被查询,即使在右表b中找不到匹配,也会用null填充。
2. 如果在where后增加a表条件(如`select a.*,b.* from a left join b on a.id=a_id where a.id>1;`),则会过滤掉a表中不符合条件的记录,只保留满足条件的记录,右表中的null值依然保留。
3. 当在on后加入b表条件(如`select a.*,b.* from a left join b on a.id=a_id and a_id>2;`),则会先在a表中筛选,再在b表中查找匹配,b表中不符合条件的记录会导致null值。
4. 如果在on后面同时加入a表和b表条件(如`select a.*,b.* from a left join b on a.id=a_id and a.id>1;`),a表的条件会决定是否查找b表,即使满足a表条件,id为1的记录也会显示null,因为主表为a。
5. 当在on后增加or条件时(如`select a.*,b.* from a left join b on a.id=a_id and a_id>2 or title='2222';`),查询过程会先检查and条件,满足后不再检查or条件。
总结来说,on中的条件用于决定连接过程,而where的条件影响连接结果。理解这两者在left join中的作用至关重要,以便更精确地筛选和连接数据。