第 2 章 MySQL 数据库操作

技能目标

  • 掌握 MySQL 库操作
  • 掌握 MySQL 表操作
  • 掌握 MySQL 数据操作
  • 掌握 MySQL 用户权限操作

前言

本课件旨在帮助学习者全面掌握 MySQL 数据库的核心操作技能,包括 MySQL 库的管理、表的结构设计与操作、记录的增删改查以及用户权限的细致管理。通过本课件的学习,你将能够熟练运用 MySQL 进行数据库的日常维护与管理,为深入的数据分析与应用开发打下坚实基础。


一、MySQL 数据库介绍

在熟悉安装及访问 MySQL 数据库以后,接下来将学习使用 MySQL 数据库的基本操作,这也是在服务器运维工作中不可或缺的知识。本节中的所有数据库语句均在 "mysql>" 操作环境中执行,并且每一条操作语句都是以分号(;)结束的。

数据库目前标准的指令集是 SQL。SQL 是 Structured Query Language 的缩写,即结构化查询语言。它是 1974 年由 Boyce 和 Chamberlin 提出的,1975~1979 年 IBM 公司研制的关系数据库管理系统原型 System R 实现了这种语言。经过多年的发展,SQL 语言得到了广泛的应用。

SQL 语言主要由以下几部分组成:

  • DDL(Data Definition Language,数据定义语言) :用来建立数据库、数据库对象和定义字段,如 CREATEALTERDROP
  • DML(Data Manipulation Language,数据操纵语言) :用来插入、删除和修改数据库中的数据,如 INSERTUPDATEDELETE
  • DQL(Data Query Language,数据查询语言) :用来查询数据库中的数据,如 SELECT
  • DCL(Data Control Language,数据控制语言) :用来控制数据库组件的存取许可、存取权限等,如 COMMITROLLBACKGRANTREVOKE

二、MySQL 库操作

1. 系统数据库

经初始化后的 MySQL 服务器,默认建立了四个数据库:sysmysqlinformation_schemaperformance_schema

  • information_schema:虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等。
  • performance_schema:MySQL 5.5 开始新增一个数据库,主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象。
  • mysql:授权库,主要存储系统用户的权限信息。
  • sys:主要用于存储系统性能信息和监控数据,对数据库的性能优化和故障排除具有关键作用。

2. 数据库操作

2.1 创建数据库

语法

sql

复制代码
mysql> CREATE DATABASE 数据库名;

例子:将创建一个名为 db1 的库

sql

复制代码
mysql> CREATE DATABASE db1;
Query OK, 1 row affected (0.01 sec)
2.2 数据库命名规则
  • 可以由字母、数字、下划线、@、#、$ 组成
  • 区分大小写
  • 唯一性
  • 不能使用关键字如 createselect
  • 不能单独使用数字
  • 最长 128 位
2.3 选择数据库

语法

sql

复制代码
mysql> USE 数据库名;

例子:切换 | 进入 db1

sql

复制代码
mysql> use db1;
Database changed
2.4 查看数据库

sql

复制代码
mysql> show databases;  #查看当前数据库中有哪些表
mysql> show create database db1; #显示创建名为 db1 的数据库时所使用的 SQL 语句
mysql> select database();  #返回当前选中的数据库的名称
2.5 删除数据库

语法

sql

复制代码
mysql> DROP DATABASE 数据库名;

例子

sql

复制代码
mysql> drop database db1;
Query OK, 0 rows affected (0.01 sec)

三、MySQL 表操作

1. 表介绍

库相当于文件夹,而表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段。

表格

ID name age sex
1 张三 18 male
2 李四 68 female
3 王五 30 male

idnameagesex 称为字段,其余的,一行内容称为一条数据记录。

2. 查看表

使用 SHOW TABLES 查看当前所在的数据库中包含的表。在操作之前,需要先使用 USE 语句切换到所使用的数据库,就像要查看一个文件夹里面有多少文件,要先进入这个文件夹。

sql

复制代码
mysql> USE mysql;
Database changed
mysql> SHOW TABLES;

3. 创建表

3.1 语法

sql

