写点什么

数据库每日一题 --- 第 3 天:大的国家

作者:知心宝贝
  • 2022 年 6 月 05 日
  • 本文字数:1254 字

    阅读完需:约 4 分钟

数据库每日一题---第3天:大的国家

一、问题描述

+-------------+---------+| Column Name | Type    |+-------------+---------+| name        | varchar || continent   | varchar || area        | int     || population  | int     || gdp         | int     |+-------------+---------+name 是这张表的主键。这张表的每一行提供:国家名称、所属大陆、面积、人口和 GDP 值。
复制代码


如果一个国家满足下述两个条件之一,则认为该国是 大国


面积至少为 300 万平方公里(即,3000000 ),或者人口至少为 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 allunion 少了去重,所以用时更少。

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('','')操作会更好。



发布于: 刚刚阅读数: 4
用户头像

知心宝贝

关注

公众号:穿越计算机的迷雾 2022.03.07 加入

生于尘埃 溺于人海 死于理想高台

评论

发布
暂无评论
数据库每日一题---第3天:大的国家_数据库_知心宝贝_InfoQ写作社区