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。

 

posted @   核桃MM  阅读(331)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示