mysql left join 、inner join 、right join区别
首先我们创建俩个表:
一个用户信息表:
CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT NULL COMMENT '姓名', `sex` tinyint(1) DEFAULT NULL COMMENT '性别', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
一个用户信息扩展表--用户年级表
CREATE TABLE `class` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `user_id` int(11) DEFAULT NULL COMMENT '用户id', `grade` int(11) DEFAULT NULL COMMENT '年级', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
1、left join (左联接) 返回包括左表中的所有数据和右表中联结字段相等的数据
select * from user as u left join class as c on u.id = c.user_id
结果是:
2、right join (右联接) 返回包括右表中的所有数据和左表中联结字段相等的数据
select * from user as u right join class as c on u.id = c.user_id;
返回结果:
3、inner join(内联接) 只返回连联接字段相等的数据结果
select * from user as u inner join class as c on u.id = c.user_id;
返回结果:
4、union 合并俩个sql语句查询结果(对结果进行了去重)
使用方式是:
select * from tableA union select * from tableB
我们以user表进行演示,union同一个表比较好看出来区别
select * from user union select * from user
返回结果:
5、 union all 合并俩个sql语句查询结果(没有对sql语句进行去重)
select * from user union all select * from user
返回结果:
总结一下union和union all的区别:
1、重复性 union 会把整合后的数据进行去重,union all只是简单的把俩个数据整合在一起,没有去重
2、union 会按照字段的顺序进行排序,union all 不会
从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用UNION ALL。