复制代码
mysql> create table 表名(
    -> 字段名 1 类型[(宽度) 约束条件],
    -> 字段名 2 类型[(宽度) 约束条件],
    -> 字段名 3 类型[(宽度) 约束条件]
    -> );

注意

  1. 在同一张表中,字段名是不能相同
  2. 宽度和约束条件可选
  3. 字段名和类型是必须的,字段的类型宽度和约束条件是可选项
  4. 表中最后一个字段不要加逗号
3.2 类型介绍

表内存放的数据有不同的类型,类似于使用 excel 存储数据时也需要设置的数据类型,每种数据类型都有自己的宽度,但宽度是可选的,不设置宽度时,会使用字段的默认宽度。

MySQL 支持多种类型,大致可以分为三类:数值、日期 / 时间和字符串(字符)类型,对于我们约束数据的类型有很大的帮助。

数值类型

表格

类型 大小 范围(有符号) 范围(无符号) 用途
INT 4 字节 (-2 147 483 648, 2 147 483 647) (0, 4 294 967 295) 大型数值
DOUBLE 8 字节 (-1.797E+308, -2.22E-308) (0,2.22E-308, 308,1.797E+308) 双精度浮点数值
DOUBLE(M,D) 8 字节 M 表示长度,D 表示小数位数 DOUBLE(5,2) -999.99~999.99 受 M 和 D 的约束
DECIMAL(M,D) 依赖于 M 和 D 的值,M 最大值为 65 依赖于 M 和 D 的值,M 最大值为 65 小数值

日期类型

表格

类型 大小 范围 格式 用途
DATE 3 1000-01-01~9999-12-31 YYYY-MM-DD 日期值
TIME 3 -838:59:59/'838:59:59' HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00~9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:00~2038 结束时间是 2038 年 1 月 19 日 03:14:07 YYYYMMDD HHMMSS 混合日期和时间值,时间戳

字符串类型

表格

类型 大小 用途
CHAR 0-255 字符 定长字符串 char (10) 10 个字符
VARCHAR 0-65535 字节 变长字符串 varchar (10) 10 个字符
BLOB 0-65535 字节 二进制形式的长文本数据
TEXT 0-65535 字节 长文本数据
3.3 约束条件

约束条件与数据类型的宽度一样,都是可选参数,类似于使用 excel 存储数据时,可以利用 excel 的公式限制员工 ID 列:禁止重复值,且不能为空。

约束条件作用:用于保证数据的完整性和一致性,主要分为:

表格

约束条件 说明
PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录
FOREIGN KEY (FK) 标识该字段为该表的外键
NOT NULL 标识该字段不能为空
UNIQUE KEY (UK) 标识该字段的值是唯一的
AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT 为该字段设置默认值
UNSIGNED 无符号
ZEROFILL 使用 0 填充
ENUM() 限制字段可以存储的值集合
3.4 创建表示例

sql

复制代码
mysql> create database db1; #创建 db1 库

mysql> use db1;  #进入 db1 库

mysql> create table t1(
    -> id int,
    -> name varchar(50),
    -> age int(3),
    -> sex enum('male','female')
    -> );

mysql> show tables;

4. 查看表结构

DESCRIBE 语句:用于显示表的结构,即组成表的各字段(列)的信息。需要指定 "数据库名。表名" 作为参数;若只指定表名参数,则需先通过 USE 语句切换到目标数据库。

sql

复制代码
mysql> describe t1;  #describe 可简写成 desc

表格

Field Type Null Key Default Extra
id int YES NULL
name varchar(50) YES NULL
age int YES NULL
sex enum('male','female') YES NULL
4 rows in set (0.01 sec)

查看详细表结构或者创建表所使用的语句可以执行 show create table t1\G;# 查看详细结构,可加 \G\G 表示以长格式展示结果

sql

复制代码
mysql> show create table t1\G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `id` int DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  `age` int DEFAULT NULL,
  `sex` enum('male','female') DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
1 row in set (0.19 sec)

5. 修改表

5.1 修改表名

语法

sql

复制代码
ALTER TABLE 表名 RENAME 新表名;

例子

sql

复制代码
mysql> ALTER TABLE t1 RENAME t2;
Query OK, 0 rows affected (0.01 sec)
5.2 增加字段

