【三 (2)数据处理工具之 SQL (表连接)】

本文详细介绍了关系型数据库中表连接的基本概念、不同类型的连接(如内连接、左连接、右连接、全连接和交叉连接)及其语法和应用场景,重点展示了如何通过SQL操作实现这些连接方式并举例说明结果。
摘要由CSDN通过智能技术生成

文章导航

【一 简明数据分析进阶路径介绍(文章导航)】

一、什么是表连接

在关系型数据库中,数据存放在不同的表中,若需要同时使用多张表的数据,就需要用到表连接。表连接(JOIN)是在多个表中间通过一定的连接条件,使表之间发生关联进而能从多个表之间获取数据。这种操作通常用于从多个相关表中获取并组合数据。实际使用中最常用的是左连接(left join)。

二、表连接的分类

现在有一张表A包含(日期,系统,接口成功率)三个字段,共24条记录
在这里插入图片描述
一张表B包含(日期,系统,故障数)三个字段,共14条记录
在这里插入图片描述

1.内连接 (Inner Join)

a.介绍:只返回两个表中匹配的行。
b.语法:SELECT … FROM table1 INNER JOIN table2 ON table1.column = table2.column;
c.常用场景:当你想从两个表中检索匹配的记录时。

select A.TIME,A.SYSNAME,A.SUC,B.NUM from test_20240229 A
INNER JOIN
test_20240229_B B
ON A.TIME=B.TIME AND A.SYSNAME=B.SYSNAME;

结果如下:可以看到只返回了两个表中匹配的行,共14条

2.左连接 (Left Join 或 Left Outer Join)

a.介绍:返回左表的所有行,以及右表中匹配的行。如果右表中没有匹配的行,则返回 NULL。
b.语法:SELECT … FROM table1 LEFT JOIN table2 ON table1.column = table2.column;
c.常用场景:当你想查询左表中的所有记录,并且还想查询与右表匹配的记录时。

select A.TIME,A.SYSNAME,A.SUC,B.NUM from test_20240229 A
LEFT JOIN
test_20240229_B B
ON A.TIME=B.TIME AND A.SYSNAME=B.SYSNAME;

结果如下:可以看到返回了左表的所有行,以及右表中匹配的行,且右表中没有匹配的行,返回了 NULL,共24条
在这里插入图片描述

3.右连接 (Right Join 或 Right Outer Join)

a.介绍:返回右表的所有行,以及左表中匹配的行。如果左表中没有匹配的行,则返回 NULL。
b.语法:SELECT … FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;
c.常用场景:较少使用,通常当你想查询右表中的所有记录,并且还想查询与左表匹配的记录时。

select A.TIME,A.SYSNAME,A.SUC,B.NUM from test_20240229 A
RIGHT JOIN
test_20240229_B B
ON A.TIME=B.TIME AND A.SYSNAME=B.SYSNAME;

结果如下:可以看到返回了右表的所有行,以及左表中匹配的行,且左表中没有匹配的行,返回了 NULL,共14条
在这里插入图片描述

4.全连接 (Full Join 或 Full Outer Join)

a.介绍:返回左表和右表中的所有行。如果某侧没有匹配的行,则返回 NULL。
b.语法:SELECT … FROM table1 FULL JOIN table2 ON table1.column = table2.column;
c.常用场景:当你想查询两个表中的所有记录,无论它们是否匹配时。

select A.TIME,A.SYSNAME,A.SUC,B.NUM from test_20240229 A
FULL JOIN
test_20240229_B B
ON A.TIME=B.TIME AND A.SYSNAME=B.SYSNAME;

在表B中新增一条记录,这个系统D在表A中不存在
在这里插入图片描述
结果如下:可以看到返回了左表和右表中的所有行。且某侧没有匹配的行,则返回 了NULL,共25条
在这里插入图片描述

5.交叉连接(CROSS JOIN)

a.介绍:交叉连接返回左表中的所有行与右表中的所有行的组合。
b.语法:SELECT … FROM table1 FULL JOIN table2 ON table1.column = table2.column;
c.常用场景:当你想查询两个表中的所有记录的笛卡尔积时。

select A.TIME,A.SYSNAME,A.SUC,B.NUM from test_20240229 A
,test_20240229_B B
where a.TIME=to_date('2024-02-01','yyyy-mm-dd') and a.sysname='系统A';

结果如下:可以看到仅仅是2月1日的系统A就有15条数据(如果表A有M条记录,表B有N条记录,那么交叉连接的结果将包含M * N条记录)
在这里插入图片描述

三、总结

连接方式定义图示
内连接内连接返回两个表中连接字段相等的行。如果一行在其中一个表中没有匹配,那么该行就不会出现在结果集中在这里插入图片描述
左连接左连接返回左表中的所有行,以及右表中连接字段相等的行。如果左表的某行在右表中没有匹配行,则结果集中对应的右表部分将包含空值在这里插入图片描述
右连接右连接返回右表中的所有行,以及左表中连接字段相等的行。如果右表的某行在左表中没有匹配行,则结果集中对应的左表部分将包含空值在这里插入图片描述
全连接全连接返回左表和右表中的所有行。如果某行在另一个表中没有匹配行,则另一个表的选择列表列将包含空值在这里插入图片描述
交叉连接交叉连接返回左表中的所有行与右表中的所有行的组合。这种连接也称为笛卡尔积。A的记录数*B的记录数
  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值