【计算机基础速成】第一课:MySQL 与 SQL 基础
1. 这节课学什么
这一课的目标不是让你立刻成为数据库高手,而是先具备后端实习面试中最基础、最常见的一层能力:
- 知道数据库、表、字段分别是什么
- 知道 MySQL 和 SQL 分别是什么
- 会写基础查询语句
- 能回答几道最常见的数据库入门面试题
学完这一课,你至少要做到:
- 能说清楚
MySQL是什么 - 能说清楚
SQL是什么 - 能写
select / where / order by / group by / join - 能回答
drop、delete、truncate的区别 - 能回答
where和having的区别 - 能回答
left join和inner join的区别
2. 先建立最小认知
2.1 什么是数据库
一句话理解
数据库就是一个专门用来“存数据、查数据、管理数据”的系统。
更适合面试的说法
数据库是按照一定数据模型组织、存储和管理数据的软件系统,它可以帮助我们高效地完成数据的增删改查,并保证数据的一致性和可靠性。
举个例子
假设你做一个校园二手交易平台:
- 用户信息要存起来
- 商品信息要存起来
- 订单信息要存起来
这些信息不能随便放在文本文件里,因为不方便查询,也不方便多人同时访问,所以通常要放进数据库里。
2.2 什么是 MySQL
一句话理解
MySQL 是一种常用的关系型数据库管理系统。
面试答法
MySQL 是一个开源的关系型数据库管理系统,数据通常以表的形式存储,广泛应用于 Web 后端开发中,适合处理结构化数据。
关键词解释
- 关系型:数据之间有明确结构和关系,通常按“表”的形式组织
- 数据库管理系统:不仅能存数据,还能管理数据、控制权限、支持事务、支持并发访问
2.3 什么是 SQL
一句话理解
SQL 是和数据库打交道的语言。
面试答法
SQL 全称是 Structured Query Language,也就是结构化查询语言。我们可以通过 SQL 对关系型数据库中的数据进行定义、查询、修改和控制。
你可以这样记
- MySQL 是“数据库软件”
- SQL 是“操作数据库的语言”
它们的关系有点像:
- Java 是一种编程语言
- JVM 是运行 Java 程序的环境
这里只是类比理解,不需要纠结完全对应。
3. 数据库里的基本单位
3.1 数据库、表、字段、记录
可以把它们理解成下面这样:
| 概念 | 通俗理解 | 例子 |
|---|---|---|
| 数据库 | 一个大仓库 | school_trade |
| 表 | 仓库里的一类数据 | user 表、product 表 |
| 字段 | 表中的某一列 | id、name、price |
| 记录 | 表中的某一行 | 一个具体用户、一件具体商品 |
举例
user 表:
| id | name | age | city |
|---|---|---|---|
| 1 | Alice | 20 | Beijing |
| 2 | Bob | 21 | Shanghai |
这里:
user是表名id、name、age、city是字段- 每一行是一条记录
3.2 主键是什么
一句话理解
主键就是用来唯一标识一条记录的字段。
面试答法
主键是表中用于唯一标识每一行数据的字段或字段组合,它的值不能重复,也不能为 NULL。
例子
在用户表里,id 通常就是主键,因为每个用户都应该有唯一编号。
4. 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 |
面试答法
SQL 常见可以分为 DDL、DML、DQL、DCL。DDL 主要负责定义表结构,DML 负责增删改数据,DQL 主要是查询,DCL 主要和权限控制有关。
5. 最重要的 SQL 语句
下面这些是你必须会的。
为了方便演示,我们假设有两张表:
student
| id | name | age | class_id | score |
|---|---|---|---|---|
| 1 | Tom | 19 | 101 | 90 |
| 2 | Lily | 20 | 102 | 95 |
| 3 | Jack | 19 | 101 | 88 |
class
| id | class_name |
|---|---|
| 101 | Class-A |
| 102 | Class-B |
5.1 select
作用
查询数据。
示例
select * from student;表示查询 student 表中的所有字段。
select name, age from student;表示只查询 name 和 age 两列。
面试提醒
*虽然方便,但线上开发里通常不推荐乱用- 因为会增加不必要的数据传输,也不够清晰
5.2 where
作用
给查询加条件。
示例
select * from student where age = 19;查询年龄等于 19 的学生。
select * from student where score > 90;查询分数大于 90 的学生。
常用条件
=><>=<=!=andorinbetween ... and ...like
示例
select * from student where name like 'T%';查询名字以 T 开头的学生。
5.3 order by
作用
排序。
示例
select * from student order by score desc;按分数从高到低排序。
select * from student order by age asc;按年龄从低到高排序。
关键词
asc:升序,默认desc:降序
5.4 聚合函数
聚合函数是面试和写 SQL 时非常常见的。
| 函数 | 作用 |
|---|---|
count() | 统计数量 |
sum() | 求和 |
avg() | 求平均值 |
max() | 最大值 |
min() | 最小值 |
示例
select count(*) from student;统计学生总数。
select avg(score) from student;统计平均分。
5.5 group by
作用
分组统计。
示例
select class_id, count(*)
from student
group by class_id;统计每个班有多少学生。
select class_id, avg(score)
from student
group by class_id;统计每个班的平均分。
你要知道
group by 常和聚合函数一起使用。
5.6 having
作用
对分组后的结果再做条件筛选。
示例
select class_id, avg(score) as avg_score
from student
group by class_id
having avg(score) > 90;查询平均分大于 90 的班级。
where 和 having 的区别
| 项目 | where | having |
|---|---|---|
| 过滤时机 | 分组前 | 分组后 |
| 能否配合聚合函数 | 一般不直接用于聚合结果过滤 | 可以 |
面试答法
where 是对原始数据进行过滤,having 是对分组之后的结果进行过滤,所以当我们要根据聚合结果筛选时,通常使用 having。
5.7 join
作用
把多张表的数据按某种关系拼起来查。
这在实际后端开发里非常常见。
5.7.1 inner join
一句话理解
只保留两张表都能匹配上的数据。
示例
select s.name, c.class_name
from student s
inner join class c
on s.class_id = c.id;表示查询学生姓名及其所在班级名称。
5.7.2 left join
一句话理解
以左表为主,左表数据全保留,右表匹配不上就补 NULL。
示例
select s.name, c.class_name
from student s
left join class c
on s.class_id = c.id;面试答法
inner join 只返回两张表中关联成功的数据,left join 会保留左表的全部记录,即使右表没有匹配项,也会返回结果,只不过右表字段为 NULL。
6. delete、truncate、drop 的区别
这是经典面试题。
| 语句 | 作用对象 | 删除内容 | 是否保留表结构 |
|---|---|---|---|
delete | 表中的数据 | 删除部分或全部数据 | 保留 |
truncate | 表中的全部数据 | 快速清空整张表 | 保留 |
drop | 整张表 | 删除表和数据 | 不保留 |
更容易记的理解
delete:删数据,表还在truncate:清空整张表,表还在drop:把表整个删掉
面试答法
delete 是按行删除数据,可以带 where 条件;truncate 是快速清空整张表,通常不能回滚到逐行删除那种细粒度;drop 是把表结构和表中的数据一起删除。
注意
不同数据库、不同事务配置下细节可能略有差异,但你现在先掌握面试里的主流答法即可。
7. 本课最常见面试题
7.1 MySQL 和 SQL 有什么区别
标准回答
MySQL 是一个关系型数据库管理系统,而 SQL 是操作关系型数据库的语言。简单来说,MySQL 是数据库软件,SQL 是用来操作这个软件中数据的语言。
7.2 数据库、表、字段、记录分别是什么
标准回答
数据库是存放数据的整体容器,表是数据库中某一类数据的组织形式,字段是表中的列,记录是表中的一行具体数据。
7.3 where 和 having 有什么区别
标准回答
where 是在分组前对原始数据进行过滤,having 是在 group by 之后对分组结果进行过滤。如果条件涉及聚合结果,一般要用 having。
7.4 left join 和 inner join 的区别
标准回答
inner join 只返回两张表中能够匹配上的记录;left join 会保留左表所有记录,右表匹配不到的部分用 NULL 补充。
7.5 delete、truncate、drop 的区别
标准回答
delete 删除表中的数据,通常可以带条件;truncate 是快速清空整张表的数据,但保留表结构;drop 是连表结构带数据一起删除。
8. 你在面试里该怎么说
如果面试官问得比较基础,你可以用下面这种表达模板:
MySQL 是一种关系型数据库,数据通常按表来组织。
我们平时通过 SQL 来对数据库进行增删改查。
比如最常用的查询语句是 select,条件筛选会用 where,
分组统计会用 group by,如果要对分组后的结果筛选会用 having。
多表查询时常见的是 join,比如 inner join 和 left join。这个回答不深,但很稳,适合你现在这个阶段。
9. 本课最小记忆卡片
卡片 1
- 数据库:存储和管理数据的系统
- MySQL:关系型数据库管理系统
- SQL:操作关系型数据库的语言
卡片 2
select:查insert:增update:改delete:删
卡片 3
where:分组前过滤having:分组后过滤
卡片 4
inner join:只保留匹配成功的数据left join:保留左表全部数据
卡片 5
delete:删数据truncate:清空表数据drop:删表
10. 课后练习
10.1 口头复述题
你要尝试不看讲义,自己回答下面问题:
- 什么是 MySQL,什么是 SQL?
- 数据库、表、字段、记录分别是什么?
where和having的区别是什么?left join和inner join的区别是什么?delete、truncate、drop的区别是什么?
10.2 SQL 小练习
假设有一张 employee 表:
| id | name | age | dept | salary |
|---|---|---|---|---|
| 1 | Amy | 23 | dev | 8000 |
| 2 | Bob | 25 | test | 7000 |
| 3 | Carl | 24 | dev | 9000 |
| 4 | Diana | 26 | hr | 6500 |
请你尝试写出下面 SQL:
- 查询所有员工信息
- 查询年龄大于 24 的员工
- 查询开发部门的员工姓名和工资
- 按工资从高到低排序
- 统计每个部门的人数
- 查询平均工资大于 7500 的部门
10.3 今日最低完成标准
如果你时间很紧,今天至少完成下面三件事:
- 把本课最小记忆卡片背下来
- 能口头回答 5 道基础题
- 能手写 6 条基础 SQL
11. 下一课预告
第二课:SQL 进阶查询 +
join高频题专项训练