上次内容讲解了SQL查询需要的基本元素。今天将继续介绍SQL查询的四大常用句式:① where过滤句式 ② group by分组句式 ③ order by排序句式 ④Having过滤句式。
句式1:where过滤句式
一般数据库表存储大量的信息,但是我们查询时并不需要用到所有数据。
这时就可以通过where过滤语句来筛选出指定的数据信息。
where过滤句式可以参考Excel中的筛选框的逻辑。
Excel筛选框可以筛选包含、等于、大于小于、介于等功能。
where过滤语句也能实现Excel筛选框的功能,而且相对来说更灵活,并且可以结合函数使用,大大降低了筛选操作的难度。
基本where过滤句式的用法如下:
select 字段1
from 表名
where name='张三' #条件
下图是常用的where过滤语句的操作符,联用能应付大部分筛选问题。
例1,现在有一张订单表 order,我们需要查询创建时间(created_time)在2019年1月10号-2019年6月底之间,注册城市(city)是北京、上海、广州这三个城市的订单信息(包括order_id,city,created_time,amount,product等)。
SQL代码如下:
select order_id,city,created_time,amount,product from order
where created_time>'2019-01-10' and created_time<'2019-07-01' and city in ('北京','上海','广州')
这个案例中我们用到了操作符>、<、and、in等,实现了需要完成的任务。
句式2:Group by 分组句式
就像where 过滤语句需要有操作符搭配运用,那么与Group by 分组语句并肩作战的就是聚合函数。
在学习Goup by 分组语句之前,首先需要了解下聚合函数的意义及用法。
聚合函数就是对对一组值执行计算,并返回一个值。
比如求平均就是一个聚合函数。
常用的聚合函数包含以下这些:
基本Group by 分组句式的用法如下:
select 字段1,字段2,count(*) 聚合函数
from 表名
group by 字段1,字段2
例2,现在有一张订单表 order,我们需要查询创建时间(created_time)在2019年1月10号-2019年6月底之间,注册城市(city)是北京、上海、广州的订单号数量,统计方式是按每月和城市统计。
SQL代码如下:
select left(created_time,7) 月份,city,count( order_id) 订单号数量
from order
where created_time>'2019-01-10' and created_time<'2019-07-01' and city in ('北京','上海','广州')
group by left(created_time,7) ,city
这个案例我们用到了count()函数、where过滤语句以及group by 分组语句。
解释下逻辑:
left(created_time,7) 取的是created_time的前7位,也就是年月, 加上city是我们需要分组的字段,count(order_id) 就是对这两个分组字段分别进行计数。
句式3:Order by 排序句式
通常人的阅读习惯是按顺序进行的,比如看新闻或者朋友圈时都是从早到晚的顺序刷新闻。
SQL中的order by 语句就是排序句式,用来实现排序的功能。
排序方法主要有以下2种情形:
基本Order by 排序句式的用法如下:
select 字段1,字段2
from 表名
order by 字段1,字段2
【小贴示】Order By 语句默认是按照升序排列。
例3,现在有一张订单表 order,我们需要查询创建时间(created_time)在2019年1月10号-2019年6月底之间,注册城市(city)是北京、上海、广州的订单号数量,统计方式是按每月和城市统计,且按月升序排列展示。
SQL代码如下:
select left(created_time,7) 月份,city,count( order_id) 订单号数量
from order
where created_time>'2019-01-10' and created_time<'2019-07-01' and city in ('北京','上海','广州')
group by left(created_time,7) ,city
order by left(created_time,7) #按月份排序,默认是升序排序
这个案例结合了where过滤语句、group by 分组语句和Order by 排序语句。
句式4:Having过滤句式
最后再介绍一种过滤语句-Having过滤语句。
为什么有了Where语句,还要学习Having语句?
主要的原因是WHERE过滤句式无法与聚合函数一起使用。
基本Having 过滤句式的用法如下:
select 字段1,字段2
from 表名
group by 字段1,字段2
having count(*)>100 #聚合函数
【小贴士】Having过滤由于要用到分组函数,所以必须要和Group by 分组句式联用。
例4,现在有一张订单表 order,我们需要统计创建时间(created_time)在2019年1月10号-2019年6月底之间,订单数量大于1000的城市名单。
代码如下:
select city,count( order_id) 订单号数量
from order
where created_time>'2019-01-10' and created_time<'2019-07-01'
group by city
having count( order_id)>1000 #订单数大于1000
总结:
where过滤句式,筛选你想要的信息
Group by分组句式,统计监控必备
Order by排序句式,提高阅读舒适感
Having过滤句式,聚合函数的筛选利器
有兴趣的童鞋可以扫描下方的二维码关注我的微信公众号:数据大作手。
定时分享Excel/SQL/Python的一些技巧与心得。
网友评论