【发布时间】: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