PM *_*7-1 5 sql oracle subquery query-optimization correlated-subquery
我正在通过SQLZOO" SELECT教程中的SELECT ",这是完成工作的一个查询(任务7)
世界(名称,大陆,地区,人口,gdp)
SELECT w1.name, w1.continent, w1.population
FROM world w1
WHERE 25000000 >= ALL(SELECT w2.population FROM world w2 WHERE w2.continent=w1.continent)
Run Code Online (Sandbox Code Playgroud)
我的问题是关于此类查询的有效性.子查询将针对主查询的每一行(国家)运行,从而重复地重新填充给定大陆的ALL列表.
如果您想在没有关联子查询的情况下重写查询,这是一种方法:
SELECT w1.name, w1.continent, w1.population
FROM world w1
JOIN
( SELECT continent, MAX(population) AS max_population
FROM world
GROUP BY continent
) c
ON c.continent = w1.continent
WHERE 25000000 >= c.max_population ;
Run Code Online (Sandbox Code Playgroud)
我并不是说这会更快。Oracle 的优化器非常好,无论您如何编写,这都是一个简单的整体查询。这是另一个简化:
SELECT w1.name, w1.continent, w1.population
FROM world w1
JOIN
( SELECT continent
FROM world
GROUP BY continent
HAVING MAX(population) <= 25000000
) c
ON c.continent = w1.continent ;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
268 次 |
| 最近记录: |