inner join与 left join 和 on与where 的区别

 

select * from test;

inner join与 left join 和 on与where 的区别

 

 

 select * from test2

inner join与 left join 和 on与where 的区别

 

 

 select * from test inner join test2 on test.projectId=test2.projectId 

inner join与 left join 和 on与where 的区别

 

 

共4条记录,test2里有两条projectId=1的,所以连接出两条,主表test的前两天记录不符合连接条件,不显示

-- inner join 结果集是符合连接条件的数据,如果从表没有符合on条件的数据,主表也不会展示

select * from test left join test2 on test.projectId=test2.projectId 

inner join与 left join 和 on与where 的区别

 

 -- left join 结果集是主表的全部数据,如果从表无符合连接条件的,补空

select * from test left join test2 on test.projectId=test2.projectId and test2.projectId !=1

inner join与 left join 和 on与where 的区别

 

 这里and作为连接条件,只有test2里projectid=2和3的两条符合,但因为是左连接,主表会显示所有记录,不符合连接条件的从表的列补空

select * from test left join test2 on test.projectId=test2.projectId where  test2.projectId !=1 

inner join与 left join 和 on与where 的区别

 

这里where是过滤条件,上图的后三条会过滤掉

上一篇:SQL生成32位随机字符串


下一篇:mysql高级篇一:存储过程和函数