一、题目
World 表:
+-------------+---------+
| 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 |
+-------------+------------+---------+
来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、解题
这里使用数据表db1,在db1创建world表,本题写有数据类型可以直接设置
USE db1;
CREATE TABLE world(
NAME VARCHAR(20) PRIMARY KEY,
continent VARCHAR(20),
AREA INT,
population INT,
gdp INT
);
开始填入数据
INSERT INTO world VALUES ("Afghanistan","Asia",652230,255001,20343000000);
当执行语句的时候,会发现这里报1264的错误码.
这是gdp的存值大于int的取值范围引起的
int与bigint
int的取值范围: --2147483648到+2147483647
bigint的取值范围:-9223372036854775808到+9223372036854775807
这里需要修改数据的类型
ALTER TABLE world MODIFY gdp BIGINT;
之后重新插入数据
INSERT INTO world VALUES ("Afghanistan","Asia",652230,255001,20343000000),
("Albania","Europe",28748,2831741,12960000000),
("Algeria","Africa",2381741,37100000,188681000000),
("Andorra","Europe",468,78115,3712000000),
("Angola","Africa",1246700,20609294,100990000000);
显示插入成功,这是查看数据表
or 语法
现在考虑问题的两个条件,满足任意条件的数据都是正确的数据
因此这里最容器想起的就是or语法
使用or语法将两个条件连在一起,满足任意条件数据都通过
SELECT NAME, population, AREA FROM world WHERE AREA >= 3000000 OR population >= 25000000;
union
会对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序。
单独对每个条件查询,查询之后将两个结果合并。
SELECT NAME, population, AREA FROM world WHERE AREA >= 3000000 UNION SELECT NAME, population, AREA FROM world WHERE population>=25000000;