工作中给不少没有SQL基础的同事培训过SQL语句。基本上有EXCEL透视表的使用经验,经过一个小时之内的讲解,就可以入门啦。
下面就快速开始吧。
1、SQL查询基础,一句话-(select from where group by order by)
以下是分句解释和执行步骤:
select 步骤4-对前三步处理过的数据进行选择或者聚合计算。具体可以看后面案例
from 步骤1-锁定数据所在的表,类比excel的sheet
where 步骤2-对表中的数据进行筛选,相当于excel的筛选功能
group by 步骤3-对筛选后的数据进行分组,相当于透视表里的行标签
order by 步骤5-对步骤4获得的数据进行排序,相当于excel的排序功能
2、案例:六月销售卖瓜明细表
excel原始数据如下,每行代表一条销售记录。
将数据通过Navicat导入mysql本地数据库里,长下面这样。
可以在导入的时候建表,这样不需要写语句。
也可以先建好表再导入数据。建表语句如下:
CREATE TABLE `sales` (
`name` varchar(50) DEFAULT NULL,
`datetime` datetime DEFAULT NULL,
`product` varchar(50) DEFAULT NULL,
`count` int(11) DEFAULT NULL,
`amount` decimal(11,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
分析一:选出 李四 在 6月2日 的销售记录
SQL语句和结果,以及和excel对比如下图
以下是sql代码和注释:
SELECT * -- * 表示把所有列都选出来
FROM `sales`
where name='李四' -- 筛选姓名
and date(datetime)='2020-06-02' -- 筛选日期,因为原始数据中有 时分秒,所以用date()换一下格式
分析二:计算每位销售人员在6月的总销量和总销售额
SQL语句和结果,以及和excel对比如下图。已经标注出执行步骤。
以下是sql代码和注释:
select name, -- 相当于透视表里的行标签
sum(count) as '总销量', -- 相当于透视表的求和项
sum(amount) as '总销售额' -- 相当于透视表的求和项
from `sales`
group by name -- 按照name分组,相当于透视表里的行标签
order by sum(amount) desc -- 排序,按照总销售额排序,desc表示从大到小
分析三:-- 计算每个产品在6月的总销量和总销售额
方法同分析二,强化一下。
分析四:-计算出6月每天各产品的销售额
SQL语句和结果,以及和excel对比如下图。已经标注出执行步骤。
这里多了一个case when的判断。
以下是sql代码和注释:
select date(datetime) as '日期', -- 相当于透视表里的行标签。因为原始数据中有 时分秒,所以用date()换一下格式
sum(case when product='西瓜' then amount else 0 end) as '西瓜销售额', -- 相当于透视表的求和项,只求和西瓜的销售额
sum(case when product='哈密瓜' then amount else 0 end) as '哈密瓜销售额' -- 相当于透视表的求和项,只求和哈密瓜的销售额
from `sales`
group by date(datetime) -- 按照日期分组,相当于透视表里的行标签
order by date(datetime) -- 按照日期排序
小结:经过上面的操作,可以简洁掌握sql的基础数据操作。
一些稍微复杂的逻辑可以借助百度和自己的理解进行拓展。
供学习交流。欢迎提问指正。