[SQL] LeetCode题解 #595 大的国家

2020-05-10  本文已影响0人  半为花间酒

对SQL语句不熟悉欢迎查看我整理的笔记:[SQL] MySQL基础 + python交互

转载请注明:陈熹 chenx6542@foxmail.com (简书:半为花间酒)
若公众号内转载请联系公众号:早起Python

题目:

简单题 #595

SQL架构

Create table If Not Exists World (name varchar(255), continent varchar(255), area int, population int, gdp int);
Truncate table World;
insert into World (name, continent, area, population, gdp) values ('Afghanistan', 'Asia', '652230', '25500100', '20343000000');
insert into World (name, continent, area, population, gdp) values ('Albania', 'Europe', '28748', '2831741', '12960000000');
insert into World (name, continent, area, population, gdp) values ('Algeria', 'Africa', '2381741', '37100000', '188681000000');
insert into World (name, continent, area, population, gdp) values ('Andorra', 'Europe', '468', '78115', '3712000000');
insert into World (name, continent, area, population, gdp) values ('Angola', 'Africa', '1246700', '20609294', '100990000000');

题解

这道题被誉为LeetCode题库里最简单的一道题
基本上只要看一遍题目就可以轻松写出如下语句:

SELECT name, population, area
FROM World
WHERE area > 3000000 
OR population > 25000000;

这里补充一种特殊情况,如果该表设置了索引有没其他更好的办法
如果数据量很大,查询就要考虑优化,常常会建立索引
如果依然用上述解法,OR会放弃查询优化,即使基于索引列也不会用B+树而是普通扫描

因此这里给出另一种可以利用索引的解法:UNION

SELECT name,population,area 
FROM World 
WHERE area > 3000000 
UNION
SELECT name,population,area 
FROM World 
WHERE population > 25000000;
上一篇下一篇

猜你喜欢

热点阅读