SQL教学: MySQL进阶操作详解--探索DML语句的高级用法

欢迎回到我们的SQL-DML语句教学系列。在之前的文章中,我们已经学习了如何使用DDL语句来定义和修改数据库的结构,以及如何使用DML语句进行基本的“增删改查”操作。今天,我们将进一步提升技能,探讨DML语句的高级用法,包括事务处理子查询连接查询等。这些高级操作将使你能够更有效地处理复杂的数据操作任务。下面,我将通过详细的文字讲解、实用的代码示例和清晰的注释,帮助你轻松掌握这些高级技能。

1. 事务处理(Transaction)

事务是一种确保数据库操作全部完成或全部失败的处理方式。在MySQL中,可以使用以下语句来控制事务:

-- 开始一个新事务
START TRANSACTION;-- 执行一系列的SQL操作
INSERT INTO students (name, age, gender) VALUES ('赵六', 21, '男');
UPDATE students SET age=22 WHERE name='王五';
DELETE FROM students WHERE name='张三';-- 提交事务,使所有操作生效
COMMIT;-- 如果发生错误,可以回滚事务,撤销所有操作
ROLLBACK;

2. 子查询(Subquery)

子查询是嵌套在另一个查询中的查询。它可以用于SELECT、INSERT、UPDATE和DELETE语句中,以及设置条件的WHERE子句或HAVING子句中。

-- 查询年龄最大的学生的姓名和年龄
SELECT name, age FROM students WHERE age = (SELECT MAX(age) FROM students);-- 查询年龄大于平均年龄的学生
SELECT * FROM students WHERE age > (SELECT AVG(age) FROM students);-- 向表students中插入一条记录,course_id的值来自于courses表
INSERT INTO students (name, age, gender, course_id) VALUES ('孙八', 23, '男', (SELECT id FROM courses WHERE course_name='计算机科学'));

3. 连接查询(Join)

连接查询用于从两个或多个表中检索数据。根据表之间的关系,可以使用不同类型的连接,如INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN。

-- 内连接,查询学生及其对应的课程信息
SELECT students.name, courses.course_name FROM students
INNER JOIN courses ON students.course_id = courses.id;-- 左连接,查询所有学生及其对应的课程信息,包括没有课程的学生
SELECT students.name, courses.course_name FROM students
LEFT JOIN courses ON students.course_id = courses.id;-- 右连接,查询所有课程及其对应的学生信息,包括没有学生的课程
SELECT students.name, courses.course_name FROM students
RIGHT JOIN courses ON students.course_id = courses.id;-- 全连接,查询所有学生和课程的信息,包括没有学生或课程的记录
SELECT students.name, courses.course_name FROM students
FULL JOIN courses ON students.course_id = courses.id;

4. 聚合函数和分组(Group By)

聚合函数如COUNT、SUM、AVG、MAX和MIN用于对一组数据进行计算。配合GROUP BY子句,可以按特定字段对结果进行分组。

-- 计算每个性别的学生人数
SELECT gender, COUNT(*) AS total_students FROM students GROUP BY gender;-- 计算每个课程的学生平均年龄
SELECT courses.course_name, AVG(students.age) AS average_age FROM students
INNER JOIN courses ON students.course_id = courses.id
GROUP BY courses.course_name;-- 计算所有学生的年龄总和
SELECT SUM(age) AS total_age FROM students;-- 计算每个性别学生的年龄总和
SELECT gender, SUM(age) AS total_age FROM students GROUP BY gender;-- 找出最老的学生的年龄
SELECT MAX(age) AS oldest_student_age FROM students;-- 找出每个性别中最老学生的年龄
SELECT gender, MAX(age) AS oldest_student_age FROM students GROUP BY gender;-- 找出最年轻学生的年龄
SELECT MIN(age) AS youngest_student_age FROM students;-- 找出每个性别中最年轻学生的年龄
SELECT gender, MIN(age) AS youngest_student_age FROM students GROUP BY gender;

5. 分页查询(Limit)

