SQL快速入门【转自牛客网】
来源:牛客网
1、SQL 基础查询
在 SQL 中,SELECT
语句是最基本的查询语句,用于从数据库表中检索数据。通过 SELECT
语句,可以选择表中的所有列或特定列,并根据需要进行过滤和排序。
基本语法
SELECT
语句的基本语法如下:
SELECT column1, column2, ...
FROM table_name;
其中:
column1, column2, ...
:指定要查询的列名,可以是表中的具体列名或表达式。table_name
:指定要查询的表名。
查询所有列
使用 *
通配符查询表中的所有列:
SELECT * FROM table_name;
此语句会返回 table_name
表中的所有列和所有行。
查询特定列
明确指定列名查询表中的特定列:
SELECT first_name, last_name, salary
FROM table_name;
此语句会返回 table_name
表中的 first_name
、last_name
和 salary
列的所有行。
使用别名
为列或表指定别名,使查询结果更易读:
SELECT first_name AS name, last_name AS surname, salary
FROM table_name AS tn;
此语句会将 first_name
和 last_name
列分别重命名为 name
和 surname
,同时将表 table_name
重命名为 tn
。
示例
假设 employees
表的数据如下:
employee_id | first_name | last_name | salary | department_id |
---|---|---|---|---|
1 | Alice | Smith | 60000 | 101 |
2 | Bob | Johnson | 70000 | 101 |
3 | Charlie | Brown | 50000 | 102 |
查询所有列
SELECT * FROM employees;
结果:
employee_id | first_name | last_name | salary | department_id |
---|---|---|---|---|
1 | Alice | Smith | 60000 | 101 |
2 | Bob | Johnson | 70000 | 101 |
3 | Charlie | Brown | 50000 | 102 |
查询特定列
SELECT first_name, last_name, salary FROM employees;
结果:
first_name | last_name | salary |
---|---|---|
Alice | Smith | 60000 |
Bob | Johnson | 70000 |
Charlie | Brown | 50000 |
使用别名
SELECT first_name AS fname, last_name AS lname FROM employees;
结果:
fname | lname |
---|---|
Alice | Smith |
Bob | Johnson |
Charlie | Brown |
2、简单处理查询结果
前面章节中的SELECT语句都是返回所有匹配的行。但是如果想对结果进行简单处理,可以通过以下方法实现:
查询结果的过滤
使用WHERE
子句可以根据条件过滤查询结果。
语法:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
condition
:限制条件。
查询结果的排序
使用ORDER BY
子句可以根据指定的列对查询结果进行排序。
语法:
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;
column1 [ASC|DESC]
:按照column1
[升序|降序]进行排序,若不加ASC
或DESC
则默认升序。
查询结果的去重
使用DISTINCT
关键字可以去除查询结果中的重复行。
语法:
SELECT DISTINCT column1, column2, ...
FROM table_name;
对column1, column2, ...
列中的重复行进行去除。
查询结果的限制
在某些数据库系统中,可以使用LIMIT
子句限制查询结果的行数。
语法:
SELECT column1, column2, ...
FROM table_name
LIMIT n;
限制输出n
行。
示例
假设employees
表的数据如下:
employee_id | first_name | last_name | salary | department_id |
---|---|---|---|---|
1 | Alice | Smith | 60000 | 101 |
2 | Bob | Johnson | 70000 | 101 |
3 | Charlie | Brown | 50000 | 102 |
4 | David | Davis | 80000 | 102 |
5 | Eve | White | 90000 | 103 |
查询结果的过滤
查询employees
表中工资大于60000的员工。
SELECT *
FROM employees
WHERE salary > 60000;
结果:
employee_id | first_name | last_name | salary | department_id |
---|---|---|---|---|
2 | Bob | Johnson | 70000 | 101 |
4 | David | Davis | 80000 | 102 |
5 | Eve | White | 90000 | 103 |
查询结果的排序
查询employees
表中的所有员工,并按工资降序排序。
SELECT *
FROM employees
ORDER BY salary DESC;
结果:
employee_id | first_name | last_name | salary | department_id |
---|---|---|---|---|
5 | Eve | White | 90000 | 103 |
4 | David | Davis | 80000 | 102 |
2 | Bob | Johnson | 70000 | 101 |
1 | Alice | Smith | 60000 | 101 |
3 | Charlie | Brown | 50000 | 102 |
查询结果的去重
查询employees
表中所有(不重复)的部门ID。
SELECT DISTINCT department_id
FROM employees;
结果:
department_id |
---|
101 |
102 |
103 |
查询结果的限制
查询employees
表中工资最高的3名员工。
SELECT *
FROM employees
ORDER BY salary DESC
LIMIT 3;
结果:
employee_id | first_name | last_name | salary | department_id |
---|---|---|---|---|
5 | Eve | White | 90000 | 103 |
4 | David | Davis | 80000 | 102 |
2 | Bob | Johnson | 70000 | 101 |
以下是整理后的Markdown格式内容:
3、SQL 基础排序 - ORDER BY 子句
在 SQL 中,ORDER BY
子句用于对查询结果进行排序。通过 ORDER BY 子句,可以根据一个或多个列对结果集进行升序或降序排列
。这在处理大量数据时非常有用,可以帮助更清晰地查看和分析数据。
ORDER BY 子句的使用
ORDER BY 子句的基本语法如下:
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC];
column1
:指定要排序的列名。ASC
:表示按升序排序(默认值)。DESC
:表示按降序排序。
多列排序
ORDER BY 子句也可以根据多个列进行排序。语法如下:
ORDER BY column1 ASC, column2 DESC;
示例
假设有一个 employees
表,包含以下数据:
employee_id | first_name | last_name | salary | department_id |
---|---|---|---|---|
1 | Alice | Smith | 60000 | 101 |
2 | Bob | Johnson | 70000 | 101 |
3 | Charlie | Brown | 50000 | 102 |
4 | David | Davis | 80000 | 102 |
5 | Eve | White | 90000 | 103 |
单列排序
查询所有员工,并按工资升序排序:
SELECT employee_id, first_name, last_name, salary
FROM employees
ORDER BY salary ASC;
结果:
employee_id | first_name | last_name | salary |
---|---|---|---|
3 | Charlie | Brown | 50000 |
1 | Alice | Smith | 60000 |
2 | Bob | Johnson | 70000 |
4 | David | Davis | 80000 |
5 | Eve | White | 90000 |
查询所有员工,并按工资降序排序:
SELECT employee_id, first_name, last_name, salary
FROM employees
ORDER BY salary DESC;
结果:
employee_id | first_name | last_name | salary |
---|---|---|---|
5 | Eve | White | 90000 |
4 | David | Davis | 80000 |
2 | Bob | Johnson | 70000 |
1 | Alice | Smith | 60000 |
3 | Charlie | Brown | 50000 |
多列排序
查询所有员工,并先按部门 ID 升序排序,再按工资降序排序:
SELECT employee_id, first_name, last_name, salary, department_id
FROM employees
ORDER BY department_id ASC, salary DESC;
结果:
employee_id | first_name | last_name | salary | department_id |
---|---|---|---|---|
2 | Bob | Johnson | 70000 | 101 |
1 | Alice | Smith | 60000 | 101 |
4 | David | Davis | 80000 | 102 |
3 | Charlie | Brown | 50000 | 102 |
5 | Eve | White | 90000 | 103 |
使用别名排序
也可以在 ORDER BY 子句中使用列的别名
进行排序。例如:
SELECT employee_id, first_name, last_name, salary AS emp_salary
FROM employees
ORDER BY emp_salary DESC;
结果:
employee_id | first_name | last_name | emp_salary |
---|---|---|---|
5 | Eve | White | 90000 |
4 | David | Davis | 80000 |
2 | Bob | Johnson | 70000 |
1 | Alice | Smith | 60000 |
3 | Charlie | Brown | 50000 |
4、SQL 基础操作符
在 SQL 中,操作符用于在 WHERE
子句中指定条件,以过滤查询结果。以下是一些常用的基础操作符及其用法。
1. 比较运算符
比较运算符用于比较两个值
,返回布尔值
(TRUE 或 FALSE)。常用的比较运算符包括:
=
:等于<>
或!=
:不等于>
:大于<
:小于>=
:大于等于<=
:小于等于
2. 逻辑运算符
逻辑运算符用于组合多个条件
,返回布尔值。常用的逻辑运算符包括:
AND
:逻辑与OR
:逻辑或NOT
:逻辑非
3. IN 操作符
IN 操作符用于指定多个可能的值
,返回布尔值。语法如下:
SELECT column1, column2
FROM table_name
WHERE column1 IN (value1, value2, ...);
4. BETWEEN 操作符
BETWEEN 操作符用于指定一个范围
,返回布尔值。语法如下:
SELECT column1, column2
FROM table_name
WHERE column1 BETWEEN value1 AND value2;
5. LIKE 操作符
LIKE 操作符用于模式匹配
,返回布尔值。语法如下:
SELECT column1, column2
FROM table_name
WHERE column1 LIKE pattern;
%
:匹配任意数量的字符(包括零个字符)。_
:匹配单个字符。
假设有一个 employees
表,包含以下数据:
employee_id | first_name | last_name | salary | department_id |
---|---|---|---|---|
1 | Alice | Smith | 60000 | 101 |
2 | Bob | Johnson | 70000 | 101 |
3 | Charlie | Brown | 50000 | 102 |
4 | David | Davis | 80000 | 102 |
5 | Eve | White | 90000 | 103 |
示例 1:比较运算符
查询工资大于 60000 的员工:
SELECT *
FROM employees
WHERE salary > 60000;
结果:
employee_id | first_name | last_name | salary | department_id |
---|---|---|---|---|
2 | Bob | Johnson | 70000 | 101 |
4 | David | Davis | 80000 | 102 |
5 | Eve | White | 90000 | 103 |
示例 2:逻辑运算符
查询工资大于 60000 且部门 ID 为 102 的员工:
SELECT *
FROM employees
WHERE salary > 60000 AND department_id = 102;
结果:
employee_id | first_name | last_name | salary | department_id |
---|---|---|---|---|
4 | David | Davis | 80000 | 102 |
示例 3:IN 操作符
查询部门 ID 为 101 或 103 的员工:
SELECT *
FROM employees
WHERE department_id IN (101, 103);
结果:
employee_id | first_name | last_name | salary | department_id |
---|---|---|---|---|
1 | Alice | Smith | 60000 | 101 |
2 | Bob | Johnson | 70000 | 101 |
5 | Eve | White | 90000 | 103 |
示例 4:BETWEEN 操作符
查询工资在 50000 到 70000 之间的员工:
SELECT *
FROM employees
WHERE salary BETWEEN 50000 AND 70000;
结果:
employee_id | first_name | last_name | salary | department_id |
---|---|---|---|---|
1 | Alice | Smith | 60000 | 101 |
2 | Bob | Johnson | 70000 | 101 |
3 | Charlie | Brown | 50000 | 102 |
示例 5:LIKE 操作符
查询名字以字母 “A” 开头的员工:
SELECT *
FROM employees
WHERE first_name LIKE 'A%';
结果:
employee_id | first_name | last_name | salary | department_id |
---|---|---|---|---|
1 | Alice | Smith | 60000 | 101 |
4、SQL 高级操作符
在 SQL 中,高级操作符可以帮助你更灵活和高效地操作数据库中的数据。以下是一些常见的高级操作符及其用法。
1. IS NULL
和 IS NOT NULL
IS NULL 和 IS NOT NULL 用于检查一个列是否为 NULL 或不为 NULL。
- IS NULL:检查列是否为 NULL。
- IS NOT NULL:检查列是否不为 NULL。
2. EXISTS
操作符
EXISTS 操作符用于检查子查询是否返回任何行
。如果子查询返回至少一行,则 EXISTS 条件为 TRUE。
语法:
SELECT column1, column2
FROM table_name
WHERE EXISTS (SELECT 1 FROM another_table WHERE condition);
3. ALL
和 ANY
操作符
ALL 和 ANY 操作符用于比较一个值与子查询返回的值集
。
- ALL:与子查询返回的所有值进行比较。
- ANY:与子查询返回的任意一个值进行比较。
语法:
SELECT column1, column2
FROM table_name
WHERE column1 > ALL (SELECT column1 FROM another_table WHERE condition);
假设有一个 employees 表,包含以下数据:
employee_id | first_name | last_name | salary | department_id |
---|---|---|---|---|
1 | Alice | Smith | 60000 | 101 |
2 | Bob | Johnson | 70000 | 101 |
3 | Charlie | Brown | NULL | 102 |
4 | David | Davis | 80000 | 102 |
5 | Eve | White | 90000 | 103 |
示例1:IS NULL 和 IS NOT NULL
查询工资为 NULL 的员工:
SELECT *
FROM employees
WHERE salary IS NULL;
结果:
employee_id | first_name | last_name | salary | department_id |
---|---|---|---|---|
3 | Charlie | Brown | NULL | 102 |
查询工资不为 NULL 的员工:
SELECT *
FROM employees
WHERE salary IS NOT NULL;
结果:
employee_id | first_name | last_name | salary | department_id |
---|---|---|---|---|
1 | Alice | Smith | 60000 | 101 |
2 | Bob | Johnson | 70000 | 101 |
4 | David | Davis | 80000 | 102 |
5 | Eve | White | 90000 | 103 |
示例2:EXISTS 操作符
现在,我们想查询所有工资不低于表中任何其他员工工资的员工
。这里可以使用 EXISTS 操作符来实现。
SELECT e1.employee_id, e1.first_name, e1.last_name, e1.salary
FROM employees e1
WHERE EXISTS (SELECT 1FROM employees e2WHERE e2.salary IS NOT NULL AND e1.salary >= e2.salary
);
子查询:
- 子查询也从 employees 表中选择数据,但使用别名 e2。
- 子查询的条件是
e2.salary IS NOT NULL
,确保不比较 NULL 值。 - 子查询的条件是
e1.salary >= e2.salary
,确保外层查询的员工工资高于子查询中的任何员工工资。
EXISTS 操作符:
- 如果子查询返回至少一行,则 EXISTS 条件为 TRUE。
- 这意味着外层查询的员工工资不低于表中任何其他员工的工资。
结果:
employee_id | first_name | last_name | salary |
---|---|---|---|
5 | Eve | White | 90000 |
员工 Eve 的工资是 90000,这是表
相关文章:
SQL快速入门【转自牛客网】
来源:牛客网 1、SQL 基础查询 在 SQL 中,SELECT 语句是最基本的查询语句,用于从数据库表中检索数据。通过 SELECT 语句,可以选择表中的所有列或特定列,并根据需要进行过滤和排序。 基本语法 SELECT 语句的基本语法如下: SELECT column1, column2, ... FROM table_na…...

