首页 > 解决方案 > 关于 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之后,我很好奇它的功能。它是在创造一个假想的桌子吗?

标签: sqlselect

解决方案


括号中的部分:

(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')

推荐阅读