工作中给不少没有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原始数据如下,每行代表一条销售记录。




mysql建表语句datetime mysql建表语句日期_mysql 建表语句 及完整案例


将数据通过Navicat导入mysql本地数据库里,长下面这样。


mysql建表语句datetime mysql建表语句日期_mysql 建表语句 及完整案例_02


可以在导入的时候建表,这样不需要写语句。

也可以先建好表再导入数据。建表语句如下:

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对比如下图


mysql建表语句datetime mysql建表语句日期_批量查询sql语句_03


以下是sql代码和注释:

SELECT * -- * 表示把所有列都选出来
FROM `sales`
where name='李四' -- 筛选姓名
and date(datetime)='2020-06-02' -- 筛选日期,因为原始数据中有 时分秒,所以用date()换一下格式

分析二:计算每位销售人员在6月的总销量和总销售额

SQL语句和结果,以及和excel对比如下图。已经标注出执行步骤。


mysql建表语句datetime mysql建表语句日期_三个表查询sql语句_04


以下是sql代码和注释:

select name, -- 相当于透视表里的行标签
sum(count) as '总销量', -- 相当于透视表的求和项
sum(amount) as '总销售额' -- 相当于透视表的求和项
from `sales`
group by name -- 按照name分组,相当于透视表里的行标签
order by sum(amount) desc -- 排序,按照总销售额排序,desc表示从大到小

分析三:-- 计算每个产品在6月的总销量和总销售额

方法同分析二,强化一下。


mysql建表语句datetime mysql建表语句日期_日期查询sql语句_05


分析四:-计算出6月每天各产品的销售额

SQL语句和结果,以及和excel对比如下图。已经标注出执行步骤。

这里多了一个case when的判断。


mysql建表语句datetime mysql建表语句日期_批量查询sql语句_06


以下是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的基础数据操作。

一些稍微复杂的逻辑可以借助百度和自己的理解进行拓展。

供学习交流。欢迎提问指正。