MySQL 数据库进阶之SQL 数据操作与子查询操作大全

2025-11-24 18:50

本文主要是介绍MySQL 数据库进阶之SQL 数据操作与子查询操作大全,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《MySQL数据库进阶之SQL数据操作与子查询操作大全》本文详细介绍了SQL中的子查询、数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE、TRUNCATE、DROP)操作...

一、子查询:嵌套在查询中的查询

子查询(Subquery)是指**嵌套在其他 SQL 语句中的查询语句**,通常用于复杂的条件筛选或多表关联场景。子查询的结果可以作为主查询的条件、数据源或计算字段。

1.1 子查询的基本语法

SELECT 字段列表
FROM (子查询语句) AS 别名
WHERE 条件;

1.2 子查询的实战示例

示例 1:简单子查询作为数据源

-- 从学生表中查询姓名、性别、年龄,再筛选出姓名为'张三'的记录

SELECT t1.name
FROM (SELECT name, sex, age FROM student) AS t1
WHERE t1.name = '张三';

示例 2:多表关联的子查询

假设存在三张表:

- `student`(学生表):`sno`(学号)、`name`(姓名)等

- `relationship`(学生-课程关系表):`sno`(学号)、`cno`(课程号)

- `course`(课程表):`cno`(课程号)、`gjavascriptradeName`(课程名)

需求:查询所有选择了“语文”课程的学生信息

SELECT t1.*, course.gradeName
FROM (
#子查询:关联学生表和关php系表,获取学生信息及所选课程号
SELECT student.*, relationship.cnoChina编程
FROM student
LEFT JOIN relationship
ON student.sno = relationship.sno
) AS t1
#主查询:关联子查询结果和课程表,筛选出语文课
LEFT JOIN course
ON t1.cno = course.cno
WHERE course.gradeName = '语文';

**说明**:子查询的结果被视为一张临时表(需指定别名,如 `t1`),主查询可像操作普通表一样使用这张临时表。

二、数据添加:INSERT 语句

INSERT 语句用于向表中添加新数据,支持单行添加和多行添加两种方式。

2.1 单行添加

语法

INSERT INTO 表名(列1, 列2, 列3, ...)
VALUES('值1', '值2', '值3', ...);

示例

-- 向student表添加一条学生记录

INSERT INTO student(name, sex, age, sno, class_num)
VALUES ('张三', '男', 18, '10001', '20201004');

2.2 多行添加

语法

INSERT INTO 表名(列1, 列2, 列3, ...)
VALUES
('值1', '值2', '值3', ...),
('值1', '值2', '值3', ...),
('值1', '值2', '值3', ...); #多个值列表用逗号分隔

示例

#向student表添加多条学生记录
INSERT INTO student(name, sex, age, sno, class_num)
VALUES
('张三', '男', 18, '10001', '20201004'),
('李四', '女', 19, '10002', '20201004'),
('王五', '男', 18, '10003', '20201005');

**注意**:

- 列名顺序需与值列表顺序一致;

- 若省略列名,则值列表需包含表中所有字段(按表结构顺序);

- 字符串类型的值需用单引号 `'` 包裹;

- 自增主键(如 `id`)通常无需手动指定值,数据库会自动生成。

三、数据修改:UPDATE 语句

UPDATE 语句用于修改表中已存在的数据,需通过 `WHERE` 子句指定修改范围(否则会修改表中所有记录)。

3.1 语法

UPpythonDATE 表名
SET 列名1 = 新值1, 列名2 = 新值2, ...
WHERE 条件; #不写WHERE会修改所有记录,谨慎操作!

3.2 示例

# 将id=2的学生姓名改为'双手合十',年龄改为22,性别改为'女'
UPDATE student
SET name = '双手合十', age = 22, sex = '女'
WHERE id = 2;
#将20201004班所有学生的年龄增加1岁
UPDATE student
SET age = age + 1
WHERE class_num = '20201004';

**警告**:`UPDATE` 语句如果不带 `WHERE` 条件,会修改表中**所有记录**,执行前务必确认条件是否正确!

四、数据删除:DELETE、TRUNCATE 与 DROP

4.1 DELETE 语句:删除部分或全部记录

语法

DELETE FROM 表名
WHERE 条件; #不写WHERE会删除表中所有记录

示例

# 删除id=1的学生记录
DELETE FROM student
WHERE id = 1;
#删除20201005班的所有学生记录
DELETE FROM student
WHERE class_num = '20201005';

4.2 TRUNCATE 语句:清空表中所有记录

语法

```sql

TRUNCATE TABLE 表名;

```

示例

```sql

# 清空class表中所有记录(保留表结构)

TRUNCATE TABLE class;

```

4.3 DROP 语句:彻底删除表

语法

```sql

DROP TABLE 表名;

```

示例

```sql

-- 彻底删除relationship表(包括表结构和所有数据)

DROP TABLE relationship;

```

4.4 DELETE、TRUNCATE 与 DROP 的区别

