如何利用SQL快速合并多表数据

2 年前 · 来自专栏 数据分析

今天是干货日,主题是 联结多表查询

一、表的加法(union)

  1. 用法

select <列名1><列名2> from table, union select <列名1><列名2> from table2,会删除两个表中的重复数据

select <列名1><列名2> from table, union all select <列名1><列名2> from table2,会保留两个表中的数据

我们可以看到在我们但用union的情况下,自动 删除 了两个表的重复值,0001,语文。

如果我们用 union all 的话,就是会 保留 重复值

2. 注意事项

  • 作为运算对象的记录的列数必须相同。
  • 作为运算对象的记录中列的类型必须一致。

二、表的联结

  1. 交叉联结(cross join)

本质上就是用第一个表的数据,和第二个表的数据,交叉相乘的然后组成新表的过程

交叉联结,是所有的联结的基础,本质上我们后来学的所有联结都会按照这个方法进行联结,但是,我们也可以很明显的看出,交叉联结出的结果实在是太多了,这就造成了我们需要大量的资源和时间去分析其结果,并且,这么庞大的数据集,很可能实际运用意义不大。因此,我们很少会用交叉联结。

2. 内联结(inner join)

找出同时存在于两张表中的数据,然后进行组合,形成新表

  1. 表达形式

select A . <> B. <> from table as A inner join table2 as B on A. <> = b.<>

3. 左联结(left join
以左边的表为主表进行交叉联结,如果左边的表中有的行,右边没有对应数据,则显示为null

select A . <> B. <> from table as A left join table2 as B on A. <> = b.<>

左边表格有的数据,都会存在,如果右边表格没有对应数据,则会显示null

与之相对应的就是我们的 右联结(right join), 右联结的情况跟左联结基本相同,只不过是从以左边表格的相应数据作为参考,然后从右边表格中找到我们的对应数据。

4. 全联结(full join)

保留左右两个表中的全部数据,如果找到了对应行,则合并数据,否则,在对应处填写空值。由于MySQL是不支持全联结的,因此,我们在这里仅作为了解。

5. 运行顺序

我们的惯例嘛,只要是讲了新语句,一定会写将运行顺序。JOIN的语句的运行顺序和from语句是一样的,这里放张图,大家在复习一下下

三、case表达式

我自己的话,学习下来感觉case表达式特别像我们的条件语句,如果,达成条件1,那么,输出,结果1。

在SQL里面的表达式的形式就是,

case when <判断表达式> then<表达式>

when <判断表达式> then<表达式>
各种循环

else<表达式>
end

栗子!!噔噔,热乎乎的

栗子: 查询到及格的学生和不及格的学生。

今天的分享就到这里啦,都是超级好用的方法。

发布于 2020-11-17 18:39

文章被以下专栏收录

    数据分析

    数据分析

    一起成为终生学习的数据分析师吧