2022年10月更文挑战30-3-leetcode刷题-595大的国家

82 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天,点击查看活动详情

leetcode刷题-595大的国家

前文

本文内容为leetcode刷题内容,题目为数据库查询类型问题,题目序号为595,大的国家。本题目主要考察数据库的条件内容的查询,主要考察点为条件查询以及查询速度的优化。

题目信息

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| name        | varchar |
| continent   | varchar |
| area        | int     |
| population  | int     |
| gdp         | int     |
+-------------+---------+

name 是这张表的主键。这张表的每一行提供:国家名称、所属大陆、面积、人口和 GDP 值。如果一个国家满足下述两个条件之一,则认为该国是 大国 :

面积至少为 300 万平方公里(即,3000000 km2),或者 人口至少为 2500 万(即 25000000) 编写一个 SQL 查询以报告 大国 的国家名称、人口和面积。

题目分析

根据题目信息,表中记录了若干国家的名称、所属大陆、面积、人口以及gdp值。而对于我们的要求是要查询出大国的信息,也就是两个查询条件,人口至少2500万或者面积至少3000万平方千米。那么第一反应很容易想到在where语句中增加条件的选择,利用or进行两个条件的拼接。但是当我们采用or拼接条件时,如果条件是相同的字段会自动采用索引。但如果条件为不同的字段,只会有一个字段走索引,另外一个字段就涉及到回表进行数据查询。因此,本文中的解题方案采用union的方式,将多表进行联合,这样在查询数据的过程中能够完全通过索引进行查询,也就是尽量避免了索引失效。也就是在类似的场景中,尽量采用union联合的方式。至此,本题目的解答完成。

解题答案及结果

select name,population,area
from World
where area >= 3000000
union
select name,population,area
from World
where population >= 25000000

image.png

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。