Loading [MathJax]/jax/output/CommonHTML/config.js
部署DeepSeek模型,进群交流最in玩法!
立即加群
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【重学MySQL】十三、基本的 select 语句

【重学MySQL】十三、基本的 select 语句

作者头像
用户11332765
发布于 2024-10-28 08:59:26
发布于 2024-10-28 08:59:26
28800
代码可运行
举报
文章被收录于专栏:编程编程
运行总次数:0
代码可运行
【重学MySQL】十三、基本的 select 语句

基本的SELECT语句是SQL(Structured Query Language,结构化查询语言)中最常用的语句之一,用于从数据库表中检索数据。一个基本的SELECT语句的结构非常直观,主要包括SELECT关键字、要检索的列名(或表达式)、FROM子句来指定数据来源的表名,以及可选的WHERE子句来指定检索数据的条件。

基本结构

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • SELECT:指定要从表中检索的列名。你可以指定一个或多个列名,或者使用星号(*)来检索表中的所有列。
  • FROM:指定要从中检索数据的表名。
  • WHERE(可选):指定用于过滤结果的条件。只有满足条件的行才会被检索出来。如果省略了WHERE子句,那么会检索表中的所有行。

示例

假设有一个名为Employees的表,其中包含员工的ID、姓名、年龄和部门ID等信息。

检索所有列

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM Employees;

这条语句会检索Employees表中的所有列和所有行。

检索特定列

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT EmployeeID, LastName, FirstName FROM Employees;

这条语句只会检索EmployeeIDLastNameFirstName这三列的数据。

带有条件的检索

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM Employees WHERE DepartmentID = 5;

这条语句会检索Employees表中所有DepartmentID为5的行。

dual

MySQL中,DUAL是一个虚拟表,它主要用于那些不需要从任何表中检索数据但需要返回一个结果集的场合。DUAL表允许你执行没有指定FROM子句的SELECT语句,这在一些情况下特别有用,比如当你只是想通过SELECT语句来执行一些计算或转换,而不是查询表中的数据时。

然而,值得注意的是,虽然DUALOracle数据库中是一个常见的概念,但在MySQL中,它并不是严格必需的,因为MySQL允许你执行没有FROM子句的SELECT语句。这意味着,在MySQL中,你可以直接写出一个只包含SELECT和可能的一些函数的查询,而不需要显式地引用DUAL表。

例如,在Oracle中,你可能会这样写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 5 * 10 FROM DUAL;

这条语句会返回50,因为Oracle要求所有的SELECT语句都必须指定一个FROM子句,即使你并不打算从任何表中检索数据。

但在MySQL中,你可以直接写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 5 * 10;

这条语句同样会返回50,而不需要引用DUAL表。

尽管MySQL不严格要求使用DUAL,但在一些从Oracle迁移到MySQL的数据库项目中,你可能会遇到在代码中显式引用DUAL的情况。在这种情况下,MySQL仍然能够处理这样的查询,因为MySQL会忽略这个DUAL的引用,并直接执行SELECT语句中的计算或函数。

总的来说,DUAL在MySQL中是一个可选的概念,主要用于与那些期望在所有数据库系统中都有DUAL表的概念的代码兼容。但在实际使用中,你通常可以省略它,直接在MySQL中执行你的SELECT语句。

列的别名

在MySQL中,列的别名(Alias)是一个给查询结果集中的列指定的临时名称。使用列的别名可以使结果集更加易于理解,特别是在进行复杂的查询、连接(JOINs)、分组(GROUP BY)和聚合(如SUM、AVG等)操作时。

基本的列别名使用

在SELECT语句中,你可以通过在列名后紧跟AS关键字和别名来指定列的别名。如果省略AS关键字,MySQL也会识别紧随列名之后的标识符为别名,假如中间有空格,可以用一对双引号引起来,不要使用单引号

示例1:使用AS关键字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT employee_name AS Name, salary AS Salary
FROM employees;

在这个例子中,employee_name列的别名被指定为Namesalary列的别名被指定为Salary

示例2:省略AS关键字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT employee_name Name, salary Salary
FROM employees;

这个查询与上一个示例产生相同的结果,只是省略了AS关键字。

别名在表达式中的使用

列的别名还可以在SELECT语句的表达式中使用,但需要注意的是,别名在定义它的SELECT列表中是不可见的,也就是说,你不能在同一个SELECT列表的另一个表达式中直接使用它。然而,你可以在HAVING子句、ORDER BY子句或外部查询中引用它(如果这是一个子查询或视图定义的一部分)。

