MySQL基础练习题(1-5)
第1题:可回收且低价的产品
1.分析
题目:编写解决方案找出既是低脂又是可回收的产品编号。
说明:
product_id 是该表的主键(具有唯一值的列)。
low_fats 是枚举类型,取值为以下两种 (‘Y’, ‘N’),其中 ‘Y’ 表示该产品是低脂产品,‘N’ 表示不是低脂产品。
recyclable 是枚举类型,取值为以下两种 (‘Y’, ‘N’),其中 ‘Y’ 表示该产品可回收,而 ‘N’ 表示不可回收。
2.实现
####################### 1 ##########################
# 创建库
create database likou;
use likou;
# 创建表
Create table If Not Exists Products (product_id int, low_fats ENUM('Y', 'N'), recyclable ENUM('Y','N'));
Truncate table Products;
insert into Products (product_id, low_fats, recyclable) values ('0', 'Y', 'N');
insert into Products (product_id, low_fats, recyclable) values ('1', 'Y', 'Y');
insert into Products (product_id, low_fats, recyclable) values ('2', 'N', 'Y');
insert into Products (product_id, low_fats, recyclable) values ('3', 'Y', 'Y');
insert into Products (product_id, low_fats, recyclable) values ('4', 'N', 'N');
## 查询既是低脂又是可回收的产品编号
select product_id from Products where low_fats = 'Y' and recyclable = 'Y';
输入:products表
输出:查询既是低脂又是可回收的产品编号
第2题:寻找用户推荐人
1.分析
题目:找出那些 没有被 id = 2
的客户 推荐 的客户的姓名。
说明:
id 是该表的主键列。
该表的每一行表示一个客户的 id、姓名以及推荐他们的客户的 id。
2.实现
############################ 2 #############################################
Create table If Not Exists Customer (id int, name varchar(25), referee_id int);
Truncate table Customer;
INSERT INTO Customer (id, name, referee_id) VALUES (1, 'Will', NULL);
INSERT INTO Customer (id, name, referee_id) VALUES (2, 'Jane', NULL);
INSERT INTO Customer (id, name, referee_id) VALUES (3, 'Alex', 2);
INSERT INTO Customer (id, name, referee_id) VALUES (4, 'Bill', NULL);
INSERT INTO Customer (id, name, referee_id) VALUES (5, 'Zack', 1);
INSERT INTO Customer (id, name, referee_id) VALUES (6, 'Mark', 2);
##执行代码
select name from Customer where referee_id != 2 or referee_id is null;
输入:customer表
输出:找出那些 没有被 id = 2
的客户 推荐 的客户的姓名。
第3题:大的国家
1.分析
题目:找出 大国 的国家名称、人口和面积。
说明:
name 是该表的主键(具有唯一值的列)。
这张表的每一行提供:国家名称、所属大陆、面积、人口和 GDP 值。
如果一个国家满足下述两个条件之一,则认为该国是 大国 :
- 面积至少为 300 万平方公里(即,3000000 km2),或者
- 人口至少为 2500 万(即 25000000)
2.实现
############# 3 ################
Create table If Not Exists World (name varchar(255), continent varchar(255), area int, population int, gdp bigint);
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');
## 执行代码
select name,population,area from World where area >= 3000000 or population >= 25000000;
输入:world表
输出:找出 大国 的国家名称、人口和面积。
第4题:文章的浏览I
1.分析
题目:请查询出所有浏览过自己文章的作者,结果按照 id 升序排列。
说明:
此表可能会存在重复行。(换句话说,在 SQL 中这个表没有主键)
此表的每一行都表示某人在某天浏览了某位作者的某篇文章。
请注意,同一人的 author_id 和 viewer_id 是相同的。
2.实现
####################### 4 ##########################
Create table If Not Exists Views (article_id int, author_id int, viewer_id int, view_date date);
Truncate table Views;
insert into Views (article_id, author_id, viewer_id, view_date) values ('1', '3', '5', '2019-08-01');
insert into Views (article_id, author_id, viewer_id, view_date) values ('1', '3', '6', '2019-08-02');
insert into Views (article_id, author_id, viewer_id, view_date) values ('2', '7', '7', '2019-08-01');
insert into Views (article_id, author_id, viewer_id, view_date) values ('2', '7', '6', '2019-08-02');
insert into Views (article_id, author_id, viewer_id, view_date) values ('4', '7', '1', '2019-07-22');
insert into Views (article_id, author_id, viewer_id, view_date) values ('3', '4', '4', '2019-07-21');
insert into Views (article_id, author_id, viewer_id, view_date) values ('3', '4', '4', '2019-07-21');
## 请查询出所有浏览过自己文章的作者 。
# 结果按照 id 升序排列。
select distinct author_id as id from Views where author_id = Viewer_id order by id;
输入:views表
输出:请查询出所有浏览过自己文章的作者,结果按照 id 升序排列。
第5题:无效的推文
1.分析
题目:查询所有无效推文的编号(ID)。当推文内容中的字符数严格大于 15 时,该推文是无效的。
说明:
tweet_id 是这个表的主键。
这个表包含某社交媒体 App 中所有的推文。
2.实现
################## 5 #####################
Create table If Not Exists Tweets(tweet_id int, content varchar(50));
Truncate table Tweets;
insert into Tweets (tweet_id, content) values ('1', 'Vote for Biden');
insert into Tweets (tweet_id, content) values ('2', 'Let us make America great again!');
### 查询所有无效推文的编号(ID)。当推文内容中的字符数严格大于 15 时,该推文是无效的。
select tweet_id from tweets where length(content) > 15;
输入:tweets表
输出:查询所有无效推文的编号(ID)。