暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql 工作中常用的技能(三)

数据分析从0到1 2021-10-02
202

前言

上一章节我们讲解了mysql中的子查询,在最后一个案例里面用到了连接,这章节我们就讲一下msyql的连接。在上章节中有两个筛选条件where 和 having ,在这里我们会大致讲一下两者的区别。

where和having的区别

where:行级别的操作【不能跟聚合函数】,通常是筛选数据中每行的需要过滤/展示 的数据,作用于表和视图。


having:分组后条件筛选【可跟聚合函数,也叫做聚合选择】,不能够单独使用,需要在group by xxx 后面使用,作用于组。

两者一般组合使用是:where + group by + having + 查询函数

mysql的几种连接讲解

讲这一章节的时候我突然想起来,在18年的时候,同事曾经执行了一个内连接,当时两张表大小都是接近千万条数据,然而当时忘记写等值条件,造成了“笛卡尔积”,最后造成mysql服务宕机。


这件事让我记忆颇清,因为后续我需要恢复数据,补一些脚本,花了比较长时间。所以后面同学 别忘记写等值条件。


先说一下什么是“笛卡尔积”,看百度解释:



这样看也没有直接的感觉,现在看下面的案例:



这个还是两个2行的小表造成的 2*2=4 行的表,这样大家感觉没啥感觉,但是当 千万*千万 的时候,数字后的 0 我们都有看好一会吧。


有两组表:a_table 和 b_table:




1、内连接 


内连接查询,就是取左连接和右连接的交集,如果两边不能匹配条件,则都不取出。


关键字:inner  join   on


语句:


select * from a_table a inner join b_table b on a.id = b.id;
复制


结果是:


2、左连接


左连接查询即【左表】在左不动,【右表】在右滑动,表】通过一个关系来关联行,去匹配表】,【右表】记录不足的地方均为NULL 。注:left join 是left outer join的简写。


关键字:left join on


语句:

SELECT  * FROM a_table a left join b_table b ON a.id = b.id;
复制


结果是



筛选条件:左表中去除共同数据

select * from a_table t1 left join b_table t2 on t1.id = t2.id where t2.id is null
复制




结果是



3、右连接


右连接是以【右表】为主表,会将【右表】所有数据查询出来,而【左表】则根据条件去匹配,如果【左表】没有满足条件的行,则左边默认显示NULL。


关键字:right join on


语句:

SELECT  * FROM a_table a right outer join b_table b on a.id = b.id;
复制

结果是

筛选条件:右表中去除共同数据

select * from b_table t1 left join a_table t2 on t1.id = t2.id where t2.id is null
复制

结果是


4、合并


union语句注意事项:

  • 通过union连接的SQL它们分别单独取出的列数必须相同;

  • 不要求合并的表列名称相同时,以第一个sql 表列名为准;

  • 使用union查询会将重复的行过滤掉;

  • 使用union all查询所有,重复的行不会被过滤;


关键字:union /union all


union 的使用

select id from b_table union (select id from a_table)
复制


union all 的使用

select id from b_table union all (select id from a_table)
复制




本章节也是mysql实操讲解的最后一章,介绍了工作中常使用mysql连接,前几章节包含安装基础查询关键词讲解、去重、排序子查询、连接。虽然内容不多,没有包含更多的表操作,但是对于数据分析提取和分析数据是够用了。


其中大部分业务场景都是交叉类型的,这样就需要不同的语句交叉使用,但是核心的还是文章介绍的哪些。在后期就是孰能生巧,多练习。

文章转载自数据分析从0到1,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论