SQL联合查询详解

本文介绍了数据库中的联合查询,包括内联、外联(左连接、右连接)和全连接的概念及应用场景。内联只保留两个表共有的数据,而外联则根据需求保留一侧表格的独有数据。全连接则展示所有数据,但MySQL不支持。外联中未匹配的数据用NULL填充,不连接查询会产生笛卡尔积。理解这些连接类型对于有效地从多表中提取信息至关重要。
摘要由CSDN通过智能技术生成

在查询时,一个实体的数据往往存在于不同表中,需要将表连接起来,联合查询便是在此场景下使用。
在开始联接前,先来讲讲表与表之间联接的条件。每个表中都会有标识一条数据的唯一字段,整个表中不会重复(可以想像一下身份证),称为主键(如果表中存在多个,可以设置)。借助主键与另一张表中具有相同数据的键值进行联接,从而实现联合查询。概念理论可能一脸懵,所以接下来会结合语句而谈。

内联

保留两个表都有的部分。

select * 
from tableA
join tableB 
on tableA.key = tableB.key  

外联

内联的缺点在于就仅会保留两个表都有的数据,这就意味着差集数据会丢失,在某些场景会出现问题,所以需要更多的联接方式来实现保留指定的未被匹配的行,这便是接下来要介绍的左连接,右连接与全连接。

左连接

保留A表独有与A和B表独有的数据,B中未被匹配上的数据会丢失。

select *
from tableA
left join tableB
on tableA.key = tableB.key

右连接

保留B表独有与A和B表独有的数据,A中未被匹配上的数据会丢失。

select *
from tableA
right join tableB
on tableA.key = tableB.key

全连接

保留A和B表的所有数据(Mysql不支持下种写法)。

select *
from tableA
full outer join tableB
on tableA.Key = tableB.Key

补充

外联中未被的匹配数据会用null进行填补。如果不进行连接而直接进行查询的话会返回两张表的笛卡尔积。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值