sql - 关于 Select from (select...) 语句的说明
问题描述
我遇到了一个 SQL 练习题。揭晓的答案是
SELECT ROUND(ABS(a - c) + ABS(b - d), 4) FROM (
SELECT MIN(lat_n) AS a, MIN(long_w) AS b, MAX(lat_n) AS c, MAX(long_w) AS d
FROM station);
通常情况下,我会
select[] from[] where [] (select...)
这意味着从 where 子句的内部循环中选择的变量将确定在外部循环中要查询的内容。如开头所述,这次选择是在 FROM之后,我很好奇它的功能。它是在创造一个假想的桌子吗?
解决方案
括号中的部分:
(SELECT MIN(lat_n) AS a, MIN(long_w) AS b, MAX(lat_n) AS c, MAX(long_w) AS d FROM station)
是一个子查询。
这里重要的是子查询的结果看起来像外部查询的常规表。在某些 SQL 风格中,紧跟右括号后的别名是必需的(即引用类似表的结果的名称)。
这在技术上是否是“临时表”有点细节,因为它的结果没有存储在查询范围之外;还有一个叫做临时表的东西被存储了。
此外(这可能是混淆的根源),子查询也可以在WHERE
子句中使用运算符(例如IN
),如下所示:
SELECT student_name
FROM students
WHERE student_school IN (SEELCT school_name FROM schools WHERE location='Springfield')
推荐阅读
- python - 错误:找不到满足要求 tensorflow==1.15 的版本(来自版本:2.2.0rc1、2.2.0rc2)
- python - 精度下降但损失下降的Keras序列分类模型
- java - 在 unix 中返回 OS ram 使用情况的 Java 方法
- javascript - 谷歌图表的问题,错误的百分比
- visual-studio-code - VSCode扩展,C语言
- java - 如何有效地实现可变对象的不可变和只读版本?
- angular - 无法解析所有参数的 JwtInterceptor
- flutter - 通过容器垂直填充 ListView 磁贴 - Flutter
- javascript - 如何防止代码包装在 Prettier / ESLint
- azure-devops - 手动仅作为 yaml 中的预部署条件触发