
前言
上篇文章,我们讲到了:什么是 SQL?什么是数据库?以及如何简单的使用 SQL?如果对这还不太清楚的话,建议翻回去熟悉一下再看这篇文章。
本片文章,我们就来详细的讲讲在日常数据分析工作中最常用的:数据查询语言(DQL)
一、SQL 查询基础点
1、查询所有列
基本结构:SELECT * FROM 数据库表名;
SELECT * FROM orderdata;
2、查询部分列
基本结构:SELECT 字段列表 FROM 数据库表名;
SELECT user_id FROM orderdata;
3、排序返回结果
基本结构:SELECT 字段列表 FROM 数据库表名 ORDER BY [ASC/DESC] ;
1)升序查询:
SELECT user_id,car_no FROM orderdata ORDER BY co_time ASC;
2)降序查询;
SELECT user_id,car_no FROM orderdata ORDER BY co_time DESC;
4、限制返回结果
1)返回前几行:关键字LIMIT
基本结构:SELECT 字段列表 FROM 表名 LIMIT 10;
SELECT user_id,car_no,co_time FROM orderdata ORDER BY co_time DESC LIMIT 10;
一般在两种情况下会使用:
① 想随便查看一下表中的数据;
② 一般与ORDER BY关键字配合使用,返回按某些字段排序后的前几行;
2)返回中间几行:关键字LIMIT M OFFSET N(从第N行开始,返回M行记录)
两种写法:
① 基本结构:SELECT 字段列表 FROM 数据库表名 LIMIT M OFFSET N;
SELECT user_id,car_no,co_time FROM orderdata ORDER BY co_time DESC LIMIT 10 OFFSET 2 ;
② 基本结构:SELECT 字段列表 FROM 数据库表名 LIMIT N,M;
SELECT user_id,car_no,co_time FROM orderdata ORDER BY co_time DESC LIMIT 2,10;
3)返回后几行: 关键字LIMIT、ORDER BY
第1步:先按取车时间倒序排序;
第2步:返回排序后的前10行;
第3步:将前10行数据升序排序;
SELECT * FROM (
SELECT * FROM orderdata ORDER BY co_time DESC LIMIT 10
)ORDER BY co_time ASC
5、使用WHERE子句过滤数据
基本结构:SELECT 字段列表 FROM 数据库表名 WHERE 过滤条件;
过滤条件一般由要过滤的字段、操作符、限定值三部分组成;
SELECT user_id,car_no,car_type FROM orderdata WHERE car_type = '保时捷';
6、常用操作符

7、使用通配符过滤数据
使用通配符过滤数据:关键字LIKE

SELECT user_id,user_name,car_type FROM orderdata WHERE user_name LIKE '李%';
SELECT user_id,user_name,car_type FROM orderdata WHERE user_name LIKE '%飞';
SELECT user_id,user_name,car_type FROM orderdata WHERE user_name LIKE '李_轩';
二、使用 SQL 进行数据分析
1、使用组合查询合并结果集 :UNION ALL 与 UNION
相同点:都是用来合并多个结果集
不同点:UNION ALL合并结果集后不去除重复记录; UNION合并结果集后去除重复记录;
SELECT * FROM student WHERE age = 10
UNION SELECT * FROM student WHERE class_id = 'G0101'
UNION SELECT * FROM student WHERE gender = '男';
2、常用汇总统计
总共有多少名学生?
SELECT COUNT(*) FROM student;
所有学生的数学成绩总和?
SELECT SUM(score) FROM student;
所有学生的数学成绩最高分?
SELECT MAX(score) FROM student;
所有学生的数学成绩最低分?
SELECT MIN(score) FROM student;
所有学生的数学成绩平均分?
SELECT AVG(score) FROM student;
3、分组汇总统计
如何获取每个班级的成绩平均分,以便比较不同班级的成绩?
基本结构:SELECT * FROM 数据库表名 GROUP BY 字段列表;
SELECT class_id,avg(score) FROM student GROUP BY class_id;
4、SELECT子句顺序

获取每个班级的数学成绩平均分(不计算成绩在80分以下的学生且过滤掉平 均分在90分以下的班级),然后以平均分从高到低排序?
SELECT class_id,avg(score) FROM student WHERE score > 80 GROUP BY class_id HAVING avg(score) > 90 ORDER BY avg(score) DESC;
5、常见数值函数

6、常见文本函数

7、常见日期和时间函数

下一篇文章,咱们来讲讲如何使用 SQL关联多张数据表进行数据分析,敬请期待...