Ceci est un problème de sqlzoo.netComment cette auto-jonction fonctionne-t-elle?
Voici le monde de la table:
+-------------+-----------+---------+ | name | continent | area | +-------------+-----------+---------+ | Afghanistan | Asia | 652230 | | Albania | Europe | 2831741 | | Algeria | Africa | 28748 | | ... | ... | ... | +-------------+-----------+---------+
La question:
Trouver le plus grand pays (par région) sur chaque continent, montrent le continent, le nom et la région:
la réponse que je suis en train de comprendre est:
SELECT continent, name, area
FROM world x
WHERE area >= ALL (SELECT area
FROM world y
WHERE y.continent=x.continent
AND area>0)
Ce code donne:
+-------------+-----------+--------+ | continent | name | area | +-------------+-----------+--------+ |Africa | Algeria | 2381741| |Oceania | Australia | 7692024| |South America| Brazil | 8515767| |North America| Canada | 9984670| |Asia | China | 9596961| |Caribbean | Cuba | 109884| |Europe | France | 640679| |Eurasia | Russia |17125242| +-------------+-----------+--------+
Je ne comprends pas comment cela fonctionne. Je pense que la sélection interne devrait produire une table qui contient toutes les zones et la sélection externe ne choisit que la plus grande (>=
). Mais comment cela se résume-t-il à une liste qui semble avoir été groupée par continent? Comment fonctionne y.continent=x.continent AND area>0
?
Il n'y a pas de JOINs dans votre requête. Vous avez une sous-requête corrélée. –