SQL查询:子查询与多表操作

需积分: 26 2 下载量 172 浏览量 更新于2024-07-12 收藏 802KB PPT 举报
"返回一组值的子查询-结构化查询语言" 在SQL(Structured Query Language)中,子查询是一种强大的工具,它可以在一个查询中嵌套另一个查询,用于检索满足特定条件的数据。当我们需要从一组值中筛选出满足条件的部分时,返回一组值的子查询就显得尤为重要。 在给定的示例中,我们有一个查询: ```sql SELECT * FROM S WHERE S# IN ( SELECT S# FROM SC WHERE C#=‘C6’ AND GR>90 ); ``` 这个查询的目的是找出所有选修课程'C6'且成绩超过90分的学生。这里的子查询部分 `( SELECT S# FROM SC WHERE C#='C6' AND GR>90 )` 是关键,它首先在SC表中查找那些课程编号为'C6'并且成绩大于90的学生学号(S#)。然后,外部查询从S表中选择所有学号(S#)存在于子查询结果中的学生,即那些选修了'C6'并取得高分的学生。 在SQL的结构中,子查询可以出现在多个位置,如SELECT、FROM、WHERE子句中,甚至可以作为另一个查询的源。它们可以返回单个值、多行单列的结果集,或者是一组多列的值。子查询可以用于比较、连接、合并数据,以及在复杂的条件表达式中提供中间结果。 例如,如果我们要找到所有选修了所有课程且平均成绩超过90分的学生,我们可以使用子查询来实现: ```sql SELECT S.* FROM S WHERE S.S# IN ( SELECT S#.S# FROM SC GROUP BY S#.S# HAVING AVG(SC.GR) > 90 ) AND S.S# IN ( SELECT DISTINCT S#.S# FROM SC GROUP BY S#.S#, C# ); ``` 这里,第一个子查询找到平均成绩高于90的学生,第二个子查询确保学生选修了所有课程(假设所有课程都被包含在SC表中)。这两个子查询的结果被用于外部查询的WHERE子句,从而筛选出符合条件的学生。 SQL语言的功能非常广泛,包括查询(SELECT)、更新(UPDATE)、插入(INSERT)、删除(DELETE)数据,定义数据(DDL,Data Definition Language)如创建表、视图等,控制数据(DCL,Data Control Language)如权限管理,以及视图和嵌入式SQL的应用。在数据库的三层模式结构中,SQL提供了对这些不同层次的操作和管理手段,使得用户可以方便地与数据库进行交互。 总结来说,返回一组值的子查询是SQL中的重要功能,它允许我们通过嵌套查询来处理复杂的数据筛选和聚合操作,极大地提升了SQL的灵活性和实用性。无论是简单的条件过滤,还是复杂的逻辑判断,子查询都能在SQL语句中发挥至关重要的作用。