语法

sql

复制代码
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件...], ADD 字段名 数据类型 [完整性约束条件...];
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件...] FIRST;
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件...] AFTER 字段名;

例子

sql

复制代码
mysql> ALTER TABLE t1 ADD class int(3) not null;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 1
5.3 删除字段

语法

sql

复制代码
ALTER TABLE 表名 DROP 字段名;

例子

sql

复制代码
mysql> alter table t2 drop class;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
5.4 修改字段

语法

sql

复制代码
ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件...];
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件...];
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件...];

例子

sql

复制代码
alter table t2 modify name char(50);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table t2 change name user_name varchar(50);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

6. 复制表

  • 只复制表结构,不复制表中数据

sql

复制代码
mysql> create table t3 like t2;
Query OK, 0 rows affected (0.01 sec)
  • 复制表结构 + 记录(key 不会复制:主键、外键和索引)

sql

复制代码
mysql> create table t4 select * from t2;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

注:select * from t2 是查询语句,在后续内容中讲解

7. 删除表

删除数据库中的表,需要指定 "数据库名。表名" 作为参数;若只指定表名参数,则需先通过执行 "USE" 语句切换到目标数据库

sql

复制代码
mysql> drop table t2;
Query OK, 0 rows affected (0.01 sec)

mysql> drop table db1.t3;
Query OK, 0 rows affected (0.01 sec)

四、MySQL 数据操作

1. 介绍

在 MySQL 管理软件中,可以通过 SQL 语句中的 DML 语言来实现数据的操作,包括使用 INSERT 实现数据的插入、使用 UPDATE 实现数据的更新、使用 DELETE 实现数据的删除、使用 SELECT 查询数据。

创建示例表

sql

复制代码
mysql> use db1;  #进入 db1 库
mysql> create table t1(
    -> id int,
    -> name varchar(50),
    -> age int(3),
    -> sex enum('male','female')
    -> );
mysql> show tables;

2. 插入数据 INSERT

INSERT INTO 语句:用于向表中插入新的数据记录,语句格式如下所示插入数据后可使用 mysql> select * from t1; 验证

顺序插入

sql

复制代码
INSERT INTO 表名 VALUES (值 1, 值 2, 值 3...值 n);
mysql> INSERT INTO t1 VALUES(1,"zhangsan",18,"male");
Query OK, 1 row affected (0.00 sec)

指定字段插入数据

sql

复制代码
INSERT INTO 表名(字段 1, 字段 2, 字段 3...字段 n) VALUES(值 1, 值 2, 值 3...值 n);
mysql> INSERT INTO t1(id,name,age,sex) VALUES(2,"lisi",18,"female");
Query OK, 1 row affected (0.00 sec)

插入多条记录

sql

复制代码
INSERT INTO 表名 VALUES (值 1, 值 2, 值 3...值 n), (值 1, 值 2, 值 3...值 n), (值 1, 值 2, 值 3...值 n);
mysql>INSERT INTO t1 VALUES(3,"wangwu",28,"male"),(4,"zhaoliu",30,"female");
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

3. 删除数据 DELETE

DELETE 语句:用于删除表中指定的数据记录,语句格式如下所示删除数据后可使用 mysql> select * from t1; 验证

sql

复制代码
DELETE FROM 表名 WHERE 条件表达式   #条件表达式后续讲解
mysql> delete from t1 where id=1;
Query OK, 1 row affected (0.01 sec)

4. 更新数据 UPDATE

UPDATE 语句:用于修改、更新表中的数据记录。语句格式如下所示。更新数据后可使用 mysql> select * from t1; 验证

sql

复制代码
UPDATE 表名 SET 字段名 1=字段值 1[, 字段名 2=字段值 2] WHERE 条件表达式
mysql> update t1 set age=100 where name="wangwu";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

需要注意的是,在执行 UPDATEDELETE 语句时,通常都带 WHERE 条件,不带条件的 UPDATE 语句和 DELETE 语句会修改或删除所有的记录,是非常危险的操作。

5. 查询数据 SELECT

