数据清洗是数据分析的基石,在数据清洗流程中,经常需要对数据进行筛选、填充、变换等操作。而这些操作常常需要用到多个表之间的关联。所谓关联,是指不同表格之间存在相互联系的情况,即数据中的某些字段在不同的表格中共享。在本文中,我们将介绍三种不同的表关联方式,帮助读者掌握数据清洗的必备技能。
第一种表关联方式:内连接
内连接是指在两个表格中,只有在某些列同时存在相同值才会被输出。换言之,只有那些在两个表格中都有对应的值才会被输出。这种方式就像是两个圆的交集,只有交叉的部分被保留。
现在我们假设有两个表格,分别为销售表和产品表。销售表格主要记录了每一次销售的日期、销售数量和所售产品的ID,而产品表格主要记录了每件产品的名称、售价和ID等基本信息。我们希望通过内连接的方式,将销售表格和产品表格联合起来,以便能够在一个表格中查看销售信息和产品信息。下面是这两个表格的结构示意图:
销售表格
日期 销售数量 产品ID
2018-01-01 10 1
2018-01-02 15 2
2018-01-03 20 1
产品表格
ID 产品名称 售价
1 产品A 100
2 产品B 200
3 产品C 300
可以发现,这两个表格之间有一个共同的字段,即Sales表格中的产品ID和Product表格中的ID。因此,我们可以通过ID这个字段来建立两个表格之间的关联,具体的代码如下所示:
SELECT Sales.日期, Sales.销售数量, Product.产品名称, Product.售价
FROM Sales
JOIN Product
ON Sales.产品ID = Product.ID;
这段代码相当于将Sales和Product这两个表格通过产品ID这个字段联接起来,并选取了需要的字段,例如日期(Sales.日期)、销售数量(Sales.销售数量)、产品名称(Product.产品名称)和售价(Product.售价)。输出的结果如下所示:
日期 销售数量 产品名称 售价
2018-01-01 10 产品A 100
2018-01-02 15 产品B 200
2018-01-03 20 产品A 100
可以发现,由于产品A在两个销售日期中都售出了,因此它在输出的表格中出现了两次。而那些只在某一个表格中出现的数据,将无法在输出的表格中出现。
第二种表关联方式:左连接
左连接是指将“左”表格的所有记录都保留下来,而右表格有对应的记录则保留,否则用NULL填充。 以一个例子来说明,现在我们有两张表:一个是出版社表,另一个是书籍表。出版社表主要包括出版社的编号和名称,而书籍表包括书籍的编号、出版社编号、书名和售价。如果我们想要查看所有书籍的信息,包括出版社名称,那么我们就需要通过左连接的方式把这两个表联合起来。
左连接的语法如下:
SELECT column_name(s)
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;
这里的 LEFT JOIN 表示做左连接。具体而言,table1 是左表,table2 是右表,ON 后跟的是这两个表格所共有的字段。下面我们来具体操作:
出版社表
ID 名称
1 凤凰出版社
2 鹰出版社
3 大象出版社
书籍表
编号 出版社编号 书名 售价
1 3 小团团 30.00
2 2 成考 50.00
3 1 大猪猪 20.00
4 3 螃蟹走了夏天的最后一天 40.00
要查看每一本书的信息及它所在的出版社,我们需要以书籍表为左表,以出版社表为右表进行左连接。具体的代码如下:
SELECT 书籍表.编号,书籍表.书名,出版社表.名称
FROM 书籍表
LEFT JOIN 出版社表
ON 书籍表.出版社编号 = 出版社表.ID;
这段代码的含义为:从“书籍表”中查找出书籍的编号、书名,然后与出版社表左连接,以找到出版社名称。
输出结果如下:
编号 书名 名称
1 小团团 大象出版社
2 成考 鹰出版社
3 大猪猪 凤凰出版社
4 螃蟹走了夏天的最后一天 大象出版社
从结果可以看出,书籍表中的所有记录都被保留了下来,而没有在出版社表中列出的出版社则用 NULL 填充。
第三种表关联方式:外连接
外连接不同于内连接和左连接,它是将两个表格中没有关联的数据进行填充。它包括左外连接和右外连接。若是左外连接,就是包括返回左表中所有行与右表匹配的行;而右外连接,则是返回右表中所有行与左表匹配的行。因为有外连接,所以会出现空值(NULL)。
下面仍以销售和产品表为例,假设现在我们想要查看所有的销售信息,同时保留未售出的产品信息。这种情况下,我们需要使用到外连接。
外连接的语法如下:
SELECT column_name(s)
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name
UNION
SELECT column_name(s)
FROM table2
LEFT JOIN table1 ON table1.column_name = table2.column_name
WHERE table1.column_name IS NULL;
这一段代码中,使用了 UNION 子句,将左连接和右连接组成了完整的外连接查询。具体而言,LEFT JOIN 表示做左外连接,UNION 是两个 SELECT 语句的并集,同时 RIGHT JOIN 表示做右外连接,其中 WHERE table1.column_name IS NULL 是一个辅助条件,用于过滤掉表格之间的重复记录。
在这个例子中,我们将右外连接和左外连接的结果合并,以得到完整的销售和产品信息。具体代码如下:
SELECT Sales.日期, Sales.销售数量, Product.产品名称, Product.售价
FROM Sales
LEFT JOIN Product
ON Sales.产品ID = Product.ID
UNION
SELECT Sales.日期, NULL, Product.产品名称, Product.售价
FROM Sales
RIGHT JOIN Product
ON Sales.产品ID = Product.ID
WHERE Sales.日期 IS NULL;
这段代码相当于将Sales表和Product表做了联接,连接方式是左连接和右连接,然后选取了需要的字段,例如日期(Sales.日期)、销售数量(Sales.销售数量)、产品名称(Product.产品名称)和售价(Product.售价)。同时,通过 UNION 关键字将左右表格连接起来。
最后,我们来看一下这段代码的输出结果:
日期 销售数量 产品名称 售价
2018-01-01 10 产品A 100.0
2018-01-02 15 产品B 200.0
NULL NULL 产品C 300.0
2018-01-03 20 产品A 100.0
可以发现,左连接和右连接分别带来了具有完整日期和产品信息的销售信息和未售出的产品信息。因此,外连接是数据清洗过程中常用的重要技巧之一。
总结:
本文介绍了三种常见的表关联方式:内连接、左连接和外连接。内连接是将两个表格中共有的数据进行输出,左连接是将左表中的所有记录都保留下来,而右表中有对应的记录则保留,否则用 NULL 填充,而外连接能够保留整个数据集的完整性。掌握这三种表关联方式非常重要,能够帮助数据分析师更好地进行数据清洗与分析。