查看全课大纲(第 12 / 101 节)
  1. 1.数据分析基本概念
  2. 2.学习数据分析的一般路线
  3. 3.数据分析的流程
  4. 4.数据类型
  5. 5.环境部署(1)
  6. 6.环境部署(2)
  7. 7.课程介绍
  8. 8.TXT文件操作
  9. 9.JSON文件操作
  10. 10.CSV文件操作
  11. 11.Excel文件操作
  12. 12.数据库及SQL常用语法
  13. 13.数据库基本操作
  14. 14.数据库多表连接
  15. 15.实战:欧洲职业足球数据库分析
  16. 16.爬虫简介
  17. 17.URL管理模块
  18. 18.网页下载模块
  19. 19.网页解析模块(1)
  20. 20.网页解析模块(2)
  21. 21.Scrapy简介
  22. 22.Scrapy使用步骤(1)
  23. 23.Scrapy使用步骤(2)
  24. 24.Scrapy使用步骤(3)
  25. 25.Scrapy使用步骤(4)
  26. 26.实战:获取国内城市空气质量指数数据
  27. 27.NumPy和SciPy介绍
  28. 28.多维数组
  29. 29.多维数组操作
  30. 30.NumPy的常用方法
  31. 31.向量化介绍
  32. 32.向量化及通用函数
  33. 33.实战:2016美国大选分析
  34. 34.数据结构-Series
  35. 35.数据结构-DataFrame
  36. 36.数据结构-Index
  37. 37.Series的索引操作
  38. 38.DataFrame的索引操作
  39. 39.索引操作总结
  40. 40.运算与对齐
  41. 41.函数应用操作(1) -- map
  42. 42.函数应用操作 (2) -- apply applymap
  43. 43.文件读写操作
  44. 44.排序操作
  45. 45.数据清洗--处理缺失数据
  46. 46.数据清洗--处理重复数据
  47. 47.数据清洗--替换数据
  48. 48.常用统计方法(1) -- describe quantile
  49. 49.常用统计方法(2) -- sum mean median count
  50. 50.常用统计方法(3) -- max min idxmax idxmin
  51. 51.常用统计方法(4) -- mad var std cumsum
  52. 52.实战:全球食品数据分析
  53. 53.层级索引
  54. 54.分组与聚合介绍
  55. 55.分组操作(1) -- GroupBy对象及常用聚合操作
  56. 56.分组操作(2) -- 自定义分组及聚合操作
  57. 57.透视表介绍
  58. 58.透视表操作
  59. 59.数据规整(1) -- 数据合并concat
  60. 60.数据规整(2) -- 数据连接merge
  61. 61.数据重构(3) -- 数据重构stack unstack
  62. 62.实战:互联网电影资料库分析
  63. 63.探索性数据分析EDA介绍
  64. 64.EDA的目的
  65. 65.EDA常用工具
  66. 66.Matplotlib绘图基本介绍
  67. 67.Matplotlib画布
  68. 68.散点图和柱状图的绘制
  69. 69.直方图的绘制
  70. 70.矩阵绘图
  71. 71.子图的使用
  72. 72.Matplotlib颜色、标记、线型
  73. 73.Matplotlib坐标刻度、标签、图例、标题
  74. 74.Seaborn介绍
  75. 75.数据集分布可视化(1) -- 单变量分布、双变量分布
  76. 76.数据集分布可视化(2) -- 变量关系可视化
  77. 77.类别数据可视化 -- 类别散布图、类别内数据分布、类别内统计图
  78. 78.交互式数据可视化工具Bokeh介绍
  79. 79.Bokeh绘制散点图、柱状图、盒子图、弦图
  80. 80.Bokeh绘制常用图形元素
  81. 81.3D绘图 -- mplot3d
  82. 82.3D曲线可视化
  83. 83.3D散点图可视化
  84. 84.3D柱状图可视化
  85. 85.Pandas绘图
  86. 86.实战:Lending Club借贷数据探索性分析及可视化
  87. 87.机器学习介绍及应用场景
  88. 88.机器学习建模介绍 (1) -- 分类
  89. 89.机器学习建模介绍 (2) -- 回归
  90. 90.机器学习建模介绍 (3) -- 聚类
  91. 91.机器学习分类
  92. 92.机器学习工具scikit-learn
  93. 93.使用scikit-learn的流程
  94. 94.数据集准备及划分
  95. 95.模型选择
  96. 96.数据预处理及特征工程
  97. 97.过拟合与欠拟合
  98. 98.模型调参介绍
  99. 99.模型调参方法
  100. 100.模型测试及评价
  101. 101.实战:通过移动设备行为数据预测性别和年龄

数据库及SQL常用语法

约 11 分钟

📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)

小象实战讲义 · Python数据分析实战

