sql子查询解释

时间:2017-07-06 06:06:42

标签: mysql sql sql-server postgresql subquery

SELECT sub.*
FROM (
     SELECT *
     FROM tutorial.sf_crime_incidents_2014_01
     WHERE day_of_week = 'Friday'
     ) sub
WHERE sub.resolution = 'NONE'

这个子查询不是我的,它来自一个教程网站。我只想清除子查询的想法,首先,内部查询完成,然后答案变为别名<code>sub</code>。然后外部查询接受答案并选择与该答案匹配的所有列和where条件。这是如何工作的?

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

概念,这就是它的工作原理。

但是,您需要注意不能使用子查询强制 RDBMS(MySQL,PostgreSQL或任何其他)来执行命令中的操作描述。 RDBMS将自行选择如何通过所谓的查询计划执行查询。

例如,以下查询表达与您的查询完全相同:

SELECT *
FROM tutorial.sf_crime_incidents_2014_01
WHERE day_of_week = 'Friday' AND sub.resolution = 'NONE';

优化器通常能够确定您的查询可以简化(我猜您会同意上述查询比您​​的查询更简单)。

请注意,填充子查询以更容易区分子查询是什么以及主要查询是什么更具可读性:

SELECT sub.*
FROM (
  SELECT *
  FROM tutorial.sf_crime_incidents_2014_01
  WHERE day_of_week = 'Friday'
) AS sub
WHERE sub.resolution = 'NONE';

答案 1 :(得分:1)

是。如果 tutorial.sf_crime_incidents_2014_01 表中存在 sub.resolution 列,它将起作用