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


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

    1. 事务处理(Transaction)

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

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

    2. 子查询(Subquery)

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

    1. -- 查询年龄最大的学生的姓名和年龄
    2. SELECT name, age FROM students WHERE age = (SELECT MAX(age) FROM students);
    3. -- 查询年龄大于平均年龄的学生
    4. SELECT * FROM students WHERE age > (SELECT AVG(age) FROM students);
    5. -- 向表students中插入一条记录,course_id的值来自于courses表
    6. 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。

    1. -- 内连接,查询学生及其对应的课程信息
    2. SELECT students.name, courses.course_name FROM students
    3. INNER JOIN courses ON students.course_id = courses.id;
    4. -- 左连接,查询所有学生及其对应的课程信息,包括没有课程的学生
    5. SELECT students.name, courses.course_name FROM students
    6. LEFT JOIN courses ON students.course_id = courses.id;
    7. -- 右连接,查询所有课程及其对应的学生信息,包括没有学生的课程
    8. SELECT students.name, courses.course_name FROM students
    9. RIGHT JOIN courses ON students.course_id = courses.id;
    10. -- 全连接,查询所有学生和课程的信息,包括没有学生或课程的记录
    11. SELECT students.name, courses.course_name FROM students
    12. FULL JOIN courses ON students.course_id = courses.id;

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

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

    1. -- 计算每个性别的学生人数
    2. SELECT gender, COUNT(*) AS total_students FROM students GROUP BY gender;
    3. -- 计算每个课程的学生平均年龄
    4. SELECT courses.course_name, AVG(students.age) AS average_age FROM students
    5. INNER JOIN courses ON students.course_id = courses.id
    6. GROUP BY courses.course_name;
    7. -- 计算所有学生的年龄总和
    8. SELECT SUM(age) AS total_age FROM students;
    9. -- 计算每个性别学生的年龄总和
    10. SELECT gender, SUM(age) AS total_age FROM students GROUP BY gender;
    11. -- 找出最老的学生的年龄
    12. SELECT MAX(age) AS oldest_student_age FROM students;
    13. -- 找出每个性别中最老学生的年龄
    14. SELECT gender, MAX(age) AS oldest_student_age FROM students GROUP BY gender;
    15. -- 找出最年轻学生的年龄
    16. SELECT MIN(age) AS youngest_student_age FROM students;
    17. -- 找出每个性别中最年轻学生的年龄
    18. SELECT gender, MIN(age) AS youngest_student_age FROM students GROUP BY gender;

    5. 分页查询(Limit)

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

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

    6. 总结

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

    SQL往期教学:

    SQL教学:轻松掌握DDL语句

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

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

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

  • 相关阅读:
    SherlockChain:基于高级AI实现的智能合约安全分析框架
    利用cpolar为群晖NAS建立稳定外网地址(1)
    【个人博客搭建】hexo搭建个人博客
    容器类型及操作
    Greenplum广播与重分布原理
    罗技g402鼠标宏设置教程
    分布式ID生成方案总结整理
    小程序中如何访问mysql数据库
    No.1-------MySQL:数据库系统概述、MySQL简介、库操作
    Spring Boot 2.x系列【19】功能篇之自定义Starter 启动器
  • 原文地址:https://blog.csdn.net/li17614345437/article/details/136376911