Mysql连表方式
连表方式
-
联合(union&union all)
union:在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
union all:对两个结果集进行并集操作,包括重复行,不进行排序。
PS:如果对结果集重复数据不要求或者能保证结果集不会出现重复数据,则是优先使用union all。因为union在获取结果集后还要进行排序和筛选,对效率有一定的影响。
-
左链接(left join)
/* 驱动表为左表 */
select * from t1 left join t2 on t1.id = t2.id;
- 右链接(right join)
/* 驱动表为右表 */
select * from t1 right join t2 on t1.id =t2.id;
- 内链接(inner join)
/* 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)
select * from t1 left join t2 on t1.id = t2.id where t2.id is null;
- 右独有(某些数据库为right outer join)
select * from t1 right join t2 on t1.id = t2.id where t1.id is null;
- 全连接(某些数据库为 full join)
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)
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;

浙公网安备 33010602011771号