【问题标题】: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';
      

      【讨论】:

        猜你喜欢
        • 2020-06-28
        • 1970-01-01
        • 2014-01-12
        • 1970-01-01
        • 1970-01-01
        • 2011-06-09
        • 1970-01-01
        • 2021-05-10
        相关资源
        最近更新 更多