mysql 在SQL中用子查询替换内连接

i86rm4rw  于 2023-01-29  发布在  Mysql
关注(0)|答案(1)|浏览(149)

我遇到了一个示例,说明如何用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

3qpi33ja

3qpi33ja1#

这称为相关子查询。
对于外部查询的每一行,它都将运行内部查询,用编程术语来说,类似于循环中的循环。
更多信息..
https://www.geeksforgeeks.org/sql-correlated-subqueries/

相关问题