示例:不能在同一个SELECT列表的表达式中直接使用别名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 错误的用法
SELECT salary AS Salary, Salary + 100 AS SalaryPlusBonus  -- 这里Salary是未知的,因为别名是在它之后定义的
FROM employees;

-- 正确的用法
SELECT salary, salary + 100 AS SalaryPlusBonus
FROM employees;

在ORDER BY子句中使用别名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT employee_name AS Name, salary AS Salary
FROM employees
ORDER BY Salary DESC;  -- 这里使用了别名Salary进行排序

别名在聚合函数中的应用

在使用聚合函数(如SUM、AVG、COUNT等)时,为结果列指定别名尤其有用,因为它可以清晰地表示该列包含的数据类型或含义。

示例:使用聚合函数并指定别名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT AVG(salary) AS AverageSalary
FROM employees;

这个查询计算了employees表中所有员工的平均薪水,并将结果列的别名指定为AverageSalary

distinct

在MySQL中,DISTINCT关键字用于在查询结果中返回唯一不同的值。当你从表中检索数据时,如果表中有重复的行,并且你只希望看到每个唯一值一次,那么就可以使用DISTINCT

DISTINCT通常与SELECT语句一起使用,放在需要返回唯一值的列名之前。你也可以对多个列使用DISTINCT,但这意味着MySQL会考虑这些列的组合作为唯一性的判断依据。

基本用法

单列使用DISTINCT

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT DISTINCT column_name
FROM table_name;

这个查询会返回column_name中所有唯一的值。

多列使用DISTINCT

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT DISTINCT column1, column2
FROM table_name;

这个查询会返回column1column2的组合中所有唯一的值对。只有当column1column2的组合是唯一的时,它们才会出现在结果集中。

注意事项

  • DISTINCT关键字作用于它之后的所有列,直到遇到下一个逗号或查询的结束。
  • 使用DISTINCT可能会影响查询的性能,因为它需要MySQL对结果集进行排序和去重。在大数据集上使用时尤其要注意这一点。
  • 如果查询中包含了聚合函数(如COUNT()MAX()MIN()SUM()等),并且你想要基于某些列的唯一值来计算聚合结果,那么可能需要结合GROUP BY子句来使用,而不是直接使用DISTINCT

示例

假设有一个名为employees的表,其中包含department_idemployee_name两列。

返回所有唯一的department_id

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT DISTINCT department_id
FROM employees;

返回所有唯一的department_idemployee_name组合

注意:这实际上会返回所有行,因为假设每个员工都位于不同的部门或每个部门都有不同的员工名称(这通常不是真实情况,但用于说明)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT DISTINCT department_id, employee_name
FROM employees;

如果每个部门都有多个员工,但你想要按部门计算员工数,你应该使用GROUP BY而不是DISTINCT

按部门计算员工数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT department_id, COUNT(employee_name) AS employee_count
FROM employees
GROUP BY department_id;

空值参与运算

在MySQL中,空值(NULL)参与运算时,结果通常会根据运算的类型和上下文而有所不同。空值在数据库中代表缺失或未知的数据,因此在进行数学运算、字符串连接或其他类型的计算时,需要特别注意它们的行为。

数学运算

当NULL参与数学运算(如加法、减法、乘法、除法等)时,结果通常是NULL。这是因为MySQL无法对未知的值进行数学计算。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT NULL + 10;  -- 结果为 NULL
SELECT 10 - NULL;  -- 结果为 NULL
SELECT NULL * 10;  -- 结果为 NULL
SELECT 10 / NULL;  -- 结果为 NULL,尽管在真实数学中除以0是未定义的,但这里是因为有NULL

字符串连接

当使用CONCAT()等字符串函数时,如果任何参数是NULL,则整个CONCAT()函数的结果也是NULL。不过,可以使用CONCAT_WS()(其中WS代表With Separator),它允许在参数之间插入分隔符,并且会忽略NULL值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT CONCAT('Hello', NULL, 'World');  -- 结果为 NULL
SELECT CONCAT_WS(' ', 'Hello', NULL, 'World');  -- 结果为 'Hello World'

比较运算

当NULL参与比较运算时,结果也通常是特殊的。例如,任何值与NULL的比较结果都不是TRUE或FALSE,而是NULL。这意味着你不能直接使用=<>等操作符来检查一个值是否为NULL。相反,应该使用IS NULLIS NOT NULL

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 1 = NULL;  -- 结果为 NULL
SELECT 1 IS NULL;  -- 结果为 FALSE
SELECT NULL IS NULL;  -- 结果为 TRUE

逻辑运算