行业案例 | OPPO借助Azure AI Speech国际服务实现音频文件智能转录
OPPO是全球领先的智能终端与移动互联网服务提供商,业务覆盖50余国,通过超40万销售网点和2500个服务中心与全球用户共享科技。作为软硬服一体化科技公司,OPPO以ColorOS为核心优化软件平台,为4.4亿月活用户打造智能操作系统…...

基于 OpenCV 和 DLib 实现面部特征调整(眼间距、鼻子、嘴巴)
摘 要 本文介绍如何利用Dlib面部特征点检测和OpenCV图像处理技术,通过Python实现面部特征的精准调整。我们将以改变眼间距为例,演示包括地标检测、三角剖分变形等关键技术,该方法可扩展至嘴唇、眉毛等面部特征的调整。 技术栈 Python 3.8 …...

spring-boot接入websocket教程以及常见问题解决
我们使用spring-boot接入websocket有三种方式:使用EnableWebSocket、EnableWebSocketMessageBroker以及ServerEndpoint,本文主要介绍使用ServerEndpoint方式的流程以及碰到的问题解决 接入方式 添加依赖 确保spring-boot-starter-websocket依赖 <d…...

迈向分布式智能:解析MCP到A2A的通信范式迁移
智能体与外部世界的桥梁之言: 在深入探讨智能体之间的协作机制之前,我们有必要先厘清一个更基础的问题:**单个智能体如何与外部世界建立连接?** 这就引出了我们此前介绍过的 **MCP(Model Context Protocol&…...

深度学习|pytorch基本运算-hadamard积、点积和矩阵乘法
【1】引言 pytorch对张量的基本运算和线性代数课堂的教学有一些区别,至少存在hadamard积、点积和矩阵乘法三种截然不同的计算方法。 【2】hadamard积 hadamard积是元素对位相乘,用“*”连接张量,代码: # 导入包 import torch …...

FFmpeg移植教程(linux平台)
目录 第三方源码编译三部曲关于 configure 的说明 FFmpeg 移植流程获取源码方法一:git 远程克隆方法二:官网下载压缩包解压 配置安装 第三方源码编译三部曲 Linux平台下有许多开源的第三方库和服务,这些开源代码一般都符合GNU-autotools编码…...

Mybatis:灵活掌控SQL艺术
在前面的文章中,小编分享了spring中相关的知识,但是没有分享到,如何去更高效操作数据库。 操作数据库传统的方法就是通过JDBC来进行操作。 这个传统方法使用上可谓是够麻烦的 1.首先创建一个数据源对象 2.设置该数据源的属性(…...

2025.05.28【Choropleth】群体进化学专用图:区域数据可视化
Load geospatial data Start by loading your geospatial data in R, and build a basic plot. Data from the package The cartography comes with a set of geospatial data included. Learn how to use it to build a choropleth map. 文章目录 Load geospatial dataData …...
Java设计模式详解:策略模式(Strategy Pattern)
在软件开发中,设计模式是解决常见问题的经典方法。策略模式(Strategy Pattern)作为一种行为型设计模式,能够将算法或行为的定义与使用分离,使得算法可以独立于客户端代码进行变化和扩展。本文将深入解析策略模式的核心…...

【春秋云镜】CVE-2022-26965 靶场writeup
知识点 网站的主题或者模块位置一般是可以上传文件的,不过一般为压缩包形式主题或者模块可以上github上找到和cms匹配的源码主题被解压后会放到加入到对应的文件夹中,而且还会自动执行对应的info.php文件(需要主题和cms配套才行)我这里取巧了࿰…...
爬虫的几种方式(使用什么技术来进行一个爬取数据)
在网页数据爬取中,确实存在多种数据呈现和获取形式,远不止静态HTML解析和简单JS渲染。理解这些形式对于应对不同的反爬机制至关重要: 主要数据获取形式与应对策略 纯静态HTML (基础形式) 特点: 数据直接嵌入在服务器返回的初始HT…...
XML 编码:结构化数据的基石
XML 编码:结构化数据的基石 引言 XML(可扩展标记语言)作为互联网上广泛使用的数据交换格式,已经成为结构化数据存储和传输的重要工具。本文旨在深入探讨XML编码的原理、应用场景以及编码规范,帮助读者更好地理解和运用XML。 XML编码概述 1. XML的起源 XML诞生于1998年…...
nt!CcGetVacbMiss函数分析之设置好nt!_VACB然后调用函数nt!SetVacb
第一部分:MmMapViewInSystemCache函数返回 Status MmMapViewInSystemCache (SharedCacheMap->Section, &Vacb->BaseAddress, &NormalOffset, …...

JSP、HTML和Tomcat
9x9上三角乘法表 乘法表的实现 <% page contentType"text/html;charsetUTF-8" language"java" %> <!DOCTYPE html> <html> <head><title>99 上三角乘法表</title><style>body {font-family: monospace;padding…...

(1)pytest简介和环境准备
1. pytest简介 pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它具有如下特点: 非常容易上手,入门简单&a…...
Git 入门学习教程
Git 入门学习教程 什么是 Git? Git 是一个分布式版本控制系统,由 Linus Torvalds 为 Linux 内核开发而创建。它可以帮助开发者: 跟踪代码变化协作开发项目回退到之前的版本创建分支进行实验性开发 安装 Git Windows 下载 Git for Windo…...

构建高性能风控指标系统
一、引言 在金融风控领域,指标是风险识别的核心依据。风控平台核心系统之一--规则引擎的运行依赖规则、变量和指标,一个高性能的指标系统非常重要,本文将深入探讨风控平台指标系统的全链路技术实现,涵盖从指标配置到查询优化的完…...
openfeignFeign 客户端禁用 SSL
要针对特定的 Feign 客户端禁用 SSL 验证,可以通过自定义配置类实现。以下是完整解决方案: 1. 创建自定义配置类(禁用 SSL 验证) import feign.Client; import feign.httpclient.ApacheHttpClient; import org.apache.http.conn…...
DeepSeek 赋能自动驾驶仿真测试:解锁高效精准新范式
目录 一、自动驾驶仿真测试概述1.1 自动驾驶发展现状1.2 自动驾驶仿真测试流程 二、DeepSeek 技术剖析2.1 DeepSeek 简介2.2 DeepSeek 核心技术原理 三、DeepSeek 在自动驾驶仿真测试中的应用原理3.1 与自动驾驶仿真测试流程的结合点3.2 如何提升仿真测试效果 四、DeepSeek 在自…...

晨控CK-UR12与西门子PLC配置Modbus TCP通讯连接操作手册
晨控CK-UR12与西门子PLC配置Modbus TCP通讯连接操作手册 晨控CK-UR12系列作为晨控智能工业级别RFID读写器,支持大部分工业协议如RS232、RS485、以太网。支持工业协议Modbus RTU、Modbus TCP、Profinet、EtherNet/lP、EtherCat以及自由协议TCP/IP等。 本期主题:围绕…...

实验一:PyTorch基本操作实验
import torch # PyTorch中初始化矩阵常见有以下几种方法 # 1. 直接使用固定值初始化 # M torch.tensor([[1.0, 2.0, 3.0]]) # 1x3矩阵 # 2. 随机初始化 # M torch.rand(1, 3) # 1x3矩阵,元素在0-1之间均匀分布 # M torch.randn(1, 3) # 1x3矩阵,元…...

可视化大屏通用模板Axure原型设计案例
本文将介绍一款基于Axure设计的可视化大屏通用模板,适用于城市、网络安全、园区、交通、社区、工业、医疗、能源等多个领域。 模板概述 这款Axure可视化大屏通用模板集成了多种数据展示模块和组件,旨在为用户提供一个灵活、可定制的数据展示平台。无论…...
通配符(Wildcard)与正则表达式(Regular Expression)的关系及区别
通配符(Wildcard)与正则表达式(Regular Expression)的关系及区别 1. 通配符(Wildcard) 定义:通配符是用于简单模式匹配的特殊符号,主要用于文件名匹配(如命令行操作&…...

历年山东大学计算机保研上机真题
历年山东大学计算机保研上机真题 2025山东大学计算机保研上机真题 2024山东大学计算机保研上机真题 2023山东大学计算机保研上机真题 在线测评链接:https://pgcode.cn/school 从1到100找质数 题目描述 从 1 1 1 到 100 100 100 中找出所有的质数。 输入格式 …...

Java处理动态的属性:字段不固定、需要动态扩展的 JSON 数据结构
文章目录 引言I `JSONObject` 接收和返回JSONObject 接收和返回数据存储II 签名测试接口dto的定义签名计算III JsonAnySetter 和JsonAnyGetter 注解@JsonAnySetter 的用法@JsonAnyGetter 的用法综合示例引言 应用场景: 签名测试接口、表单配置项、参数列表、插件信息等。技术实…...

MAC电脑怎么通过触摸屏打开右键
在Mac电脑上,通过触摸屏打开右键菜单的方法如下: 法1:双指轻点:在触控板上同时用两根手指轻点,即可触发右键菜单。这是Mac上常用的右键操作方法。 法2:自定义触控板角落:可以设置触控板的右下角或左下角作为右键区域…...

用 Whisper 打破沉默:AI 语音技术如何重塑无障碍沟通方式?
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...

【东枫科技】KrakenSDR 天线阵列设置
标准测向需要五根相同的全向天线。您可以折衷使用更少的天线,但为了获得最佳性能,我们建议使用全部五根天线。这些天线通常是磁铁安装的鞭状天线,或偶极子天线。我们建议始终使用均匀圆形阵列 (UCA) 天线,因为它可以确定来自各个方…...
Spring Boot中的事件与JMS消息集成
Spring Boot事件机制 Spring框架的事件处理是其核心特性之一,通过ApplicationEvent类和ApplicationListener接口实现。在Spring Boot应用中,事件机制是实现模块间消息传递的重要方式,通常用于业务逻辑内部通信。 内置事件类型 Spring应用上下文在启动时会触发多种内置事件…...