在数据处理中,我们常常需要面对多个相关联的数据表。本节将带你认识数据库这一强大的数据存储与管理工具,并学习其核心操作语言——SQL(Structured Query Language)的四种基本语法。掌握这些,你将能理解数据如何被结构化存储和高效查询,为后续使用Python操作数据库打下坚实基础。

💡 核心导读

  • 数据库是什么:理解数据库作为结构化数据集合的核心价值——存储、共享并减少数据冗余。
  • 表与关系:认识数据库由多张表(Table)组成,表之间通过特定字段(如ID)建立关联。
  • SQL与CRUD:掌握SQL语言进行增(Create)、查(Read)、改(Update)、删(Delete)四大基本操作。
  • SQLite简介:了解轻量级数据库SQLite,它是我们入门和实践的理想选择。

从单文件到多表关联:为什么需要数据库?

在前面的课程中,我们学习了如何操作CSV、Excel等本地数据文件。这些文件通常对应单个数据表,即使有多个表,它们之间的关系也往往是松散或隐含的。

但在处理真实世界的复杂数据时,所有信息很少能整齐地存放在一个文件里。例如,一个电商系统需要管理产品信息、客户信息和交易记录。如果把这些都塞进一个巨大的Excel工作表,会导致大量信息重复(冗余),且难以维护更新。

数据库的强大之处,就在于它能将多个数据表有机地连接起来。每个表专注于存储一类实体(如产品、客户),表与表之间通过共同的字段(如产品ID、客户ID)建立关系。这种设计使得数据存储更高效、结构更清晰,并且极大地减少了数据冗余。

数据库的核心概念

什么是数据库?

数据库(Database)是以一定方式组织、存储和管理的数据集合,可供多个用户共享,具有尽可能小的冗余度,并与应用程序相互独立。

表(Table):数据库的基本组成单元

一个数据库由多张表(Table)组成。你可以把一张表简单理解为我们之前接触的一个CSV文件,或者Excel文件中的一个工作表(Sheet)。

数据库 (Database)
    |
    |-- 表1 (Table):产品信息
    |-- 表2 (Table):客户信息
    |-- 表3 (Table):销售记录
    ...

常见的数据库系统有很多,例如MySQL、PostgreSQL、Microsoft SQL Server、Oracle,以及非关系型的MongoDB等。考虑到入门学习的便捷性,本课程将使用SQLite——一个轻量级、无需单独服务器进程的数据库,它的数据库就是一个简单的文件。

SQL常用语法:CRUD四大操作

SQL是专门用来与数据库通信的语言。其核心操作可以概括为CRUD,分别代表创建(Create)、读取(Read)、更新(Update)和删除(Delete)。掌握这四种语法,你就能完成绝大部分基础的数据操作。

1. Create:插入数据

当我们需要向数据库中添加新记录时,使用INSERT INTO语句。

INSERT INTO 表名称 (列1, 列2, 列3, ...)
VALUES (值1, 值2, 值3, ...);

举个例子:用户在一个网站注册。

  • 表名称 对应 users(用户表)。
  • 列 对应要填写的字段,如 username(用户名)、password(密码)、register_date(注册日期)。
  • 值 就是用户实际输入的信息。
-- 向用户表中插入一条新用户记录
INSERT INTO users (username, password, register_date)
VALUES ('xiaoming', 'encrypted_pwd_123', '2023-10-27');

2. Read:查询数据

这是最常用的操作,用于从表中检索数据,使用SELECT语句。

SELECT 列名称1, 列名称2, ... FROM 表名称;

如果想查询所有列,可以使用星号(*)通配符。

-- 查询users表中的所有列的所有记录
SELECT * FROM users;

-- 只查询用户名和注册日期这两列
SELECT username, register_date FROM users;

3. Update:更新数据

当需要修改表中已有的记录时,使用UPDATE语句。务必注意使用WHERE子句来指定要更新哪些行,否则会更新整张表!

UPDATE 表名称
SET 列1 = 新值1, 列2 = 新值2, ...
WHERE 某列 = 某值;

举个例子:用户修改自己的密码。

-- 将用户名为'xiaoming'的用户的密码更新为新值
UPDATE users
SET password = 'new_encrypted_pwd_456'
WHERE username = 'xiaoming';

4. Delete:删除数据

用于从表中删除记录。同样,必须谨慎使用WHERE子句,否则会清空整张表!

DELETE FROM 表名称 WHERE 某列 = 某值;

举个例子:清理长期未活跃的用户。

-- 删除上次登录时间在3年前(假设当前是2023年)的用户
DELETE FROM users
WHERE last_login_date < '2020-10-27';

理解表关联:一个简单的例子

让我们通过一个简单的文本示意图,回顾讲师在视频中描述的产品、客户、销售三张表如何关联。

