题目描述
有张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。
参考