← 首页
📖 学习资料
🏠 首页 🎯 综合练习 📚 学习材料 ✏️ 练习 🧠 测验
📖 有条理的学习资料

学习资料 —— SQL 课程

深入讲解数据库、Northwind 结构和 SQL 基础

第 1 部分
🗄️ 什么是数据库?
理解数据库最简单的方法,就是把它想象成一个 庞大而精密的数字图书馆。如果说一个 Excel 文件就像一张纸,那么数据库就是那个容纳成千上万本“笔记本”、把它们组织好、并让你在瞬间找到信息的结构。
🏛️ 数据库是什么,它有什么用?
定义
数据库是一个 以电子方式存储的、有组织的信息集合。管理这些数据的系统称为 DBMS(数据库管理系统) —— 例如 MySQL、SQL Server 或 Oracle。
5 大主要作用
1
存储海量数据 —— 与在一百万行就开始“卡死”的 Excel 不同,数据库能轻松处理 数十亿行 数据。
2
快速检索 —— 用 SQL 你可以在数百万条记录中找到某个特定值, 只需几毫秒.
3
安全与权限 —— 精确定义谁可以查看、编辑和删除数据。
4
数据完整性 —— 防止重复和矛盾(例如,两个客户拥有相同的 ID 编号)。
5
并发访问 —— 数百名用户同时读写,而不会出现“文件被锁定”的情况。
🏗️ 数据库的层级结构
从最高层到最底层
☁️
服务器 / 实例 —— 运行软件的计算机或云。
🗄️
数据库 —— 主“仓库”。例如:“一个销售系统”。
📁
模式(Schema) —— 仓库内部的逻辑划分(就像超市里的部门:客户、财务……)。
📋
—— 实际存储数据的基本单元。
🔍
其他对象 —— 视图(保存的查询)、存储过程(工作流)。
📋 表结构 —— 数据库的核心
说明
表以网格形式构建——但与 Excel 不同,它是 严格的:每一列都有预先定义的角色和数据类型。
组成部分描述示例
列 / 字段 定义数据类型。每一列都有名称和类型(数字、文本、日期) 一个“客户名称”或“产品价格”列
行 / 记录 表示一个实体的单个实例。每一行都是一个完整的“对象” 某个具体客户的所有详细信息
🔑 主键 每一行都必须唯一的列——记录的“身份证” CustomerID
🔗 外键 链接到另一个表中主键的列——在表之间建立关系 Orders 表中的 CustomerID
一个直观的示例 —— Products 表
🔑 ProductID (PK) ProductName 🔗 CategoryID (FK) ListPrice
101笔记本电脑13,500
102鼠标2150
103键盘2250
💡
关于这个示例:
主键:ProductID 确保没有两个产品共用同一个编号
外键:CategoryID 链接到 Categories 表——其中类别 1 = “Computers”,2 = “Peripherals”
类型:ListPrice 始终是数字,ProductName 始终是文本
🎯
总之: 数据库是你所知道的每一个应用和网站背后的引擎。它把信息存储在相互关联的表中,并让你快速提取复杂的业务洞察。
第 2 部分
🏪 Northwind 数据库结构
Northwind 是一个经典的数据库,模拟一家 贸易公司。它包含 8 张相互关联的核心表。这是我们整个课程都会使用的数据库。
🗂️ Northwind 的 8 张表
📊 表结构 —— Northwind
🏢 Customers
🔑 CustomerID
CompanyName
ContactTitle
Address
City
Region
PostalCode
📦 Orders
🔑 OrderID
🔗 CustomerID
🔗 EmployeeID
OrderDate
RequiredDate
ShippedDate
🔗 ShipVia
Freight
ShipCity
ShipCountry
📋 Order Details
🔑 OrderID
🔗 ProductID
UnitPrice
Quantity
Discount
🛒 Products
🔑 ProductID
ProductName
🔗 SupplierID
🔗 CategoryID
UnitPrice
UnitsInStock
Discontinued
👤 Employees
🔑 EmployeeID
LastName
FirstName
Title
BirthDate
Address
City
🏭 Suppliers
🔑 SupplierID
CompanyName
ContactTitle
Address
City
PostalCode
🏷️ Categories
🔑 CategoryID
CategoryName
描述
Picture
🚚 Shippers
🔑 ShipperID
🔗 CompanyName
Phone
🔗 表之间的关系
源表通过…链接目标表含义
OrdersCustomerIDCustomers每个订单都属于一位客户
OrdersEmployeeIDEmployees每个订单都由一名员工处理
OrdersShipViaShippers每个订单都由一家物流公司发货
Order DetailsOrderIDOrders每个订单的行项目
Order DetailsProductIDProducts订购了哪个产品
ProductsSupplierIDSuppliers谁供应该产品
ProductsCategoryIDCategories该产品属于哪个类别
💡
提示: the Orders 表是 Northwind 的核心——它链接到其他 4 张表。我们编写的大多数 JOIN 查询都会经过它。
🎯 你在 Northwind 上的第一个查询
基本 SELECT
连接到 Northwind 后,你就可以检索数据:

