• 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语句的技巧与策略

  • 相关阅读:
    USB摄像头转HDMI(USB Camera to HDMI)设备
    使用Java接入小程序订阅消息!
    华为云云耀云服务器L实例评测|华为云耀云服务器L实例启动宠物预约项目(九)
    .Linux基础正则表达式字符
    gRPC之拦截器与元数据
    网络协议04 - 物理层和数据链路层
    1_MyBatis入门
    2023年9月 青少年软件编程等级考试Scratch四级真题,含答案解析
    专肽生物:蛋白激酶C底物 Protein Kinase C Substrate
    设计模式-单例
  • 原文地址:https://blog.csdn.net/li17614345437/article/details/136376911