595. 大的国家 - 力扣(LeetCode)

这里有张 World

+-----------------+------------+------------+--------------+---------------+
| name            | continent  | area       | population   | gdp           |
+-----------------+------------+------------+--------------+---------------+
| Afghanistan     | Asia       | 652230     | 25500100     | 20343000      |
| Albania         | Europe     | 28748      | 2831741      | 12960000      |
| Algeria         | Africa     | 2381741    | 37100000     | 188681000     |
| Andorra         | Europe     | 468        | 78115        | 3712000       |
| Angola          | Africa     | 1246700    | 20609294     | 100990000     |
+-----------------+------------+------------+--------------+---------------+

如果一个国家的面积超过 300 万平方公里,或者人口超过 2500 万,那么这个国家就是大国家。

编写一个 SQL 查询,输出表中所有大国家的名称、人口和面积。

例如,根据上表,我们应该输出:

+--------------+-------------+--------------+
| name         | population  | area         |
+--------------+-------------+--------------+
| Afghanistan  | 25500100    | 652230       |
| Algeria      | 37100000    | 2381741      |
+--------------+-------------+--------------+

一解

使用 or 简单求解:

SELECT 
    name, population, area 
FROM 
    World 
WHERE population > 25000000 OR area > 3000000

二解

使用 Union 进行合并:

SELECT 
    name, population, area 
FROM 
    World 
WHERE population > 25000000

UNION

SELECT 
    name, population, area 
FROM 
    World 
WHERE area > 3000000

Union 与 Or 的性能问题:

Or 两边涉及多个列的时(只涉及一个列时,不会出现问题),MySql 会对每条记录进行遍历。使用 UNION 会更高效,会利用 area 和 population 上面的 index 进行查询,但是由于 UNION 会对结果进行排序去重,会降低性能。

1 个赞