SQL与MySQL基础讲义

本讲义适用于 SQL 与 MySQL 入门课程


目录

  1. 数据库基本概念
  2. SQL 概述
  3. 增删改查(CRUD)
  4. 条件查询与排序
  5. 聚合函数与分组
  6. 多表关联查询(JOIN)
  7. MySQL 核心特性
  8. Python 操作 MySQL

第一章:数据库基本概念

1.1 什么是数据库?

数据库(Database,DB) 是按照一定的数据模型组织、存储和管理数据的仓库。

通俗理解:数据库就像是一个电子化的文件柜,用于存储电子化的数据。我们可以通过数据库来高效地存储、查询、更新和管理数据。

1.2 数据库管理系统(DBMS)

数据库管理系统(Database Management System,DBMS) 是用于建立、使用和维护数据库的大型软件。

常见的 DBMS 有:

1.3 关系型数据库(RDBMS)

关系型数据库 是基于关系模型(二维表)的数据库。

核心概念:

概念 说明
表(Table) 数据以二维表格的形式存储
行(Row) 代表一条记录
列(Column) 代表一个字段或属性
主键(Primary Key) 唯一标识表中每一条记录的列
外键(Foreign Key) 用于关联两个表的键

1.4 MySQL 简介

MySQL 是最流行的开源关系型数据库管理系统之一。

MySQL 的特点:


第二章:SQL 概述

2.1 什么是 SQL?

SQL(Structured Query Language,结构化查询语言) 是用于操作关系型数据库的标准语言。

简单来说,SQL 就是我们与数据库”沟通”的指令。通过 SQL,我们可以:

2.2 SQL 的分类

SQL 语句可以分为以下几类:

分类 全称 主要关键字 说明
DDL Data Definition Language CREATE, ALTER, DROP 数据定义(创建/修改/删除表)
DML Data Manipulation Language INSERT, UPDATE, DELETE 数据操作(增/删/改)
DQL Data Query Language SELECT 数据查询
DCL Data Control Language GRANT, REVOKE 权限控制
TCL Transaction Control Language COMMIT, ROLLBACK 事务控制

2.3 SQL 书写规范

  1. SQL 语句以分号 ; 结尾
  2. 关键字不区分大小写(建议大写)
  3. 可以使用空格和缩进增强可读性
-- 例子:查询用户表中的所有数据
SELECT * FROM users;

第三章:增删改查(CRUD)

💻 配套案例:案例1:数据库与表操作 案例2:增删改查

CRUD 是数据库操作的四个核心功能:

3.1 插入数据(INSERT)

语法:

INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...);

示例:

-- 插入一条用户记录
INSERT INTO users (name, email, age) VALUES ('张三', 'zhangsan@example.com', 25);

-- 插入多条记录
INSERT INTO users (name, email, age) VALUES 
('李四', 'lisi@example.com', 30),
('王五', 'wangwu@example.com', 28);

3.2 查询数据(SELECT)

语法:

SELECT 字段1, 字段2, ... FROM 表名 [WHERE 条件];

示例:

-- 查询所有字段
SELECT * FROM users;

-- 查询指定字段
SELECT name, email FROM users;

-- 带条件查询
SELECT * FROM users WHERE age > 25;

3.3 更新数据(UPDATE)

语法:

UPDATE 表名 SET 字段1 = 值1, 字段2 = 值2 WHERE 条件;

示例:

-- 更新单条记录
UPDATE users SET age = 26 WHERE name = '张三';

-- 批量更新
UPDATE users SET age = age + 1 WHERE age < 30;

⚠️ 注意:UPDATE 语句一定要带 WHERE 条件,否则会更新表中所有记录!

3.4 删除数据(DELETE)

语法:

DELETE FROM 表名 WHERE 条件;

示例:

-- 删除指定记录
DELETE FROM users WHERE id = 1;

-- 删除所有年龄小于 20 的用户
DELETE FROM users WHERE age < 20;

⚠️ 注意:DELETE 语句一定要带 WHERE 条件,否则会删除表中所有记录!


第四章:条件查询与排序

💻 配套案例:案例3:条件查询与排序

4.1 WHERE 条件筛选

WHERE 子句用于筛选满足条件的记录。

比较运算符: | 运算符 | 说明 | |——–|——| | = | 等于 | | <> 或 != | 不等于 | | > | 大于 | | < | 小于 | | >= | 大于等于 | | <= | 小于等于 |

逻辑运算符: | 运算符 | 说明 | |——–|——| | AND | 并且 | | OR | 或者 | | NOT | 不等于 |

示例:

-- 查询年龄大于 25 的用户
SELECT * FROM users WHERE age > 25;

-- 查询年龄在 25-30 之间的用户
SELECT * FROM users WHERE age >= 25 AND age <= 30;

-- 查询姓张或者年龄小于 25 的用户
SELECT * FROM users WHERE name LIKE '张%' OR age < 25;

4.2 排序(ORDER BY)

ORDER BY 子句用于对结果集进行排序。

语法:

