mysql合并两张表为新表_如何利用SQL快速合并多表数据

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

520744a025b1d17d606d56c9747768f7.png

95445f50fb28612e551f02e79a736569.png

一、表的加法(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,会保留两个表中的数据

29fc81d34c105fe8837d135a9df8bc0b.png

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

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

f80186778badc36cdc3cfd67440d23b1.png

2. 注意事项

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

二、表的联结

  1. 交叉联结(cross join)

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

2b77f0de2be77e1a097bcf4d7410b35c.png

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

2. 内联结(inner join)

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

  1. 表达形式

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

b87f35230855de9cc960f8975f824656.png

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

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

940e8c782564cf5e7954d2e979a20eee.png

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

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

4. 全联结(full join)

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

5. 运行顺序

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

a4618a56b9c55361ecf8ea64a4e344ba.png

三、case表达式

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

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

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

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

else<表达式>
end

栗子!!噔噔,热乎乎的

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

99162b0ebb0ab506ef134ad02d8a5189.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值