当数据量很大时,可能需要对查询结果进行分页。LIMIT子句可以限制查询结果的数量,或者指定从哪条记录开始查询。

-- 查询前5名学生
SELECT * FROM students LIMIT 5;-- 查询第6到第10名学生
SELECT * FROM students LIMIT 5 OFFSET 5;
SELECT * FROM students LIMIT 5,5;

6. 总结

本文详细介绍了MySQL中DML语句的高级用法,包括事务处理、子查询、连接查询、聚合函数和分组、以及分页查询。这些高级操作是数据库管理的进阶技能,掌握它们对于每个MySQL用户来说都是至关重要的。希望这篇文章能够帮助你更好地理解这些高级操作,并在实践中不断提高自己的技能水平。

SQL往期教学:

SQL教学:轻松掌握DDL语句

SQL教学:掌握MySQL数据操作核心技能--DML语句基本操作之“增删改查“

SQL教学: MySQL进阶操作详解--探索DML语句的高级用法

SQL教学: MySQL高级数据操作--深入理解DML语句的技巧与策略

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/721210.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp制作--进步器的选择

介绍: 进步器的选择,一般用于商城购物选择物品数量的场景 注意:该输入框只能输入大于或等于0的整数 效果展示: 代码展示: 以下是一个简单的购物车页面示例,包括选择商品和显示数量的功能: 在这个示例中…

探索人工智能的关键术语与方法

