一、问题描述
 +-------------+---------+| 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('','')操作会更好。
评论