【问题标题】:sql subqueries explainedsql子查询解释
【发布时间】:2017-12-09 23:48:14
【问题描述】:
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 条件。这是它的工作原理吗?
感谢您的帮助。
【问题讨论】:
标签:
mysql
sql
sql-server
postgresql
subquery
【解决方案1】:
是的。如果 tutorial.sf_crime_incidents_2014_01 表中存在 sub.resolution 列,它将起作用
【解决方案2】:
从概念上来说,它就是这样工作的。
但是,您需要注意,您不能使用子查询来强制 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';