SELECT 语句:用于从指定的表中查找符合条件的数据记录。MySQL 数据库支持标准的 SQL 查询语句,语句格式如下所示

sql

复制代码
SELECT 字段 1,字段 2... FROM 表名
    WHERE 条件
    GROUP BY 字段
    HAVING 筛选
    ORDER BY 字段
    LIMIT 限制条数
1.2 关键字执行的优先级

plaintext

复制代码
from
where
group by
having
select
order by
limit

说明

  1. 找到表:from
  2. 拿着 where 指定的约束条件,去文件 / 表中取出一条记录
  3. 将取出的一条记录进行分组 group by,如果没有 group by,则整体作为一组
  4. 将分组的结果进行 having 过滤
  5. 执行 select
1.3 准备数据

创建测试库

sql

复制代码
mysql> create database test;

创建人员信息表

sql

复制代码
mysql>use test;
mysql>create table renyuan(
id int not null unique auto_increment, #员工 id
name varchar(20) not null,    #姓名
sex enum('male','female') not null default 'male', #性别,大部分是男的
age int(3) unsigned not null default 28,  #年龄
hire_date date not null,   #入职时间
post varchar(50),    #岗位
post_comment varchar(100), #职位描述
salary double(15,2),  #薪资
office int, #办公室,一个部门一个屋子
depart_id int #部门编号
);

插入数据:三个部门:教学,销售,运营

sql

复制代码
mysql>insert into renyuan(name,sex,age,hire_date,post,salary,office,depart_id) values
('zhangsan','male',18,'20170301','teacher',7300.33,401,1), #教学部
('lisi','male',78,'20150302','teacher',100000.31,401,1),
('wangwu','male',81,'20130305','teacher',8300,401,1),
('zhaoliu','male',73,'20140701','teacher',3500,401,1),
('suqi','male',28,'2012101','teacher',2100,401,1),
('zhuba','female',18,'20110211','teacher',9000,401,1),
('hongjinbao','male',18,'19000301','teacher',30000,401,1),
('chenglong','male',48,'20101111','teacher',10000,401,1),

('歪歪','female',48,'20150311','sale',3000,13,402,2),#销售部门
('丫丫','female',38,'20101101','sale',2000.35,402,2),
('丁丁','female',18,'20110312','sale',1000.37,402,2),
('星星','female',18,'20160513','sale',3000.29,402,2),
('格格','female',28,'20170427','sale',4000.33,402,2),

('张野','male',28,'20160311','operation',10000.13,403,3), #运营部门
('程咬金','male',18,'19970312','operation',20000,403,3),
('程咬银','female',18,'20130311','operation',19000,403,3),
('程咬铜','male',18,'20150411','operation',18000,403,3),
('程咬铁','male',18,'20140512','operation',17000,403,3)
;
1.4 简单查询

语法:把表中需要的列的数据查询出来

sql

复制代码
SELECT 字段 1,字段 2... FROM 表名

例子

sql

复制代码
SELECT id,name,office FROM renyuan;

表示所有字段时,可以使用通配符 "*",显示所有的数据记录

sql

复制代码
SELECT * FROM renyuan;
1.5 where 条件

WHERE 是 SQL 中用于筛选数据的核心子句,其作用是通过指定条件从表中过滤出符合条件的记录。它可应用于 SELECTUPDATEDELETE 等语句中,控制操作的范围。

where 子句中可以使用:

  1. 比较运算符:> <>= <= <> !=
  2. between 80 and 100 值在 10 到 20 之间
  3. in(80,90,100) 值是 10 或 20 或 30
  4. like 'egon%'pattern 可以是 %_% 表示任意多个字符_ 表示一个字符
  5. 逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not

(1)比较运算符:> <>= <= <> !=薪资大于 10000 的人姓名

sql

复制代码
select name,salary from renyuan where salary > 10000 ;

不是 403 办公室的人姓名

sql

复制代码
select name,office from renyuan where office != 403;

(2)between and:在什么之间薪资在 10000 至 15000 之间的人姓名

sql

复制代码
select name,salary from renyuan where salary between 10000 and 15000 ;

(3)in:集合查询薪资是 9000 或 10000 或 30000 的人姓名

