SQL基础入门笔记 | 从零基础到掌握核心查询语句

课程:B站大学

记录学习数仓开发,进阶数据分析和数据处理

sql语言基础

  • [数据分析SQL基础入门笔记 | 从零基础到掌握核心查询语句](#数据分析SQL基础入门笔记 | 从零基础到掌握核心查询语句)
    • 目录
    • 一、SQL简介与工具安装
      • [1.1 什么是SQL?](#1.1 什么是SQL?)
      • [1.2 为什么数据分析师要学SQL?](#1.2 为什么数据分析师要学SQL?)
      • [1.3 常用SQL工具介绍](#1.3 常用SQL工具介绍)
    • 二、SQL语言基础语法
      • [2.1 第一条SQL语句](#2.1 第一条SQL语句)
      • [2.2 实际操作:查看表结构](#2.2 实际操作:查看表结构)
      • [2.3 指定字段查询](#2.3 指定字段查询)
    • [三、WHERE条件筛选与ORDER BY排序](#三、WHERE条件筛选与ORDER BY排序)
      • [3.1 user表结构介绍](#3.1 user表结构介绍)
      • [3.2 WHERE条件筛选](#3.2 WHERE条件筛选)
      • [3.3 ORDER BY结果排序](#3.3 ORDER BY结果排序)
    • [四、GROUP BY分组聚合与HAVING筛选](#四、GROUP BY分组聚合与HAVING筛选)
      • [4.1 从Excel透视表理解SQL分组](#4.1 从Excel透视表理解SQL分组)
      • [4.2 常用聚合函数](#4.2 常用聚合函数)
      • [4.3 GROUP BY基本用法](#4.3 GROUP BY基本用法)
      • [4.4 多字段分组](#4.4 多字段分组)
      • [4.5 HAVING ------ 分组后的筛选](#4.5 HAVING —— 分组后的筛选)
      • [4.6 SQL语句的执行顺序](#4.6 SQL语句的执行顺序)
    • 五、SQL基础练习实战
      • [5.1 练习题1:用户年龄分布统计](#5.1 练习题1:用户年龄分布统计)
      • [5.2 练习题2:年龄分段统计](#5.2 练习题2:年龄分段统计)
      • [5.3 练习题3:每日订单金额汇总](#5.3 练习题3:每日订单金额汇总)
      • [5.4 练习题4:高价值订单筛选](#5.4 练习题4:高价值订单筛选)
    • 六、学习总结与技巧
      • [6.1 必背核心语法](#6.1 必背核心语法)
      • [6.2 新手常见错误](#6.2 新手常见错误)

数据分析SQL基础入门笔记 | 从零基础到掌握核心查询语句

作为一名数据分析测试工程师,最近在系统学习SQL语言。这篇博客是我跟着B站数据分析课程(BV1AdeT6mEDS 第18-22集)整理的学习笔记,涵盖SQL入门、基础语法、条件筛选、分组聚合等核心知识点,有图有示例,适合零基础的小伙伴参考学习。


目录


一、SQL简介与工具安装

1.1 什么是SQL?

SQL(Structured Query Language,结构化查询语言)是一种用于管理关系数据库的标准编程语言。对于数据分析师来说,SQL是最核心的技能之一,主要用于:

  • 数据提取:从数据库中查询所需的数据
  • 数据清洗:过滤、转换、清洗原始数据
  • 数据分析:聚合、分组、统计计算
  • 数据报表:为可视化和报表提供数据支撑

1.2 为什么数据分析师要学SQL?

在实际工作中,数据通常存储在数据库或数据仓库中,而不是Excel里。作为数据分析师:

  • 效率更高:相比Excel处理百万级数据,SQL查询速度快几个数量级
  • 可复用:写好的SQL语句可以反复运行、自动化
  • 行业标准:几乎所有互联网公司的数据分析岗位都要求掌握SQL
  • 业务价值:直接从数据源取数,更接近业务本质

1.3 常用SQL工具介绍

课程中使用的是 Navicat 作为SQL客户端工具,这是一款非常流行的数据库管理工具,支持MySQL、PostgreSQL、Oracle等多种数据库。

Navicat基本操作流程:

  1. 连接到数据库服务器
  2. 选择目标数据库(课程中使用的是 learning 数据库)
  3. 点击"新建查询"打开SQL编辑器
  4. 编写SQL语句
  5. 按 Ctrl + R 运行查询

二、SQL语言基础语法

2.1 第一条SQL语句

学习任何编程语言,都是从"Hello World"开始。SQL的第一条语句就是:查询整张表的数据。

sql 复制代码
-- 查询order表的所有字段、所有行
SELECT * FROM `order`;

语法解析:

关键字 作用
SELECT 指定要查询哪些字段
* 代表表中的所有字段
FROM 指定从哪张表查询数据
表名 用反引号包裹表名,避免和关键字冲突
; 语句结束的标志,每条SQL语句末尾必须加分号

2.2 实际操作:查看表结构

在写复杂查询之前,首先要知道表里有哪些字段。课程中教了一个非常实用的技巧:先用 LIMIT 10 查看表的前10行数据。

sql 复制代码
-- 先查看user表的前10行,了解表结构
SELECT * FROM `user` LIMIT 10;

为什么要用LIMIT?

  • 直接 SELECT * FROM user 会返回全表数据,可能有几百万行,非常慢
  • 加上 LIMIT 10 只返回前10行,既能看清表结构,又能快速执行

2.3 指定字段查询

知道了表结构后,就可以只查询需要的字段,而不是全部字段:

sql 复制代码
-- 只查询user_id和city两个字段
SELECT user_id, city FROM `user`;

实战示例:

sql 复制代码
-- 查询order表的order_id、order_date、sku、amount字段
SELECT order_id, order_date, sku, amount 
FROM `order`;

三、WHERE条件筛选与ORDER BY排序

3.1 user表结构介绍

课程中使用了两张示例表:order(订单表)和 user(用户表)。

user表包含以下字段:

字段名 含义 示例
user_id 用户ID(主键) 1001
age 用户年龄 25
gender 性别 男/女
city 所在城市 北京
register_date 注册日期 2023-01-15
gold 金币数量 100
orders 订单数 5
amount 消费金额 500.00

3.2 WHERE条件筛选

WHERE子句用于过滤数据,只返回满足条件的行。

基本语法:

sql 复制代码
SELECT 字段1, 字段2 
FROM 表名 
WHERE 条件;

示例1:查询北京的用户

sql 复制代码
-- 筛选city等于'北京'的用户
SELECT user_id, city 
FROM `user` 
WHERE city = '北京';

⚠️ 注意 :字符串类型的值需要用单引号包裹,而且要注意中英文输入法切换,避免用了中文引号导致报错。

示例2:IN操作符 ------ 查询多个城市的用户

sql 复制代码
-- 查询北京、上海、广州的用户
SELECT user_id, city 
FROM `user` 
WHERE city IN ('北京', '上海', '广州');

示例3:NOT IN操作符 ------ 排除某些城市

sql 复制代码
-- 查询不在北京、上海的用户
SELECT user_id, city 
FROM `user` 
WHERE city NOT IN ('北京', '上海');

示例4:比较运算符 ------ 筛选金额大于100的订单

sql 复制代码
SELECT order_id, sku, amount
FROM `order`
WHERE amount > 100;

常用比较运算符:

运算符 含义 示例
= 等于 city = '北京'
!= 或 <> 不等于 age != 18
> 大于 amount > 100
< 小于 amount < 50
>= 大于等于 age >= 18
<= 小于等于 age <= 30

3.3 ORDER BY结果排序

ORDER BY用于对查询结果进行排序,让数据按照我们想要的顺序展示。

基本语法:

sql 复制代码
SELECT 字段列表
FROM 表名
WHERE 条件
ORDER BY 字段 [ASC|DESC];
  • ASC:升序(从小到大),默认值
  • DESC:降序(从大到小)

示例1:单字段排序 ------ 按SKU升序排列

sql 复制代码
SELECT order_id, order_date, sku, amount
FROM `order`
WHERE (sku >= 2 AND amount > 100)
   OR (sku = 1 AND amount < 100)
ORDER BY sku;  -- 默认升序

示例2:多字段排序 ------ 先按SKU升序,再按金额升序

sql 复制代码
SELECT order_id, order_date, sku, amount
FROM `order`
WHERE (sku >= 2 AND amount > 100)
   OR (sku = 1 AND amount < 100)
ORDER BY sku, amount;  -- 多字段排序,依次排序

示例3:多字段不同排序方式 ------ SKU升序,金额降序

sql 复制代码
SELECT order_id, order_date, sku, amount
FROM `order`
WHERE (sku >= 2 AND amount > 100)
   OR (sku = 1 AND amount < 100)
ORDER BY sku ASC, amount DESC;  -- ASC可省略,DESC必须写

💡 小技巧:ORDER BY后面可以跟多个字段,先用第一个字段排序,如果第一个字段相同,再用第二个字段排序。每个字段可以单独指定升序或降序。


四、GROUP BY分组聚合与HAVING筛选

4.1 从Excel透视表理解SQL分组

如果你用过Excel的数据透视表,那GROUP BY就很好理解了:

  • Excel透视表:把明细数据按维度拖到行/列,自动汇总求和、计数、平均值
  • SQL GROUP BY:按指定字段分组,然后用聚合函数统计每组的数据

4.2 常用聚合函数

SQL提供了丰富的聚合函数,比Excel透视表更强大:

聚合函数 作用 类比Excel
COUNT() 计数(行数) COUNTIF
SUM() 求和 SUM
AVG() 平均值 AVERAGE
MAX() 最大值 MAX
MIN() 最小值 MIN
COUNT(DISTINCT 字段) 去重计数 Excel没有直接对应

🚀 SQL的优势 :COUNT(DISTINCT user_id) 这种去重计数在Excel里操作比较麻烦,但在SQL里一行代码就搞定了。

4.3 GROUP BY基本用法

基本语法:

sql 复制代码
SELECT 分组字段, 聚合函数(统计字段)
FROM 表名
WHERE 条件
GROUP BY 分组字段;

示例1:统计每个城市有多少用户

sql 复制代码
-- 按city分组,统计每个城市的用户数
SELECT city, COUNT(user_id) AS user_count
FROM `user`
GROUP BY city;

示例2:统计每天的订单总金额

sql 复制代码
-- 按order_date分组,计算每天的订单总金额
SELECT order_date, SUM(amount) AS daily_amount
FROM `order`
GROUP BY order_date;

4.4 多字段分组

GROUP BY后面也可以跟多个字段,实现更细粒度的分组:

示例:每个城市里不同年龄有多少人

sql 复制代码
-- 先按城市分组,再按年龄分组
SELECT city, age, COUNT(user_id) AS user_count
FROM `user`
GROUP BY city, age;

4.5 HAVING ------ 分组后的筛选

WHERE是在分组前过滤行,HAVING是在分组后过滤组。这是初学者最容易混淆的地方!

WHERE vs HAVING 的区别:

WHERE HAVING
执行时机 分组前 分组后
作用对象 行数据 分组结果
能否用聚合函数 ❌ 不能 ✅ 能
位置 FROM之后 GROUP BY之后

示例:统计用户数大于100人的城市

sql 复制代码
SELECT city, COUNT(user_id) AS user_count
FROM `user`
GROUP BY city
HAVING COUNT(user_id) > 100;  -- 分组后筛选

对比:

  • ❌ 错误写法:WHERE COUNT(user_id) > 100 ------ WHERE不能用聚合函数
  • ✅ 正确写法:HAVING COUNT(user_id) > 100 ------ HAVING专门用于分组后筛选

4.6 SQL语句的执行顺序

理解SQL的执行顺序对写好SQL非常重要:

sql 复制代码
-- 书写顺序
SELECT 字段, 聚合函数
FROM 表名
WHERE 行条件
GROUP BY 分组字段
HAVING 组条件
ORDER BY 排序字段;
复制代码
-- 执行顺序
1. FROM → 确定从哪张表取数
2. WHERE → 过滤掉不符合条件的行
3. GROUP BY → 按字段分组
4. 聚合函数 → 计算每组的统计值
5. HAVING → 过滤掉不符合条件的组
6. SELECT → 选择要返回的字段
7. ORDER BY → 对结果排序

五、SQL基础练习实战

5.1 练习题1:用户年龄分布统计

需求: 统计2010年之后注册的用户,各年龄的用户数量,并按年龄排序。

sql 复制代码
-- 先查看表结构(好习惯)
SELECT * FROM `user` LIMIT 10;

-- 统计2010年后注册的用户年龄分布
SELECT age, COUNT(user_id) AS user_count
FROM `user`
WHERE register_date >= '2010-01-01'  -- 分组前过滤:只看2010年后注册的
GROUP BY age                          -- 按年龄分组
ORDER BY age;                         -- 按年龄升序排列

5.2 练习题2:年龄分段统计

问题: 按单一年龄统计的结果太零散了,每个年龄可能只有几个人,参考价值不高。

优化思路: 把年龄分成几个区间,按区间统计:

  • 20-24岁
  • 25-30岁
  • 30岁以上

实现方式: 用CASE WHEN做分段(进阶内容,先了解概念)

sql 复制代码
SELECT 
  CASE 
    WHEN age BETWEEN 20 AND 24 THEN '20-24岁'
    WHEN age BETWEEN 25 AND 30 THEN '25-30岁'
    WHEN age > 30 THEN '30岁以上'
    ELSE '其他'
  END AS age_group,
  COUNT(user_id) AS user_count
FROM `user`
WHERE register_date >= '2010-01-01'
GROUP BY age_group
ORDER BY age_group;

5.3 练习题3:每日订单金额汇总

需求: 统计每天的订单总量和总金额。

sql 复制代码
SELECT 
  order_date,
  COUNT(order_id) AS order_count,    -- 订单数
  SUM(amount) AS total_amount,      -- 总金额
  AVG(amount) AS avg_amount         -- 平均客单价
FROM `order`
GROUP BY order_date
ORDER BY order_date;

5.4 练习题4:高价值订单筛选

需求: 找出每个SKU类别中,金额大于100的订单,并按SKU和金额排序。

sql 复制代码
SELECT 
  order_id,
  order_date,
  sku,
  amount
FROM `order`
WHERE amount > 100
ORDER BY sku ASC, amount DESC;

六、学习总结与技巧

6.1 必背核心语法

sql 复制代码
-- 完整的SQL查询模板
SELECT 字段1, 字段2, 聚合函数(字段3) AS 别名
FROM 表名
WHERE 行级筛选条件
GROUP BY 分组字段
HAVING 组级筛选条件
ORDER BY 排序字段 [ASC|DESC]
LIMIT 10;

6.2 新手常见错误

错误 原因 解决方法
中文引号/逗号 输入法没切换到英文 写SQL前切换英文输入法
漏写FROM 初学者常犯 写完SELECT后马上写FROM
表名/字段名拼错 不熟悉表结构 先 SELECT * FROM 表 LIMIT 10 查看
WHERE用聚合函数 混淆WHERE和HAVING 分组后的筛选用HAVING
字符串没加单引号 数字不用,字符串要 文本类型的值用单引号包裹

SQL的核心思想其实就是:你想从哪里取数(FROM)→ 要哪些数据(SELECT)→ 筛选什么条件(WHERE/GROUP BY/HAVING)→ 怎么展示(ORDER BY)。想清楚这几个问题,SQL就写对了一半。

相关推荐
数字新视界1 小时前
机房动环监控提升运维效率
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
SelectDB技术团队1 小时前
冷热分层从建到验:Storage Policy 创建、表级与分区级绑定、SHOW TABLETS 验证的完整命令
大数据·数据库·elasticsearch·搜索引擎·数据分析·apache doris·冷热分层
摇滚侠2 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记
xier_ran3 小时前
【infra之路】AI 编译器学习笔记(六):重拾 C++——lambda 与 MLIR 中的回调
c++·笔记·学习
志尊宝3 小时前
Vue3 零基础每日笔记(078):首屏加载速度优化汇总——清单化方案
笔记
YangYang9YangYan3 小时前
2027供应链计划校招:数学与应用数学专业如何把预测模型讲成业务决策?
人工智能·sql·算法
lambo mercy3 小时前
Day3:结构化输出
java·数据库·oracle
派小心.3 小时前
小程序分享链路中来源参数的传递校验
大数据·前端·数据库·人工智能·小程序·数据分析
Είναι η κοπέλα3 小时前
向量数据库与嵌入模型:Chroma/FAISS/Milvus 选型
数据库·milvus·faiss