Mysql连表方式

连表方式

  • 联合(union&union all)

    ​ union:在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。

    ​ union all:对两个结果集进行并集操作,包括重复行,不进行排序。

    ​ PS:如果对结果集重复数据不要求或者能保证结果集不会出现重复数据,则是优先使用union all。因为union在获取结果集后还要进行排序和筛选,对效率有一定的影响。

  • 左链接(left join)

img

/* 驱动表为左表 */
select * from t1 left join t2 on t1.id = t2.id;
  • 右链接(right join)

img

/* 驱动表为右表 */
select * from t1 right join t2 on t1.id =t2.id;
  • 内链接(inner join)

img

/* mysql选择最小的表作为驱动表 */
select * from t1 inner join t2 on t1.id = t2.id;
  • STRAIGHT_JOIN(强制版内连接)

    连表效果同inner join一样,但STRAIGHT_JOIN强制左表为驱动表

    /* 左表为驱动表 */
    select * from t1 STRAIGHT_JOIN t2 on t1.id = t2.id;
    
  • 左独有(某些数据库为left outer join)

img

select * from t1 left join t2 on t1.id = t2.id where t2.id is null;
  • 右独有(某些数据库为right outer join)

img

select * from t1 right join t2 on t1.id = t2.id where t1.id is  null;
  • 全连接(某些数据库为 full join)

img

select * from t1 left join t2 on t1.id = t2.id union select * from t1 right join t2 on t1.id = t2.id;
  • 并集去交集(某些数据库为full outer join)

img

select * from t1 left join t2 on t1.id = t2.id where t2.id is null union select * from t1 right join t2 on t1.id = t2.id where t1.id is null;
posted @ 2019-10-10 22:05  小夏02  阅读(168)  评论(0)    收藏  举报