掌握MySQL子查询:DQL入门与复杂查询详解

需积分: 16 3 下载量 26 浏览量 更新于2024-08-15 收藏 1.66MB PPT 举报
在MySQL数据库管理系统中,子查询是一种重要的数据查询语言(DQL)概念,它允许你在主查询中嵌套另一个查询语句。子查询通常用于WHERE子句中,用来筛选满足特定条件的结果集。理解并掌握子查询对于进行复杂的数据库操作至关重要。 子查询可以是单个或多个,它们的执行顺序通常是自内向外。例如,如果你想查询所有评分不小于80分且选修了《高等数学-2》课程的学生,可以使用以下子查询: ```sql SELECT 学号, 姓名 FROM 学生 WHERE 分数 >= 80 AND 课程名 = '高等数学-2'; ``` 在这个例子中,外部查询(主查询)基于子查询的结果来筛选学生。子查询(`(分数 >= 80 AND 课程名 = '高等数学-2')`)返回满足条件的学生列表,这个结果集再与主查询中的`学生`表进行匹配。 在DQL中,SELECT语句是核心部分,用于从数据库中检索数据。它支持全选(ALL)或去重(DISTINCT),可以指定查询哪些列,例如`SELECT 学号, 姓名`。通过FROM关键字指定要查询的表,可以进行单表查询或多表连接(LEFT JOIN, INNER JOIN, OUTER JOIN)。WHERE子句用于设置查询条件,GROUP BY用于分组数据,HAVING则用于过滤分组后的结果,ORDER BY用于排序查询结果,而LIMIT用于限制返回的记录数量。 例如,一个完整的查询可能如下所示: ```sql SELECT s1.学号, s1.姓名 FROM 学生 s1 INNER JOIN 课程 c ON s1.课程ID = c.课程ID WHERE s1.分数 >= 80 AND c.课程名 = '高等数学-2' GROUP BY s1.学号 HAVING COUNT(*) = (SELECT COUNT(*) FROM 学生 WHERE 课程名 = '高等数学-2') ORDER BY s1.分数 DESC LIMIT 10; ``` 这个查询不仅查找符合条件的学生,还计算了每个学生在课程《高等数学-2》中的分数,仅返回前10个最高分的学生。 学习和掌握MySQL的DQL,包括子查询的使用,对于编写高效、准确的SQL查询至关重要,可以帮助你更好地管理和分析数据库中的数据。通过实践和理解这些基本概念,你可以处理更复杂的业务场景和数据分析需求。