操作功能描述是否保留表结构效率是否可回滚(事务中)
DELETE逐行删除记录,可带条件较低(逐行删除)
TRUNCATE清空所有记录,相当于重建表结构较高(直接重建)
DROP彻底删除表,包括结构和数据最高

**使用建议**:

- 需删除部分记录:用 `DELETE` + `WHERE`;

- 需清空全表(保留结构):用 `TRUNCATE`(效率更高);

- 需彻底删除表:用 `DROP`(谨慎操作,不可恢复)。

五、SQL 操作的注意事项

1. **子查询优化**:

- 子查询结果集不宜过大,否则会影响性能;

- 复杂子查询可考虑用 `JOIN` 改写,提升效率。

2. **数据添加**:

- 确保字段类型与值匹配(如数字类型不加引号);

- 遵守表的约束(如非空字段必须赋值,唯一字段值不重复)。

3. **数据修改与删除**:

- 执行前先用 `SELECT` 语句验证条件是否正确(如 `SELECT * FROM student WHERE id=2`);

- 生产环境中,删除/修改操作建议在事务中执行,便于回滚。

4. **mysql 语法特性**:

- 语句末尾加分号 `;` 表示结束;

- 关键字不区分大小写,但建议大写关键字(如 `SELECT`、`INSERT`),小写表名和字段名,增强可读性。

六、总结:SQL 核心操作要点

1. **子查询**:嵌套在主查询中的查询,可作为数据源或条件,常用于复杂查询场景;

2. **数据添加**:`INSERT INTO ... VALUES` 支持单行和多行添加,需注意字段与值的匹配;OZsGfKU

3. **数据修改**:`UPDATE ... SET ... WHERE` 用于修改记录,`WHERE` 条件必不可少;

4. **数据删除**:

- `DELETE` 逐行删除,可带条件,支持回滚;

- `TRUNCATE` 清空全表,保留结构,效率高;

- `DROP` 彻底删除表,包括结构,谨慎使用。

掌握这些操作后,你已能完成 MySQL 数据库的基本CRUD(创建、读取、更新、删除)操作,为后续学习事务、索引、存储过程等进阶知识奠定基础。实际开发中,需结合业务场景选择合适的操作方式,同时注意数据安全和操作效率。

到此这篇关于MySQL 数据库进阶之SQL 数据操作与子查询操作大全的文章就介绍到这了,更多相关sql数据操作与子查询内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于MySQL 数据库进阶之SQL 数据操作与子查询操作大全的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1156265

相关文章

MySQL字符串转数值的方法全解析

《MySQL字符串转数值的方法全解析》在MySQL开发中,字符串与数值的转换是高频操作,本文从隐式转换原理、显式转换方法、典型场景案例、风险防控四个维度系统梳理,助您精准掌握这一核心技能,需要的朋友可... 目录一、隐式转换:自动但需警惕的&ld编程quo;双刃剑”二、显式转换:三大核心方法详解三、典型场景

MySQL中between and的基本用法、范围查询示例详解

《MySQL中betweenand的基本用法、范围查询示例详解》BETWEENAND操作符在MySQL中用于选择在两个值之间的数据,包括边界值,它支持数值和日期类型,示例展示了如何使用BETWEEN... 目录一、between and语法二、使用示例2.1、betwphpeen and数值查询2.2、be

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

SQL Server中行转列方法详细讲解

《SQLServer中行转列方法详细讲解》SQL行转列、列转行可以帮助我们更方便地处理数据,生成需要的报表和结果集,:本文主要介绍SQLServer中行转列方法的相关资料,需要的朋友可以参考下... 目录前言一、为什么需要行转列二、行转列的基本概念三、使用PIVOT运算符进行行转列1.创建示例数据表并插入数

MyBatis-Plus使用动态表名分表查询的实现

《MyBatis-Plus使用动态表名分表查询的实现》本文主要介绍了MyBatis-Plus使用动态表名分表查询,主要是动态修改表名的几种常见场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录1. 引入依赖2. myBATis-plus配置3. TenantContext 类:租户上下文

MySQL MHA集群详解(数据库高可用)

《MySQLMHA集群详解(数据库高可用)》MHA(MasterHighAvailability)是开源MySQL高可用管理工具,用于自动故障检测与转移,支持异步或半同步复制的MySQL主从架构,本... 目录mysql 高可用方案:MHA 详解与实战1. MHA 简介2. MHA 的组件组成(1)MHA

SQL 注入攻击(SQL Injection)原理、利用方式与防御策略深度解析

《SQL注入攻击(SQLInjection)原理、利用方式与防御策略深度解析》本文将从SQL注入的基本原理、攻击方式、常见利用手法,到企业级防御方案进行全面讲解,以帮助开发者和安全人员更系统地理解... 目录一、前言二、SQL 注入攻击的基本概念三、SQL 注入常见类型分析1. 基于错误回显的注入(Erro