首先我们先看两个例子:
我们有一张基础表 user_info
还有一张扩展表
下面看各种sql语句以及查询结果
- SELECT ui.* ,ue.phone FROM user_info ui LEFT JOIN user_extend ue ON ui.id = ue.user_id
结果:
分析:很简单的左连接,数据都是正常的 -
SELECT ui.* ,ue.phone FROM user_info ui LEFT JOIN user_extend ue ON ui.id = ue.user_id WHERE ui.name=ue.user_name
结果:分析:条件加到where后面会对整个结果集进行筛选,也就是说右表的条件也会对左表的行进行筛选,其实也就是内连接了
- SELECT ui.* ,ue.phone FROM user_info ui LEFT JOIN user_extend ue ON ui.id = ue.user_id AND ui.`name`=ue.user_name
结果:
分析:条件加到on后面会对右表数据进行筛选,如果不满足条件则结果集右表数据为空但不影响左表的数据,也就是左边一定会有,右边不一定会有;还有一种情况就是右边如果有多行数据满足条件,那么查出来就会有多条结果集,比如我们把user_extend表改成这样: 那么结果集就是: