mysql 的连接查询及合并查询

本文详细介绍了MySQL中的连接查询,包括内连接、左连接、右连接等类型,并通过具体实例展示了不同连接方式的区别。同时,还讲解了如何使用union和union all进行合并查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysq 的连接查询分为内连接查询及外连接查询

内连接查询:inner join on:两边的数据进行笛卡尔积操作。

外链接查询:left join:以左边为主。righr join:以右表为主。

创建测试表:

create table join2(
id int auto_increment not NULL primary KEY,
name varchar(30)
)
engine = innodb DEFAULT charset=utf8;
create table join1(
id int auto_increment not NULL primary KEY,
name varchar(30)
)
engine = innodb DEFAULT charset=utf8;

insert into join1(name) values
('1'),('2'),('3'),('4');

insert into join2(name) values
('1'),('2'),('5');

join1表数据:

join2表数据:

left join:select * from join1 a left join join2 b on a.name = b.name;

查看sql结果

 

即以左表为主,在右表中寻找符合on条件的数据,如果不匹配,右边对应数据显示为空。

right join:select * from join1 a right join join2 b on a.name = b.name;

查看sql结果

即以右表为主,在左表匹配符合on条件的数据,如果不匹配。左边对应数据显示为空

inner join(也简写成join):select * from join1 a inner join join2 b on a.name = b.name;

查看sql结果:

即求左右表数据的笛卡尔积。简单的理解成,只匹配两边都有数据的记录,只要有一边没有对应匹配记录,则不不将记录加入结果中。例:join1表的name=4是独有的,join2表没有,所以结果中没有name=4,同样,join2表的name=5是独有的,join1没有匹配这个数据,则结果也没有name=5

 

合并查询:分为union和union all

union:删除重复记录,返回的行都是唯一的。 确保两个查询的列数一样。

union all:不删除重复记录也不对结果进行自动排序。确保两个查询的列数一样

这里要注意,合并的两个查询的结果集,字符集要一样,即我们创建表的时候设置的charset=utf8;

union:

SELECT a.name FROM join1 a

UNION 

SELECT b.name FROM join2 b;

结果

可以清晰看到,重读的数据合并了!

union all:

 SELECT a.name FROM join1 a
UNION all 

SELECT b.name FROM join2 b;

结果

可以清晰看到重复的数据没有合并,全部显示!

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值