我遇到了一个示例,说明如何用SELECT子句中的子查询替换带有INNER JOIN的SQL语句。
有两个表--国家(代码、名称、洲、区域、表面积)和城市(名称、国家代码、城市固有流行区、大都市流行区)。
具有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子句中使用子查询:
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 = cities.country_code
而不执行连接?因为嵌套查询只从cities
中提取结果;它不指定countries
。
1条答案
按热度按时间3qpi33ja1#
这称为相关子查询。
对于外部查询的每一行,它都将运行内部查询,用编程术语来说,类似于循环中的循环。
更多信息..
https://www.geeksforgeeks.org/sql-correlated-subqueries/