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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~