sql

复制代码
select name,salary from renyuan where salary in(9000,10000,30000);

(4)like :像,模糊匹配_:任意单个字符%:任意多个字符名字以 "程" 开头的人的信息

sql

复制代码
select * from renyuan where name like "程咬_";
select * from renyuan where name like "程%";

(5)逻辑运算符and or not薪资 17000 并且办公室是 403 的人

sql

复制代码
select * from renyuan where office=403 and salary=17000;

薪资 17000 或者办公室是 403 的人

sql

复制代码
select * from renyuan where office=403 or salary=17000;

薪资不是 9000 或 10000 或 30000 的人姓名

sql

复制代码
select name,salary from renyuan where salary not in(9000,10000,30000);
1.6 group by 分组

**(1)什么是分组?为什么要分组?**分组指的是:将所有记录按照某个相同字段进行归类,比如针对员工信息表的职位分组,或者按照性别进行分组等。

为何要分组呢?

  • 取每个部门的最高工资
  • 取每个部门的员工数
  • 取男人数和女人数 #这个需求没有 "每" 字,但可以把需求格式化为:取每个性别的人数

小窍门:'每'这个字后面的字段,就是我们分组的字段

可以按照任意字段分组,但是分组完毕后,比如 group by sex,只能查看 sex 字段,如果想查看组内信息,需要借助于聚合函数

例子

sql

复制代码
mysql> select * from renyuan group by sex;  #以 sex 分组,查看除了 sex 以外的字段会报错
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.renyuan.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

mysql> select sex from renyuan group by sex;
+--------+
| sex    |
+--------+
| male   |
| female |
+--------+
2 rows in set (0.00 sec)

但是只查看 sex 字段又没有任何意义,因为需要的是组内的信息,所以需要结合聚合函数查看

(2)聚合函数count() avg() max() min() sum()

  • count():计数计算男生和女生的人数

    sql

    复制代码
    mysql>select sex,count(*) from renyuan group by sex;
  • avg():平均值每个岗位的平均薪资

    sql

    复制代码
    mysql>select post,avg(salary) from renyuan group by post;
  • max():最大值每个岗位的最高薪资

    sql

    复制代码
    mysql>select post,max(salary) from renyuan group by post;
  • min():最小值每个岗位的最低薪资

    sql

    复制代码
    mysql>select post,min(salary) from renyuan group by post;
  • sum():总和每个岗位的薪资总和

    sql

    复制代码
    mysql>select post,sum(salary) from renyuan group by post;
1.7 having 过滤

HAVING 与 WHERE 不一样的地方

  • 执行优先级从高到低:where > group by > having
  • Where 发生在分组 group by 之前,因而 Where 中可以有任意字段,但是绝对不能使用聚合函数。
  • Having 发生在分组 group by 之后,因而 Having 中可以使用分组的字段,无法直接取到其他字段,但可以使用聚合函数

有哪些岗位是平均工资大于 10000 的

sql

复制代码
mysql>select post,avg(salary) from renyuan group by post having avg(salary) >10000;
1.8 order by 排序

使用 SELECT 语句可以将需要的数据从 MySQL 数据库中查询出来,如果对查询的结果进行排序,该如何去实现呢?可以使用 ORDER BY 语句来完成排序,并最终将排序后的结果返回给用户

排序的关键字可以使用 ASC 或者 DESCASC 是按照升序进行排序的,是默认的排序方式,即 ASC 可以省略。SELECT 语句中如果没有指定具体的排序方式,则默认按 ASC 方式进行排序。DESC 是按降序方式进行排列

sql

复制代码
mysql>select * from renyuan order by id asc; #默认是正序 asc 可以省略
mysql>select * from renyuan order by id desc; #倒叙
1.9 limit 限制结果条目

在使用 MySQL SELECT 语句进行查询时,结果集返回的是所有匹配的记录。有时候仅需要返回第一行或者前几行,这时候就需要用到 LIMIT 子句

倒叙排列后仅显示第一行

sql

复制代码
mysql>select * from renyuan order by id desc limit 1;
1.10 正则匹配

