一、问题描述
+-------------+---------+| Column Name | Type |+-------------+---------+| name | varchar || continent | varchar || area | int || population | int || gdp | int |+-------------+---------+name 是这张表的主键。这张表的每一行提供:国家名称、所属大陆、面积、人口和 GDP 值。
复制代码
如果一个国家满足下述两个条件之一,则认为该国是 大国 :
面积至少为 300 万平方公里(即,3000000 km2),或者人口至少为 2500 万(即 25000000)编写一个 SQL 查询以报告 大国 的国家名称、人口和面积。
按 任意顺序 返回结果表。
题目链接:大的国家
二、题目要求
样例
输入:World 表:+-------------+-----------+---------+------------+--------------+| name | continent | area | population | gdp |+-------------+-----------+---------+------------+--------------+| Afghanistan | Asia | 652230 | 25500100 | 20343000000 || Albania | Europe | 28748 | 2831741 | 12960000000 || Algeria | Africa | 2381741 | 37100000 | 188681000000 || Andorra | Europe | 468 | 78115 | 3712000000 || Angola | Africa | 1246700 | 20609294 | 100990000000 |+-------------+-----------+---------+------------+--------------+输出:+-------------+------------+---------+| name | population | area |+-------------+------------+---------+| Afghanistan | 25500100 | 652230 || Algeria | 37100000 | 2381741 |+-------------+------------+---------+
复制代码
考察
1.条件查询、union2.建议用时10~25min
复制代码
三、问题分析
1.条件查询
这一题一开始看就是一道普通的where条件查询的语句,我们只需要用or连接两个条件进行判断。只要这一行记录符合两个条件其中的一个就可以。
2.union 连接
union本质是离散数学并的概念,但在数据库中使用起来却有大不同。使用union连接数据会自动对相同的元素进行去重操作并进行默认规则的排序,而union all不会去重操作和排序操作。
从执行效率来说,union all比union 少了去重,所以用时更少。
3.对比总结
但看到评论区对于这两种方法的区别进行了探讨,这里我也说一下我的小小见解。
使用or进行条件查询,对于单个的列来说并没有问题,但是对于多个列来讲。每次select只能够选择一个 index,如果选择area,那么对于population不会跳过,而是会重新遍历。这种情况下,使用union分成两次查询就会,索引的调用次数会少很多。
四、编码实现
1.条件查询
select name,population,areafrom Worldwhere area>=3000000 or population>=25000000
复制代码
2.union 连接
select name,population,areafrom Worldwhere area>=3000000 unionselect name,population,areafrom Worldwhere population>=25000000
复制代码
五、测试结果
第一行是union,第二行是条件查询。
如果是相同列的查询建议使用 where in('','')操作会更好。
评论