left 和right的区别
面试中一个很常见的场景,说说left和right join的区别,
张口就来 left 是左表为基准表,已左表为准;right是右表为基准表,已右表为准。
But来了一个场景题,傻眼了,答错了。
##显示四条数据,right右表 a1为基础表,对应的结果应该为
#1-1-2-null ;
#1-1-2-null;
#2-2-2-null;
#2-2-2-null;
select * from a right join a1 on a.a=a1.a1;
##显示五条数据,left左表 a为基础表
#a表1的结果对应a1表里有两条数据
#a表2的结果对应a1表里有两条数据
#a表3的结果对应a1表里无数据,但因为是基表,所以还会显示
#1-1-2-null ;
#1-1-2-null;
#2-2-2-null;
#2-2-2-null;
#3-null-null-null;
select * from a left join a1 on a.a=a1.a1;
最后再重新来个定义吧,免得基础不扎实翻车
left join(左联接)返回左表中的所有记录和右表中与左表关联的记录,如果右表没有关联的记录,则=左表记录,否则就>左表记录;
right join(右联接)返回右表中的所有记录和左表中与之关联的记录,如果左表没有关联的记录,则=右表记录,否则就>右表记录;