题目描述

有张World

1
2
3
4
5
6
7
8
9
+-----------------+------------+------------+--------------+---------------+
| 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查询,输出表中所有大国家名称、人口和面积。

例如上表,应该输出

1
2
3
4
5
6
+--------------+-------------+--------------+
| name | population | area |
+--------------+-------------+--------------+
| Afghanistan | 25500100 | 652230 |
| Algeria | 37100000 | 2381741 |
+--------------+-------------+--------------+

解法

1. 使用OR关键字连接

最开始的思路就是使用OR来筛选所有满足条件的数据

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

2. 使用UNION关键字连接

看了题解,发现还可以使用UNION关键字连接。UNION可以连接多个select语句的查询结果,会自动去重;UNION ALL则不会

1
2
3
4
5
SELECT name, population, area 
FROM World WHERE area > 3000000
UNION
SELECT name, population, area
FROM World WHERE population > 25000000;

官方题解说第二种方法会比第一种快,但是我的却是第一种快😂。不过两个思路差不多,使用OR会使索引会失效,在数据量较大的时候查找效率较低,通常建议使用UNION代替OR。

参考