USE Northwind;
SELECT * FROM customers LIMIT 5;

如果你看到 5 行客户数据——说明数据库运行得很完美!🎉
第 3 部分
🔑 键与关系
键是表之间关系的基础——正是它们把一堆孤立的表变成一个真正的数据库。
🔑 主键
定义与规则
标识每一行的列(或多列的组合) 完全唯一地.

3 条规则:
1. 任何两个值都不能相同
2. 它不能为 NULL
3. 它不随时间改变

示例: CustomerID (在 customers 表中)—— 每个客户都有自己唯一的编号。
💡
主键是表中每一行的 “身份证” —— 就像没有两张身份证能共用同一个号码一样。
🔗 外键
定义
一个表中指向主键的列 (在另一个表中)。它在表之间建立关系。

示例: CustomerID (在 orders 表中)指向 CustomerID (在 customers 表中)。

含义:“每个订单都有一个明确的客户,可以在 customers 表中找到。”
⚠️
引用完整性: 你不能创建一个 CustomerID 在 customers 表中不存在的订单。数据库会保持关系有效。
📊 关系的类型
关系类型说明Northwind 中的示例
1:N(一对多) 表 A 中的一行链接到表 B 中的多行 一位客户 → 多个订单
N:N(多对多) 需要一张连接表——多对多 Orders ↔ Products(通过 Order Details)
1:1(一对一) 表 A 中的一行 = 表 B 中的一行 较少见——例如,单独的联系方式
🔄 这与 JOIN 有什么关系?
直接的联系
JOIN 命令正是利用这些主键/外键关系来合并表:

JOIN orders ON customers.CustomerID = orders.CustomerID

我们编写的每一个 JOIN 都通过定义表间关系的列来合并表。
🎯
规则: 在每个 JOIN 之前,问自己—— 这些表是通过哪一列链接的? 答案通常是主键/外键。
第 4 部分
📊 SQL 与 Excel
两个都是出色的工具——但用途不同。理解它们的区别有助于你知道何时使用哪一个。
⚡ 完整对比
对比项ExcelSQL
数据量 最多约 100 万行 数十亿行
速度 处理大文件时慢 任何规模都非常快
共享与可访问性 文件到处传递,版本冲突 一个供所有人使用的中央数据库
数据安全 任何人都能编辑 为每个用户设置精确权限
人为错误 容易输入错误的值 严格的结构防止错误
并发工作 文件被锁定——一次只能一个人 数百名用户同时使用
可视化灵活性 轻松制作图表和配色 需要单独的 BI 工具
对普通用户的易用性 直观的图形界面 需要学习一门语言
精准检索 把整个文件加载到内存 只检索所需的内容
🎯 何时使用哪一个?
在以下情况使用 Excel
✅ 对小文件的一次性分析(最多几十万行)
✅ 快速可视化——图表、数据透视表
✅ 处理已从数据库导出的数据
✅ 方便与不懂 SQL 的管理者共享
在以下情况使用 SQL
✅ 处理数百万行及以上的数据
✅ 连接多张表的复杂查询
✅ 自动刷新的报表
✅ 维护“单一可信数据源”——正确、集中的数据
✅ 自动化并运行重复的流程
💡
实际上: 分析师用 SQL 从数据库中提取数据——然后把它导入 Excel、Power BI 或 Python 进行分析和可视化。 两者相辅相成!
📈 结论 —— 为什么要学 SQL?
3 个关键原因
1
一门通用的语言 —— SQL 适用于 MySQL、SQL Server、Oracle、PostgreSQL 等等。学一次——到处都能用。
2
市场需求 —— SQL 是任何 Data、BI、Analytics 或 Product 岗位中最抢手的技能之一。
3
分析的独立性 —— 不必等 IT 准备报表,你可以在需要的时候精确地提取所需的数据。