产品经理学SQL(二)一天学会用SQL解决业务查询问题(上篇)

我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  

本篇文章意在帮助大家系统地入门SQL,教大家如何解决sql查询任务。

产品经理学SQL(二)一天学会用SQL解决业务查询问题(上篇)

前言

回顾一下,上一篇文章我们已经知道了SQL语言的基本框架,并能完成简单的单表查询和双表连接查询。 这篇文章希望能帮助你系统地入门SQL,从而解决产品经理80%的sql查询任务

和上篇的一个小时入门SQL一样, 这篇文章的建议学习时间为一天 。如果没看过上篇文章或想回顾的可以点击: 产品经理学SQL(一)一个小时上手SQL

本文用到的数据库

为方便学习,我们仍然使用上篇文章用到的学生表student和成绩表sc,为了模拟业务中复杂的查询任务,我们再引入课程表course和教师表teacher。

熟练使用SQL的前提一定是先了解你的数据库表 ,现在花点时间看看这四张表的字段信息(描述每个字段的意义)和数据样例(给出部分真实数据),关于业务中用到表的结构可以找数据小哥拿。

1. 字段信息

1.1 学生表

Student(SId,Sname,Sage,Ssex)

SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别

1.2 课程表

Course(CId,Cname,TId)

CId 课程编号,Cname 课程名称,TId 教师编号

1.3 教师表

Teacher(TId,Tname)

TId 教师编号,Tname 教师姓名

1.4 成绩表

SC(SId,CId,score)

SId 学生编号,CId 课程编号,score 分数

2. 数据样例

2.1 学生表

产品经理学SQL(二)一天学会用SQL解决业务查询问题(上篇)

2.2 课程表

产品经理学SQL(二)一天学会用SQL解决业务查询问题(上篇)

2.3 教师表

2.4 成绩表

SQL的执行顺序与语法顺序

本篇文章关于SQL语法的部分会讲到 条件子句 (where子句)、 分组查询 (group by子句和having子句)、 结果呈现 (order by和limit)和 连接查询 (left/right/inner join)。

看到这你可能会瞬间头大,但是由于SQL语言是有 执行优先级 的,这给了我们 分块讲解 的机会,私以为这也是SQL语言易学的重要原因。

为了解释清楚SQL语言的执行顺序和语法顺序,让我们先看看下面这个Hive单表查询的完整结构。

任何一个单表查询的SQL都可以分解成上述格式,实际上抽象化后的多表连接查询也可以分解成如上格式。从上到下是SQL的语法顺序(即你书写SQL的格式),而SQL真实的执行顺序如下:

举个简单的例子加深理解:SQL的语法顺序就像小说的插叙,而SQL真正的执行顺序就是小说的时间顺序。

通过一个实例复习SQL的执行顺序

上面的讲解可能让你一知半解,在正式介绍各部分SQL语法前我们先通过一个实例复习上面SQL的执行顺序。

例如,有这么一个业务查询任务:在限定学生表学号小于等于6的一批学生中,查询每门课的最高成绩(最高成绩低于70分的课程不显示),然后根据课程最高成绩降序排列取前两条记录。查询的SQL如下:

为方便阅读,下面列出被查询的成绩表sc和查询后的结果:

1. 条件子句——为被查询的表增加限制条件

where sid<=6#限制只查询学号小于等于6的学生成绩

2. 分组查询——实现聚合(group by&函数)限制聚合条件(having)

如果用过数据透视表的话应该比较容易理解分组查询的概念,分组查询一般和聚合函数一起实现,例如查看每个班的平均成绩、查看每个学生的最高成绩或者查看每个班的最低成绩等分组信息。

我们仍然用直观的数据变化来展示分组查询:

group by cid –按照课程分组查看每门课的聚合信息

max(score) –搭配group by子句使用的聚合函数,表示每门课的最高成绩

having max(score) >=70 –对分组后的结果筛选,选取最高成绩>=70的课程

3. 字段选择——select

在group by分组后紧跟着我们会选择需要呈现的字段,为了方便讲解,其实 分组查询 中呈现的图片已经是select的结果了。

4. 结果呈现——排序(order by )和限制条数(limit)

order by和limit都是为了修改最终呈现结果。order by首先执行,按照某个字段进行排序(desc 关键字表示降序),这部分和excel的排序很相似。最后我们使用limit来修改结果展示的条数。

后续学习

本篇文章的目的主要是帮助非技术人员在初步知晓SQL语句的情况下在一天之内系统入门SQL,从而解决80%的sql查询问题。

但是由于建议学习时间为一整天,全部内容置于一篇文章一方面过于冗长,另一方面影响读者趁热打铁(作者是上班族,更新比较慢哈望谅解~), 因此我把一天学会用SQL解决业务查询问题分为上中下三篇

上篇已经介绍了SQL的语法顺序和执行顺序的区别并仔细剖析了SQL的执行顺序;中篇会详细介绍条件子句、分组查询和排序的细节;下篇会介绍表的连接和其他常用关键字:if、case when和ditinct等。

希望学完这三篇后能助你系统地入门SQL~

 

作者:Tomocat,女朋友是产品经理的数据分析师。

本文由 @Tomocat 原创发布于人人都是产品经理,未经许可,禁止转载。

题图来自 Unsplash,基于CC0协议。

给作者打赏,鼓励TA抓紧创作!
5人打赏

随意打赏

提交建议
微信扫一扫,分享给好友吧。