表A:产品表 (products)
+------------+------------------+-------------------+--------+
| product_id | product_name     | description       | price  |
+------------+------------------+-------------------+--------+
| P001       | 无线鼠标         | 静音设计,2.4G连接 | 89.00  |
| P002       | 机械键盘         | 青轴,RGB背光     | 399.00 |
+------------+------------------+-------------------+--------+

表B:销售记录表 (sales)
+-------------+------------+----------+------------+
| customer_id | product_id | quantity | sale_date  |
+-------------+------------+----------+------------+
| C1001       | P001       | 2        | 2023-10-26 |
| C1002       | P002       | 1        | 2023-10-27 |
+-------------+------------+----------+------------+

表C:客户表 (customers)
+-------------+--------------+---------------------+
| customer_id | customer_name| city                |
+-------------+--------------+---------------------+
| C1001       | 张三         | 北京                |
| C1002       | 李四         | 上海                |
+-------------+--------------+---------------------+

关联关系:

  • sales表中的 product_id 指向 products表中的 product_id,从而可以查到所售产品的详情(名称、价格)。
  • sales表中的 customer_id 指向 customers表中的 customer_id,从而可以查到购买者的信息(姓名、城市)。

这种通过ID关联的设计,避免了在销售记录中重复存储产品名称、客户地址等冗余信息,是数据库设计的核心思想。

📝 动手练一练

  1. 概念辨析:假设你正在设计一个图书馆管理系统,需要记录图书信息、借阅者信息和借阅记录。为什么不应该把“图书名称”和“借阅者姓名”直接存储在“借阅记录”表里?请用本节学到的概念解释。

    👉 点击查看参考答案

    将“图书名称”和“借阅者姓名”直接存入“借阅记录”表会导致数据冗余。如果同一本书被借阅多次,其名称会被重复存储多次;同一位借阅者借多本书,其姓名也会被重复存储。这既浪费空间,也容易导致数据不一致(例如,图书改名后,需要更新所有相关的借阅记录)。正确的做法是分别建立“图书表”和“借阅者表”,在“借阅记录表”中只存储“图书ID”和“借阅者ID”,通过ID进行关联查询。

  2. SQL语句编写:针对上面图书馆的例子,假设已有 books (book_id, title), borrowers (borrower_id, name), borrow_records (record_id, book_id, borrower_id, borrow_date) 三张表。请写出对应的SQL语句: a) 插入一本新书,书名为《Python数据分析实战》,ID为‘B103’。 b) 查询出所有在‘2023-09-01’之后借阅的记录,只显示借阅日期和对应的图书ID。

    👉 点击查看参考答案
    -- a) 插入新书
    INSERT INTO books (book_id, title)
    VALUES ('B103', 'Python数据分析实战');
    
    -- b) 查询指定日期后的借阅记录
    SELECT borrow_date, book_id
    FROM borrow_records
    WHERE borrow_date > '2023-09-01';

本章小结

本节我们迈出了从操作平面文件到理解结构化数据库的关键一步。我们了解到数据库通过多表关联来高效、无冗余地管理复杂数据,并学习了使用SQL语言进行数据增删改查(CRUD)的基本方法。

📋 行动清单

  • 理解关联:尝试用“学生-课程-成绩”的例子,画出三张表,并标出它们之间的关联字段。
  • 记忆CRUD:熟记INSERT、SELECT、UPDATE、DELETE四种SQL基本语句的结构和用途。
  • 预习实践:下一讲我们将使用Python来连接SQLite数据库并执行这些SQL命令,可以提前思考如何将本节学的SQL语句嵌入到Python代码中。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 本节课件:数据库及SQL常用语法
    PDF · 211KB
    下载
  • 数据库章节配套练习库:sqliteDatabase.db
    ZIP · <1KB · SQLite
    下载
  • 全套课件打包(第1-5章)
    ZIP · 12.8MB
    下载
  • 全套课件打包(第6-8章)
    ZIP · 15MB
    下载
  • 实战数据集:AppleStore 应用商城分析
    ZIP · 329KB
    下载
  • 实战数据集:女性服装电商分析
    ZIP · 2.8MB
    下载
  • Python 数据分析环境搭建指南
    PDF · 2MB
    下载
  • Scrapy 安装教程
    PDF · 12.7MB
    下载
  • 附加实战项目:AppleStore 应用商城数据分析
    ZIP · 0.3MB · ipynb + CSV 数据
    下载
  • 附加实战项目:银行电话营销数据分析
    ZIP · 0.4MB · ipynb + CSV 数据
    下载
  • 附加实战项目:女性服装电商评论数据分析
    ZIP · 2.7MB · ipynb + CSV 数据
    下载
  • 附加实战项目:美国化学学会杂志数据分析
    ZIP · 34.2MB · ipynb + SQLite 数据库
    下载