前言之前我们已经用一个例子介绍了SQL的语法顺序和执行顺序,想必现在你已经知道了一个完整的SQL包括条件子句(关键字where)、分组查询(关键字group by)、字段选择(关键字select)和结果呈现(关键字order by)。本篇我们旨在将实务中最常出现的详细情况进行说明,从而解决产品经理80%的sql查询任务。 产品经理学SQL(二)一天学会用SQL解决业务查询问题系列共包括前中后三篇,建议学习时间为一天。 想回顾之前内容的可以点击: 条件子句(where)1. 比较运算符(适用于区间)比较运算符包括=(等于),>=(大于等于),<=(小于等于),!=(不等于),>(大于),<(小于)。 例如:查询年龄sage小于30的学生 where sage < 30 2. 确定范围(适用于连续范围)between … and …为取值限定了一个范围。 例如:查询年龄大于等于10小于等于20的学生 where sage between 10 and 20 3. 确定集合(适用于离散的少数值)例如:插入年龄为10,20,30的学生 where sage in (10,20,30) **in可以和not一起使用,表示不在这个区间的值 **where sage not in (10,20,30) 4. 字符匹配(模糊查询)通过like关键字和正则表达式匹配,常用的通配符有%(任意个字符)和_(一个字符)。 例如:查询名字sname带“王”的学生 where sname like “%王%” 5. 判断是否为空值通过is null关键字判断值是否为空。 例如:查询姓名sname不为空的学生 where sname is not null 6. 多个查询条件用and(两个条件同时满足)和or(两个条件满足一个即可) 例如:查询年龄sage小于20且性别ssex为男的学生 where sage<20 and ssex=’男’ 一、分组查询(group by&聚合函数&having子句)分组查询实现了类似excel中数据透视表的功能,可以帮助我们对数据进行分层汇总,而我们对分层后的数据进行统计的时候需要用到聚合函数(也就是平均值、求和、最大值和最小值等),最后我们对分层之后的数据筛选的时候需要用到having子句。 **where子句是对原始表做筛选的 **having子句是对分层汇总之后的结果做筛选的 回顾我们上一篇讲过的例子:在限定学生表学号小于等于6的一批学生中,查询每门课的最高成绩(最高成绩低于70分的课程不显示),然后根据课程最高成绩降序排列取前两条记录。 查询的SQL如下: 回顾一下执行顺序,首先我们用where子句对原始数据做了学号id需要小于等于6的限制。然后我们用group by和max(score)聚合函数实现了对课程进行分层,求出每门课的最高成绩,为了对聚合之后的结果作限制,我们用having子句只展示最高分数大于等于70的记录。 关于这个例子详细解释可以回顾上篇文章,下面我们详细介绍每个部分的常用语句。 1. group bygroup by不仅可以对一个字段进行分组,还能对多个字段进行分组。这和excel中的数据透视表一致。 2. 聚合函数3. having子句和where子句一致,只需注意是对聚合后的结果作限制。 二、字段选择(select)select比较灵活,我们不单单能选择原始数据表的字段,还能使用函数对字段进行计算,正如我们第一篇提到的,函数并不是重点,当你需要的时候百度或者问技术小哥就知道了。我们这里只简单介绍一下可以对字段进行计算。 例如:查询各学生的年龄(通过公式计算年龄) 三、结果呈现(order by)
例如:查询学生id和年龄,并先按照学号sid降序,再按照年龄sage升序排列 四、后续学习本篇文章的目的主要是帮助非技术人员在初步知晓SQL语句的情况下在一天之内系统入门SQL,从而解决80%的sql查询问题。 但是由于建议学习时间为一整天,全部内容置于一篇文章一方面过于冗长,另一方面影响读者趁热打铁(作者是上班族,更新比较慢哈望谅解~),因此我把一天学会用SQL解决业务查询问题分为上中下三篇。 上篇已经介绍了SQL的语法顺序和执行顺序的区别并仔细剖析了SQL的执行顺序;这篇详细介绍了条件子句、分组查询和排序的细节;下篇会介绍表的连接和其他常用关键字。 希望学完这三篇后能助你系统地入门SQL~ 作者:Tomocat,女朋友是产品经理的数据分析师。 |
|