【问题标题】:Replacing Inner Join with a SubQuery in SQL用 SQL 中的子查询替换内部联接
【发布时间】:2020-02-29 03:52:59
【问题描述】:

请原谅这个问题太简单了,因为我正在学习如何编写子查询。 我在网上看到了这个指南,它展示了一个示例,说明如何将带有 INNER JOIN 的 SQL 语句替换为 SELECT 子句中带有子查询的语句。

有 2 个表格 - 国家(代码、名称、大陆、地区、surface_area)和城市(名称、国家代码、city_proper_pop、metroarea_pop)。

带有 INNER JOIN 的 SQL 语句

SELECT countries.name AS country, COUNT(*) AS cities_num
      FROM cities
        INNER JOIN countries
        ON countries.code = cities.country_code
    GROUP BY country
    ORDER BY cities_num DESC, country
    LIMIT 9;

这会返回表格:

接下来,该语句被替换为 SELECT 子句中带有子查询的 SQL 语句

    SELECT countries.name AS country,
      (SELECT COUNT(*)
       FROM cities
       WHERE countries.code = cities.country_code) AS cities_num
    FROM countries
    ORDER BY cities_num DESC, country
    LIMIT 9;

显示相同的结果表

我的问题是: 我不确定为什么嵌套 SQL 查询可以在 WHERE 子句中包含此条件 countries.code = city.country_code 而不执行任何联接。因为嵌套查询只从 cities 表 中提取结果,所以它没有指定 countries 表

希望有人能给我解释一下。提前谢谢你。

【问题讨论】:

标签: mysql


【解决方案1】:

这称为相关子查询。

对于外部查询的每一行,它将运行内部查询,在编程术语中类似于循环内的循环。

更多信息..

https://www.geeksforgeeks.org/sql-correlated-subqueries/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-28
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多