MySQL 正则表达式通常是在检索数据库记录的时候,根据指定的匹配模式匹配记录中符合要求的特殊字符串。MySQL 的正则表达式使用 REGEXP 这个关键字来指定正则表达式的匹配模式

  • Name 是 l 开头的姓名 sql

    复制代码
    mysql>select * from renyuan where name regexp "^l";
  • Name 是 u 结尾的姓名 sql

    复制代码
    mysql>select * from renyuan where name regexp "u$";
  • Name 是 wan 和 wu 之间至少 1 个 g 的姓名 sql

    复制代码
    mysql>select * from renyuan where name regexp "wang+wu";

2. 多表查询

多表查询用于从多个关联表中提取组合数据,常见方式包括 JOIN 连接和子查询,以下是关键知识点与使用场景:

准备数据

创建 test2 数据库

sql

复制代码
create database test2;

创建人员表和部门表

sql

复制代码
use test2;
create table bumen(
id int,
name varchar(20)
);

create table renyuan(
id int primary key auto_increment,
name varchar(20),
sex enum('male','female') not null default 'male',
age int,
dep_id int #部门 ID
);

插入数据

sql

复制代码
insert into bumen values
(200,'技术'),
(201,'人力资源'),
(202,'销售'),
(203,'运营');

insert into renyuan(name,sex,age,dep_id) values
('zhangsan','male',18,200),
('lisi','female',48,201),
('wangwu','male',38,201),
('zhaoliu','female',28,202),
('sunqi','male',18,200),
('zhuba','female',18,204)
;
2.1 子查询

子查询也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语句。子查询语句是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一步的查询过滤。子查询不仅可以在 SELECT 语句中使用,在 INSERTUPDATEDELETE 中也同样适用。在嵌套的时候,子查询内部还可以再次嵌套新的子查询,也就是说可以多层嵌套。

在开始实际的举例之前,先来学习一下 IN 这个操作符的用法,IN 用来判断某个值是否在给定的结果集中,通常结合子查询来使用。IN 的语法结构如下:

plaintext

复制代码
<表达式> [NOT] IN <子查询>

当表达式与子查询返回的结果集中的某个值相等时,返回 TRUE,否则返回 FALSE。若启用了 NOT 关键字,则返回值相反。需要注意的是,子查询只能返回一列数据,如果需求比较复杂,一列解决不了问题,可以使用多层嵌套的方式来应对。

查询平均年龄在 25 岁以上的部门名


结尾

通过本章的学习,我们已经全面掌握了 MySQL 数据库的核心操作,从库的创建与管理、表的设计与维护,到数据的增删改查,再到多表查询的进阶技巧,这些都是数据库开发与运维工作中最基础也最重要的能力。

熟练运用这些 SQL 语句,不仅能高效地完成日常数据管理工作,还能为后续的性能优化、事务处理以及复杂业务逻辑开发打下坚实基础。在实际应用中,建议多结合具体业务场景进行练习,不断加深对 SQL 语法和数据库原理的理解,让数据真正成为驱动业务发展的核心力量。

相关推荐
小年糕是糕手2 小时前
【35天从0开始备战蓝桥杯 -- Day5】
数据结构·数据库·c++·算法·蓝桥杯
草莓熊Lotso3 小时前
Linux IPC 进阶:System V 消息队列与信号量(含内核管理深度解析)
linux·运维·服务器·数据库·c++·人工智能·mysql
星马梦缘8 小时前
数据库作战记录1
数据库·sql·mysql
短剑重铸之日10 小时前
《ShardingSphere解读》07 读写分离:如何集成分库分表+数据库主从架构?
java·数据库·后端·架构·shardingsphere·分库分表
njidf10 小时前
用Python制作一个文字冒险游戏
jvm·数据库·python
鸡蛋灌Bean11 小时前
MySQL优化系列
数据库·mysql
数巨小码人11 小时前
平滑迁移:传统到国产数据库的2026转型之路
数据库
麦聪聊数据12 小时前
QuickAPI 在系统数据 API 化中的架构选型与集成
数据库·sql·低代码·微服务·架构
2403_8355684712 小时前
自然语言处理(NLP)入门:使用NLTK和Spacy
jvm·数据库·python