目录 前言1 机器学习(Machine Learning)2 数据科学(Data Science)3 监督学习(Supervised Learning)4 无监督学习(Unsupervised Learning)5 深度学习(Deep Learning&#…

紫光展锐T618_4G安卓核心板方案定制

紫光展锐T618核心板是一款采用纯国产化方案的高性能产品,搭载了开放的智能Android操作系统,并集成了4G网络,支持2.5G5G双频WIFI、蓝牙近距离无线传输技术以及GNSS无线定位技术。 展锐T618核心板应用旗舰级 DynamlQ架构 12nm 制程工艺&#x…

私有化部署自己的ChatGPT,免费开源的chatgpt-next-web搭建

随着AI的应用变广,各类AI程序已逐渐普及,尤其是在一些日常办公、学习等与撰写/翻译文稿密切相关的场景,大家都希望找到一个适合自己的稳定可靠的ChatGPT软件来使用。 ChatGPT-Next-Web就是一个很好的选择。它是一个Github上超人气的免费开源…

简单介绍一下Qt动画系统,并举例说明如何使用

目录 Qt动画系统介绍 分类举例说明 1. 属性动画(Property Animation): 2. 并行动画(Parallel Animation): 3. 顺序动画(Sequential Animation): 4. 动画组&#xf…

闯入监测报警摄像机

闯入监测报警摄像机是用于监测和报警未经授权者闯入特定区域的安全设备。该摄像机通常设置在建筑物、仓库、办公室等需要保护的场所,用于监控周围环境并及时警示相关人员。闯入监测报警摄像机是一种集视频监控和报警功能于一体的安全设备,旨在防范和监测…

2024/3/5打卡线性DP问题---数字三角形*

线性DP: 所谓线性DP,是指递推方程有一种明显的线性关系存在。 在状态规划中,状态可以是一维的,二维的,多维的。例如,在背包问题中,就是一个二维的状态,在求解状态的时候,…

【Deep Dive:AI Webinar】我们是否能将开源许可用于机器学习和人工智能模型?

【深入探讨人工智能】网络研讨系列总共有 17 个视频。我们按照视频内容,大致上分成了 3 个大类: 1. 人工智能的开放、风险与挑战(4 篇) 2. 人工智能的治理(总共 12 篇),其中分成了几个子类&…

用winsw将nodejs项目的exe程序安装为服务

winsw是一个开源项目&#xff0c;程序以及源码可以在Git Hub中下载&#xff1a; Releases winsw/winsw GitHub winsw是一个可以将任何应用程序注册成服务的软件 下载winse.exe winsw.xml配置如下&#xff1a; <service> <id>node-service/id> &…

IDEA创建Sping项目只能勾选17和21,却无法使用Java8

报错信息 The required java version 17 is not supported by the project SDK 1.8.The maximum supported Java version is 8. 想创建一个springboot项目&#xff0c;本地安装jdk版本为1.8&#xff0c;但是在使用 Spring Initializr创建项目时,版本只能选择21或17&#xff0c;…

MySQL面试题纯享版

基础内容 1、MySQL的架构分层 2、一条 SQL 查询语句的执行流程 3、如何查看 MySQL 服务被多少个客户端连接了&#xff1f; 4、 空闲连接会一直占用着吗&#xff1f; 5、MySQL 的连接数有限制吗&#xff1f; 6、 怎么解决长连接占用内存的问题&#xff1f; 7、执行器与存储引擎…

前端高频面试--查缺补漏篇

什么是进程和线程&#xff0c;有什么区别 进程&#xff1a;进程是程序的一次执行过程&#xff0c;是动态的过程&#xff0c;有自身产生、存在、消亡的过程。 线程&#xff1a;线程由进程创建&#xff0c;是进程的一个实体。一个进程可以拥有多个线程。 举个例子&#xff1a;…

rust学习(tokio future分析)

自己编写一个impl future来看一下Tokio的是如何实现的。 第一步&#xff1a; 代码&#xff1a; struct TExecuteTask {count:u32 }impl Future for TExecuteTask {type Output ();fn poll(self: Pin<&mut Self>, cx: &mut Context<_>) -> Poll<S…

「优选算法刷题」:字符串相乘

一、题目 给定两个以字符串形式表示的非负整数 num1 和 num2&#xff0c;返回 num1 和 num2 的乘积&#xff0c;它们的乘积也表示为字符串形式。 注意&#xff1a;不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 "2", num2 &quo…

AI大预言模型——ChatGPT与AI绘图及论文高效写作

原文链接&#xff1a;AI大预言模型——ChatGPT与AI绘图及论文高效写作 2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网…

03:大数据与Hadoop|分布式文件系统|分布式Hadoop集群

大数据与Hadoop&#xff5c;分布式文件系统&#xff5c;分布式Hadoop集群 Hadoop部署Hadoop HDFS分布式文件系统HDFS部署步骤一&#xff1a;环境准备HDFS配置文件 查官方手册配置Hadoop集群 日志与排错 mapreduce 分布式离线计算框架YARN集群资源管理系统步骤一&#xff1a;安装…

Java已死?大学生还有必要学习Java吗【底部明信片,添加可进大学生求职社群】

目录 1. Java的历史与底蕴 2. 企业级应用的稳定性 3. Android应用开发 4. 大数据和云计算 5. 补充现代技术栈 6. Java生态系统的完备性 在技术的迅速演进中&#xff0c;有人开始质疑传统编程语言的地位&#xff0c;其中Java也未能幸免。然而&#xff0c;尽管一些人宣称“…

安卓开发:计时器

一、新建模块 二、填写应用名称和模块名称 三、选择模块&#xff0c;Next 四、可以保持不变&#xff0c;Finish 五、相关目录文件 六、相关知识 七、&#xff1f;

基本设计模式

单例模式 ES5 function Duck1(name:string){this.namenamethis.instancenull }Duck1.prototype.getNamefunction(){console.log(this.name) }Duck1.getInstancefunction(name:string){if(!this.instance){this.instance new Duck1(name)} } const aDuck1.getInstance(a) const…

PyTorch深度学习实战(38)——StyleGAN详解与实现

PyTorch深度学习实战&#xff08;38&#xff09;——StyleGAN详解与实现 0. 前言1. StyleGAN1.1 模型介绍1.2 模型策略分析 2. 实现 StyleGAN2.1 生成图像2.2 风格迁移 小结系列链接 0. 前言 StyleGAN (Style-Generative Adversarial Networks) 是生成对抗网络 (Generative Ad…