在逻辑运算中(如AND、OR、NOT),NULL的行为可能会更加复杂,因为它既不是TRUE也不是FALSE。但是,通常你可以预期如果逻辑表达式中的任何部分为NULL,则整个表达式的结果可能也是NULL,或者至少不会按你期望的TRUE或FALSE来评估。

处理NULL的函数

MySQL提供了几个函数来帮助处理NULL值,如IFNULL()(或COALESCE()),它们允许你为NULL值指定一个替代值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT IFNULL(NULL, 0) + 10;  -- 结果为 10
SELECT COALESCE(NULL, 0, 'default') + 10;  -- 结果为 10,因为COALESCE返回第一个非NULL

总之,当在MySQL中编写查询并处理可能包含NULL值的列时,重要的是要了解NULL在不同运算和函数中的行为,并相应地调整你的查询逻辑。

着重号

在MySQL中,“着重号”(通常指的是反引号`)主要用于标识符(如数据库名、表名、列名等)的引用,特别是在这些标识符是MySQL的保留字或者包含特殊字符(如空格、连字符等)时。使用反引号可以确保这些标识符被正确地识别和处理。

为什么使用着重号(反引号)?

  1. 避免保留字冲突:如果你的表名或列名与MySQL的保留字相同,使用反引号可以避免语法错误。
  2. 支持特殊字符:如果你的标识符包含空格、连字符(-)、点(.)等特殊字符,或者以数字开头,使用反引号可以确保MySQL能够正确解析这些标识符。

示例

避免保留字冲突

假设你想创建一个名为order的表,但order是MySQL的保留字。为了避免冲突,你可以这样写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE `order` (
    id INT AUTO_INCREMENT PRIMARY KEY,
    product_name VARCHAR(255)
);
支持特殊字符

如果你想创建一个包含空格的表名,你可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE `my table` (
    id INT AUTO_INCREMENT PRIMARY KEY,
    data VARCHAR(255)
);

或者,如果你的列名包含连字符:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE example (
    `user-id` INT,
    `first-name` VARCHAR(50)
);

注意事项

  • 虽然在某些情况下使用反引号是有必要的,但过度使用可能会使SQL语句看起来杂乱无章,因此建议仅在必要时使用。
  • 在某些SQL方言(如PostgreSQL)中,使用双引号(")而不是反引号来引用标识符。
  • 当使用MySQL命令行工具时,你可能需要根据你的操作系统和MySQL的配置,使用特定的转义字符来在命令行中包含反引号。例如,在Windows命令行中,你可能需要使用`order`(注意外部的双引号用于命令行字符串的界定,内部的反引号用于SQL标识符的界定)。然而,在许多现代的IDE数据库管理工具中,这个问题通常会自动得到处理。

查询常数

注意

  • 在使用SELECT语句时,应尽量避免使用*来检索所有列,特别是当表中有大量列而你只需要其中几列时。这样做可以提高查询效率,减少数据传输量。
  • WHERE子句中使用的条件可以是任何有效的表达式,包括比较运算符(如=<><>等)、逻辑运算符(如ANDORNOT)等。
  • SQL是大小写不敏感的,但出于可读性和一致性考虑,推荐使用特定的命名约定(如关键字大写,表名和列名小写)。
  • 不同的数据库系统(如MySQL、SQL Server、Oracle等)可能在SQL方言上有所不同,但基本的SELECT语句在大多数系统中都是通用的。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
长文:数据库架构面面观
本文为近期参加dbaplus社群在线直播活动摘录。作为一个数据库领域资深从业者(好吧,我是个70后)。近些年来,主要从事数据库产品、架构等工作。下面将以我个人感受,谈谈数据库架构工作的多方面影响因素及成长、实践话题。希望能给大家带来些思考。
用户5548425
2020/08/13
3740
长文:数据库架构面面观
优云新一代智能化运维管理解决方案
摘要 优云软件解决方案中心总监童华权为我们带来优云作为国内在运维领域做得比较深刻的厂商,在运维管理方面的一些见解。 运维面临的挑战 数据中心进入“两化转变” 数据中心转向“两化转变”,技术架构层面随着
IT大咖说
2018/04/04
4.4K0
优云新一代智能化运维管理解决方案
数据库管理与运维难不难?腾讯云数据库给你答案
为帮助开发者更好地了解和学习前沿数据库技术,腾讯云数据库特推出"DB · TALK"系列技术分享会,聚焦干货赋能创新,邀请数十位鹅厂资深数据库专家每月和您一起深入探讨云数据库的内核技术、性能、架构、管理运维和最佳实践等。 3月30日第一期分享会“数据库管理与运维”专场已结束,本期带来各讲师分享精华及直播回顾视频。想要讲师ppt的小伙伴,可在腾讯云数据库公众号后台发送"3.30讲师课件",即可获得讲师课件哦! 迁移利器DBbridge 技术实现原理 ——程学飞,腾讯云数据库高级产品经理 DBbridge软件的
腾讯云数据库 TencentDB
2022/04/19
1.2K0
数据库管理与运维难不难?腾讯云数据库给你答案
两组有趣的数据库调研结果
谁来决定数据库技术选型?从这篇数据中我们可以发现,在企业进行数据库技术选型中,不同角色的权重不同。调研结果揭示架构师>开发者>DBA>管理者,这与我之前认为的管理者、DBA为选型的主导者大相径庭。当然这篇调研报告,应是来自国外,跟国内的情况还是有些差异;但从中也可观察到在技术选型的某种趋势。
用户5548425
2020/09/01
5510
关于国产数据库的46个问题
近些年来,国产数据库成为较热门的话题。有越来越多的公司考虑采用国产数据库产品。近期在与twt社区的互动中,发现有大量相关的讨论,关注度也较高。特将自己回答的部分问题摘录如下,也算是对若干热点问题的个人观点。
用户5548425
2022/08/31
1.3K0
【干货整理】云数据库时代,DBA将走向何方?
伴随云计算的迅猛发展,数据库也进入了云时代。云数据库不断涌现,产品越来越成熟和智能,作为数据库管理员的DBA将面临哪些机遇和挑战?又应该具备什么能力,才能应对未来的不确定性?
jeanron100
2022/12/14
6690
【干货整理】云数据库时代,DBA将走向何方?
我不会写代码,能做DBA吗?
本文转载自云加社区 导语 | 虽然数据库上云解决了传统数据库很多问题,但如何让云数据库发挥最优的效能,依然充满极大挑战。为解决这一难题,高速发展的云数据库正在走向“自治”。本文是对腾讯云数据库高级产品经理刘迪在云+社区沙龙online的分享整理,为大家带来腾讯云在数据库自治服务领域的探索和实践,希望与大家一同交流。 点击视频查看完整直播回放 一、数据库自治的演进 上图所示是一张关于数据库自治的宏观视图。 业内普遍定义的石器时代大概是在十几、二十年前,刚刚进入数据库发展的快速轨道,当时的技术方案和对于
腾讯云数据库 TencentDB
2020/08/13
1.1K0
报告解读下载 | 国产数据库专题-沐风栉雨,砥砺前行
编者注:本系列与读者共同分析数据库行业的最新动态。关注“数据和云 ( OraNews)”公众号回复:下载 。可以找到下载链接。 本次推荐文档来自 西南证券研究发展中心 数据库专题报告《沐风栉雨,砥砺前行》。 核心观点 数据库是信息化时代的基石产品 数据库具有处理、存储、管理数据的功能,在信息化时代扮演着至关重要的角色。随着数据量的不断增加和数据形式的不断多样化,非关系型数据库和开源 数据库也应运而生... 数据库厂商近年来也在积极推进云数据库产品,以期能够未来优先抢占云数据库这块 “蛋糕 ”。 2. 数据
数据和云
2022/03/28
7580
云数据库时代:企业数据架构的云化智能重构和变革(含大会PPT)
在2018年11月16日举行的『数据技术嘉年华』大会上,我对行业近期的观察和思考做了一个总结,在此和大家分享
数据和云
2018/12/18
1.2K0
云数据库时代:企业数据架构的云化智能重构和变革(含大会PPT)
2022爱分析· 中国分析型数据库市场研究报告 | 爱分析报告
数字化时代,数据使用场景呈现多元化趋势,数据规模也随之爆发式增长。海量异构数据的爆发式增长,对数据库的存储和计算能力提出了更高的要求。分析型数据库因其在处理海量实时数据时具有优秀的存算和管理能力,近年来赢得了市场的青睐。
爱分析ifenxi
2022/06/01
1.2K0
2022爱分析· 中国分析型数据库市场研究报告 | 爱分析报告
2023爱分析· 云管理服务(MSP)市场厂商评估报告:华创方舟
数字化时代,应用成为企业开展各项业务的落脚点。随着业务的快速发展,应用的功能迭代变得越来越频繁、业务系统变得越来越复杂、对IT资源的需求也变得越来越弹性。如何合理高效分配利用底层IT资源、管理上层应用、平衡二者关系,成为企业当下数字化建设中的重要关注点。
爱分析ifenxi
2023/02/20
9340
大道至简:数据库的终极未来
Oracle 23c 提出的理念是 App Simple,亚马逊在 re:invent 2022 大会提出的一个理念是 ZERO ETL,其实都是在简化。
数据和云
2023/01/04
5040
大道至简:数据库的终极未来
数据库异常智能分析与诊断
总第507篇 2022年 第024篇 DAS(Database Autonomy Service, 数据库自治服务)面向研发和DBA,是一款为用户提供数据库性能分析、故障诊断、安全管理等功能的数据库自治服务。DAS利用大数据手段、机器学习、专家经验,帮助用户消除数据库管理的复杂性及人工操作引发的服务故障,有效保障数据库服务的稳定和高效运行。本文主要讲述DAS的历史背景、演进策略、重要功能及实现思路,希望能对从事相关开发的同学有所帮助或者启发。 1 现状与问题 1.1 规模增长与运维能力发展之间的不平衡问题
美团技术团队
2022/05/06
2.1K0
数据库异常智能分析与诊断
华为“备胎计划”远不止芯片,数据库的征程已在路上
“实体管制名单”、“备胎计划”、“Google停止合作”、“90天临时许可”,接踵而来的新闻将华为顶到风口浪尖上。或许是因为任正非的军人出身,让华为的基因中带有极强的忧患意识,从十多年前就开始不断要求“按照极端情况进行备战、建立备胎计划”,并对今天的情况做好了准备。
科技云报道
2022/04/15
6270
华为“备胎计划”远不止芯片,数据库的征程已在路上
跨过数据库大山(发布会归来有感)
今日有幸受邀参加腾讯云数据库发布会,在其圆桌论坛环节,与几位行业大咖就数据库当下的热点话题,进行了分享。下面将我的一些分享要点,汇集如下。
用户5548425
2019/08/30
5730
跨过数据库大山(发布会归来有感)
腾讯云2024双11大促:数据库智能管家 DBbrain最佳实践
腾讯云2024双11大促已正式开始,在这场活动中,腾讯云为用户带来了超值福利,其中云服务器CVM成为企业和个人用户部署应用、存储数据、处理信息的首选方案,其高效、灵活、可扩展的特性极大地促进了业务的快速发展。。
参谋带个长
2024/11/15
9150
腾讯云2024双11大促:数据库智能管家 DBbrain最佳实践
数据库纳管平台DBhouse的技术路线与实践
为帮助开发者更好地了解和学习前沿数据库技术,腾讯云数据库特推出"DB · TALK"系列技术分享会,聚焦干货赋能创新,邀请数十位鹅厂资深数据库专家每月和您一起深入探讨云数据库的内核技术、性能、架构、管理运维和最佳实践等。 3月30日第一期分享会“数据库管理与运维”专场已结束,错过直播的小伙伴也不要拍大腿,本期带来腾讯云数据库产品经理陈昊分享《数据库统一纳管平台DBhouse技术路线的最佳实践》的文字回顾。 大家好,我是陈昊,我的分享包括四个部分:产品建设背景,为什么要做DBhouse;产品架构,包括技术架
腾讯云数据库 TencentDB
2022/04/01
9820
数据库纳管平台DBhouse的技术路线与实践
国产的数据库新增一员,华为携GaussDB入局
墨墨导读:日前,华为公司在京面向全球发布了人工智能原生(AI-Native)数据库GaussDB和业界性能的分布式存储FusionStorage 8.0,将多年的AI技术和能力以及数据库经验融入到新品,实现很多创新性突破,比如人工智能技术融入分布式数据库的全生命周期、一套存储可同时支持块、文件、对象、HDFS协议等。
数据和云
2019/06/20
1.6K0
国产的数据库新增一员,华为携GaussDB入局
大模型时代下,智能运维和数据库的再进化
AI时代下,数据库、大模型及算法、云计算这三大核心技术领域都各自呈现出多样化的发展趋势,这些趋势相互交织、相互影响,共同推动着整个AI生态系统的发展和进步。
腾讯大讲堂
2024/05/14
6060
大模型时代下,智能运维和数据库的再进化
行业数字化转型呼唤IT运维管理智能化、敏捷化
本文引用艾瑞咨询《2020年中国IT基础架构运维市场研究报告》中的内容。目的是引导读者关注IT运维管理领域的市场环境,行业客户的需求情况,以及竞争格局。特别是金融行业数字化对IT运维管理的需求。
华汇数据
2022/12/02
1.1K0
行业数字化转型呼唤IT运维管理智能化、敏捷化
推荐阅读
相关推荐
长文:数据库架构面面观
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验