一文讲懂SQL子查询

大家好,我叫宁毅。
今天我将讲解SQL教程第1 8 课:子查询。
SQL语句可以嵌套,最常见的是嵌套查询语句。
基本语法:我们通常在主查询之外调用嵌套语句,在查询子查询内部调用嵌套语句。
有时也称为外部查询和内部查询。
每个人都知道他们的意思。
子查询必须用括号括起来。
子查询不仅可以放在WHERE之后,还可以放在SELECT和FROM之后。
我们将一一解释。
1 、子查询+WHERE子句 执行SQL时,会先执行括号内的子查询。
子查询最常与 WHERE 子句结合使用。
子查询的结果在WHERE子句中作为过滤条件,完成更复杂的数据检索。
示例:在学生表中,查找“宁毅”之后出生的所有学生。
分析示例:需要先确定“宁毅”的生日,然后以生日作为WHERE过滤器的条件,得到最终的数据。
步骤一:找到“宁毅”的生日 步骤二:用生日作为WHERE过滤器的条件,得到最终的数据。
子查询语句必须用括号括起来。
SELECT 语句的子查询通常与聚合函数结合使用。
因为当我们使用聚合函数时,记录会合并为一条,而无法显示其他数据详细信息。
例如:我们要查看students表中所有学生的姓名、学生生日以及最长学生生日。
结果示例: 写入错误:按照上面的写法会报错,因为聚合函数和另一个表中的列(Sname、Sage)同时放在了SELECT后面。
您需要使用 GROUPBY 语句对该表中的 (Sname, Sage) 列进行分组。
只需在上述语句后添加 GROUPBYSname, Sage 即可。
但这样写就会将每一组的数据聚合成一个数据。
例如每组有3 条数据。
使用MAX()+GROUPBY聚合函数,每组中只显示最大值的一条数据。
我们需要在Students表中显示所有学生,这样写并不能满足我们的需求。
正确的写法:结合子查询来实现。
子查询与 FROM 子句结合使用。
子查询的结果被视为“表”,可以使用 SELECT 语句进一步过滤。
例如:如果我们先写一条SELECT查询语句,将上面的查询语句放在FROM后面,那么上面的查询结果就会被认为是一个“表”。
这里有一些特别值得注意的事情。
放置在 FROM 之后的子查询必须有别名。
将复杂的子查询堆叠到 FROM 中将使整个查询看起来过于复杂。
我们通常将子查询的结果存储为视图,然后直接使用该视图作为源表。
视图将在高级 SQL 课程中详细解释。
实际上,子查询是一个嵌套的查询语句。
没什么新意。
它只是增加了另一个层次。
从里到外一层一层地排列起来,就会变得非常清晰。
任务:结合Student表,从Teacher表中找到作为校长的老师(通过子查询实现)。
工作分析:首先从Students表中找到所有班主任的Tids,去掉重复的。
将查询结果作为过滤条件,放在WHERE语句中。

在sql语言中,子查询是指