SELECT 字段 FROM 表名 ORDER BY 字段1 [ASC|DESC], 字段2 [ASC|DESC];

4.3 分页(LIMIT)

LIMIT 子句用于限制返回的记录数量,常用于分页。

语法:

SELECT 字段 FROM 表名 LIMIT 数量;
SELECT 字段 FROM 表名 LIMIT 偏移量, 数量;

第五章:聚合函数与分组

💻 配套案例:案例4:聚合统计与分组

5.1 聚合函数

聚合函数用于对一组值进行计算,返回单个值。

函数 说明
COUNT() 统计记录数
SUM() 求和
AVG() 求平均值
MAX() 最大值
MIN() 最小值

⚠️ 注意:聚合函数会自动忽略 NULL 值。

5.2 分组(GROUP BY)

GROUP BY 子句用于将数据按照一个或多个字段进行分组。

示例:

-- 按性别分组,统计每组人数
SELECT gender, COUNT(*) FROM users GROUP BY gender;

5.3 HAVING 子句

HAVING 子句用于对分组后的结果进行筛选。

WHERE vs HAVING:


第六章:多表关联查询(JOIN)

💻 配套案例:案例5:多表关联查询

6.1 为什么要用 JOIN?

在实际的数据库设计中,我们通常会将数据分散到多个表中存储,然后通过 JOIN 将这些表关联起来查询。

6.2 JOIN 的类型

                    ┌─────────────┐
                    │   Table A   │
                    │  (左表)      │
                    └──────┬──────┘
                           │
         ┌─────────────────┼─────────────────┐
         │                 │                 │
         ▼                 ▼                 ▼
┌─────────────┐   ┌─────────────┐   ┌─────────────┐
│  INNER JOIN │   │  LEFT JOIN  │   │ RIGHT JOIN  │
│   (内连接)   │   │   (左连接)   │   │  (右连接)   │
│              │   │              │   │             │
│   A∩B       │   │    A        │   │     B       │
└─────────────┘   └─────────────┘   └─────────────┘

6.3 INNER JOIN(内连接)

返回两个表中都存在的记录。

6.4 LEFT JOIN(左连接)

返回左表中的所有记录,以及右表中匹配的记录。如果右表中没有匹配,则返回 NULL。

6.5 RIGHT JOIN(右连接)

返回右表中的所有记录,以及左表中匹配的记录。


第七章:MySQL 核心特性

7.1 存储引擎

存储引擎是 MySQL 底层负责数据存储和检索的组件。

特性 InnoDB MyISAM
事务支持 ✅ ❌
行级锁 ✅ ❌
表级锁 ❌ ✅
外键 ✅ ❌
适用场景 高并发、数据安全 只读、静态表

建议:对于大多数应用场景,使用 InnoDB 存储引擎。

7.2 索引

索引是帮助 MySQL 高效获取数据的数据结构,类似于书籍的目录。

索引的作用:

⚠️ 注意:索引虽好,但不要滥用。过多的索引会增加写操作的开销。

7.3 事务

事务是数据库操作的最小工作单元,将一组 SQL 语句作为一个整体执行。

事务的四大特性(ACID):

特性 说明
原子性(Atomicity) 事务中的所有操作要么全部成功,要么全部失败回滚
一致性(Consistency) 事务执行前后,数据库的完整性约束不被破坏
隔离性(Isolation) 并发执行的事务之间互不干扰
持久性(Durability) 事务一旦提交,其对数据的修改就是永久性的

第八章:Python 操作 MySQL

💻 配套案例:案例6:Python操作MySQL

8.1 安装 pymysql

pip install pymysql

8.2 连接数据库

import pymysql

# 创建数据库连接
db = pymysql.connect(
    host="localhost",
    user="root",
    password="123456",
    database="my_database"
)

8.3 执行查询(SELECT)

cursor = db.cursor()
cursor.execute("SELECT * FROM users")
results = cursor.fetchall()
for row in results:
    print(row)

8.4 执行插入(INSERT)

sql = "INSERT INTO users (name, email, age) VALUES (%s, %s, %s)"
values = ("张三", "zhangsan@example.com", 25)
cursor.execute(sql, values)
db.commit()

8.5 使用 with 语句自动管理连接

import pymysql

with pymysql.connect(
    host="localhost",
    user="root",
    password="123456",
    database="my_database"
) as db:
    with db.cursor() as cursor:
        cursor.execute("SELECT * FROM users")
        results = cursor.fetchall()
# 离开 with 块后连接会自动关闭

课后练习

📝 更多习题:课后习题

  1. 练习 1:创建一个学生表,包含 id、name、age、gender、score 字段,并插入 5 条数据。

  2. 练习 2:查询年龄大于 20 的学生,按成绩降序排列。

  3. 练习 3:按性别分组,统计每个性别的平均成绩。

  4. 练习 4:创建一个订单表和一个客户表,使用 JOIN 查询客户及其订单。

  5. 练习 5:使用 Python 编写一个程序,实现对学生表的增删改查操作。


讲义版本:v1.0 更新时间:2026-03-19