这里有张 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 会对结果进行排序去重,会降低性能。