SQL日常练习1-基础篇-牛客网
Posted EbowTang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL日常练习1-基础篇-牛客网相关的知识,希望对你有一定的参考价值。
本文章目的:
在于对SQL系统化学习后,进行:
1,日常练习,巩固;
2,加深对SQL知识体系;
3,总结SQL相关知识;
4,或者某有朝一日能快速捡起相关SQL知识。
5,同时附带有KES数据库上的验证结果
长期更新和总结。。。。。。无截止时间
以下均是牛客网练习题-mysql数据库测试结果:
目录
SQL1 查询所有列
题目:现在运营想要查看用户信息表中所有的数据,请你取出相应结果
示例:user_profile
id | device_id | gender | age | university | province |
1 | 2138 | male | 21 | 北京大学 | Beijing |
2 | 3214 | male | 复旦大学 | Shanghai | |
3 | 6543 | female | 20 | 北京大学 | Beijing |
4 | 2315 | female | 23 | 浙江大学 | ZheJiang |
5 | 5432 | male | 25 | 山东大学 | Shandong |
根据示例,你的查询应返回以下结果:
id | device_id | gender | age | university | province |
1 | 2138 | male | 21 | 北京大学 | Beijing |
2 | 3214 | male | 复旦大学 | Shanghai | |
3 | 6543 | female | 20 | 北京大学 | Beijing |
4 | 2315 | female | 23 | 浙江大学 | Zhejiang |
5 | 5432 | male | 25 | 山东大学 | Shandong |
表及其创建示例(后续没说明均是此表及其衍生)
输入:
drop table if exists user_profile; CREATE TABLE `user_profile` ( `id` int NOT NULL, `device_id` int NOT NULL, `gender` varchar(14) NOT NULL, `age` int , `university` varchar(32) NOT NULL, `province` varchar(32) NOT NULL); INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学','BeiJing'); INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学','Shanghai'); INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学','BeiJing'); INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学','ZheJiang'); INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学','Shandong');
select * from user_profile;
或者
select
id,device_id,
gender,
age,
university,province
from user_profile;
SQL2 查询多列
题目:现在运营同学想要用户的设备id对应的性别、年龄和学校的数据,请你取出相应数据
示例:user_profile
id | device_id | gender | age | university | province |
1 | 2138 | male | 21 | 北京大学 | Beijing |
2 | 3214 | male | 复旦大学 | Shanghai | |
3 | 6543 | female | 20 | 北京大学 | Beijing |
4 | 2315 | female | 23 | 浙江大学 | Zhejiang |
5 | 5432 | male | 25 | 山东大学 | Shandong |
根据示例,你的查询应返回以下结果
device_id | gender | age | university |
2138 | male | 21 | 北京大学 |
3214 | male | 复旦大学 | |
6543 | female | 20 | 北京大学 |
2315 | female | 23 | 浙江大学 |
5432 | male | 25 | 山东大学 |
select device_id,gender,age,university
from user_profile;
SQL3 查询结果去重
题目:现在运营需要查看用户来自于哪些学校,请从用户信息表中取出学校的去重数据。
示例:user_profile
id | device_id | gender | age | university | province |
1 | 2138 | male | 21 | 北京大学 | Beijing |
2 | 3214 | male | 复旦大学 | Shanghai | |
3 | 6543 | female | 20 | 北京大学 | Beijing |
4 | 2315 | female | 23 | 浙江大学 | ZheJiang |
5 | 5432 | male | 25 | 山东大学 | Shandong |
根据示例,你的查询应返回以下结果:
university |
北京大学 |
复旦大学 |
浙江大学 |
山东大学 |
select distinct university
from user_profile;
或者
SELECT university
from user_profile
GROUP BY university;
SQL4 查询结果限制返回行数
题目:现在运营只需要查看前2个用户明细设备ID数据,请你从用户信息表 user_profile 中取出相应结果。
示例:
id | device_id | gender | age | university | province |
1 | 2138 | male | 21 | 北京大学 | Beijing |
2 | 3214 | male | 复旦大学 | Shanghai | |
3 | 6543 | female | 20 | 北京大学 | Beijing |
4 | 2315 | female | 23 | 浙江大学 | ZheJiang |
5 | 5432 | male | 25 | 山东大学 | Shandong |
根据输入,你的查询应返回以下结果:
device_id |
2138 |
3214 |
select device_id from user_profile limit 2;
select device_id from user_profile limit 0,2;
select device_id from user_profile limit 2 offset 0;
select device_id from user_profile where id in(1,2);
select device_id from user_profile where id <=2;
select device_id from user_profile where id=1 or id=2;
SQL5 将查询后的列重新命名
题目:现在你需要查看前2个用户明细设备ID数据,并将列名改为 'user_infos_example',,请你从用户信息表取出相应结果。
示例:user_profile
id | device_id | gender | age | university | province |
1 | 2138 | male | 21 | 北京大学 | Beijing |
2 | 3214 | male | 复旦大学 | Shanghai | |
3 | 6543 | female | 20 | 北京大学 | Beijing |
4 | 2315 | female | 23 | 浙江大学 | ZheJiang |
5 | 5432 | male | 25 | 山东大学 | Shandong |
根据示例,你的查询应返回以下结果:
user_infos_example |
2138 |
3214 |
select device_id as user_infos_example
from user_profile
where id < 3
或者
select device_id as user_infos_example
from user_profile
where id in (1,2)
或者
select device_id as user_infos_example
from user_profile
limit 2
SQL6 查找学校是北大的学生信息
题目:现在运营想要筛选出所有北京大学的学生进行用户调研,请你从用户信息表中取出满足条件的数据,结果返回设备id和学校。
示例:user_profile
id | device_id | gender | age | university | province |
1 | 2138 | male | 21 | 北京大学 | Beijing |
2 | 3214 | male | 复旦大学 | Shanghai | |
3 | 6543 | female | 20 | 北京大学 | Beijing |
4 | 2315 | female | 23 | 浙江大学 | ZheJiang |
5 | 5432 | male | 25 | 山东大学 | Shandong |
根据示例,你的查询应返回以下结果:
device_id | university |
2138 | 北京大学 |
6543 | 北京大学 |
select device_id,university
from user_profile
where university = '北京大学'
SQL7 查找年龄大于24岁的用户信息
题目:现在运营想要针对24岁以上的用户开展分析,请你取出满足条件的设备ID、性别、年龄、学校。
用户信息表:user_profile
id | device_id | gender | age | university | province |
1 | 2138 | male | 21 | 北京大学 | Beijing |
2 | 3214 | male | 复旦大学 | Shanghai | |
3 | 6543 | female | 20 | 北京大学 | Beijing |
4 | 2315 | female | 23 | 浙江大学 | ZheJiang |
5 | 5432 | male | 25 | 山东大学 | Shandong |
根据输入,你的 查询应返回以下结果:
device_id | gender | age | university |
5432 | male | 25 | 山东大学 |
select device_id,gender,age, university
from user_profile
where age > 24
SQL8 查找某个年龄段的用户信息
题目:现在运营想要针对20岁及以上且23岁及以下的用户开展分析,请你取出满足条件的设备ID、性别、年龄。
用户信息表:user_profile
id | device_id | gender | age | university | province |
1 | 2138 | male | 21 | 北京大学 | Beijing |
2 | 3214 | male | 复旦大学 | Shanghai | |
3 | 6543 | female | 20 | 北京大学 | Beijing |
4 | 2315 | female | 23 | 浙江大学 | ZheJiang |
5 | 5432 | male | 25 | 山东大学 | Shandong |
根据输入,你的查询应返回以下结果:
device_id | gender | age |
2138 | male | 21 |
6543 | female | 20 |
2315 | female | 23 |
select device_id,gender,age
from user_profile
where age > 19 and age < 24
SQL9 查找除复旦大学的用户信息
题目:现在运营想要查看除复旦大学以外的所有用户明细,请你取出相应数据
示例:user_profile
id | device_id | gender | age | university | province |
1 | 2138 | male | 21 | 北京大学 | Beijing |
2 | 3214 | male | 复旦大学 | Shanghai | |
3 | 6543 | female | 20 | 北京大学 | Beijing |
4 | 2315 | female | 23 | 浙江大学 | ZheJiang |
5 | 5432 | male | 25 | 山东大学 | Shandong |
根据输入,你的查询应返回以下结果:
device_id | gender | age | university |
2138 | male | 21 | 北京大学 |
6543 | female | 20 | 北京大学 |
2315 | female | 23 | 浙江大学 |
5432 | male | 25 | 山东大学 |
select device_id,gender,age,university
from user_profile
#where university != '复旦大学'
#where university not like '复旦大学'
# where university not in ('复旦大学')
SQL10 用where过滤空值练习
题目:现在运营想要对用户的年龄分布开展分析,在分析时想要剔除没有获取到年龄的用户,请你取出所有年龄值不为空的用户的设备ID,性别,年龄,学校的信息。
示例:user_profile
id | device_id | gender | age | university | province |
1 | 2138 | male | 21 | 北京大学 | Beijing |
2 | 3214 | male | 复旦大学 | Shanghai | |
3 | 6543 | female | 20 | 北京大学 | Beijing |
4 | 2315 | female | 23 | 浙江大学 | ZheJiang |
5 | 5432 | male | 25 | 山东大学 | Shandong |
根据输入,你的 查询应返回以下结果:
device_id | gender | age | university |
2138 | male | 21 | 北京大学 |
6543 | female | 20 | 北京大学 |
2315 | female | 23 | 浙江大学 |
5432 | male | 25 | 山东大学 |
select device_id,gender,age,university
from user_profile
Where age is not null
--Where age != 'null' --测试不通过,mysql可以
--Where age <> 'null' --测试不通过,mysql可以
SQL11 高级操作符练习(1)
题目:现在运营想要找到男性且GPA在3.5以上(不包括3.5)的用户进行调研,请你取出相关数据。
示例:user_profile
id | device_id | gender | age | university | gpa |
1 | 2138 | male | 21 | 北京大学 | 3.4 |
2 | 3214 | male | 复旦大学 | 4.0 | |
3 | 6543 | female | 20 | 北京大学 | 3.2 |
4 | 2315 | female | 23 | 浙江大学 | 3.6 |
5 | 5432 | male | 25 | 山东大学 | 3.8 |
根据输入,你的查询应返回以下结果:
device_id | gender | age | university | gpa |
3214 | male | 复旦大学 | 4.0 | |
5432 | male | 25 | 山东大学 | 3.8 |
select device_id,gender,age,university,gpa
from user_profile
where gpa > 3.5 and gender = 'male';
SQL12 高级操作符练习(2)
题目:现在运营想要找到学校为北大或GPA在3.7以上(不包括3.7)的用户进行调研,请你取出相关数据(使用OR实现)
示例:user_profile
id | device_id | gender | age | university | gpa |
1 | 2138 | male | 21 | 北京大学 | 3.4 |
2 | 3214 | male | 复旦大学 | 4.0 | |
3 | 6543 | female | 20 | 北京大学 | 3.2 |
4 | 2315 | female | 23 | 浙江大学 | 3.6 |
5 | 5432 | male | 25 | 山东大学 | 3.8 |
根据输入,你的查询应返回以下结果:
device_id | gender | age | university | gpa |
2138 | male | 21 | 北京大学 | 3.4 |
3214 | male | 复旦大学 | 4.0 | |
6543 | female | 20 | 北京大学 | 3.2 |
5432 | male | 25 | 山东大学 | 3.8 |
题目:现在运营想要找到学校为北大或GPA在3.7以上(不包括3.7)的用户进行调研,请你取出相关数据(使用OR实现)
select device_id,gender,age,university,gpa
from user_profile
where gpa > 3.7 or university = '北京大学';
SQL13 Where in 和Not in
题目:现在运营想要找到学校为北大、复旦和山大的同学进行调研,请你取出相关数据。
示例:user_profile
id | device_id | gender | age | university | gpa |
1 | 2138 | male | 21 | 北京大学 | 3.4 |
2 | 3214 | male | 复旦大学 | 4.0 | |
3 | 6543 | female | 20 | 北京大学 | 3.2 |
4 | 2315 | female | 23 | 浙江大学 | 3.6 |
5 | 5432 | male | 25 | 山东大学 | 3.8 |
根据输入,你的查询应返回以下结果:
device_id | gender | age | university | gpa |
2138 | male | 21 | 北京大学 | 3.4 |
3214 | male | 复旦大学 | 4.0 | |
6543 | female | 20 | 北京大学 | 3.2 |
5432 | male | 25 | 山东大学 | 3.8 |
--13,题目:现在运营想要找到学校为北大、复旦和山大的同学进行调研,请你取出相关数据。,
select device_id,gender,age,university,gpa
from user_profile
where university = '北京大学' or university = '复旦大学' or university = '山东大学';
--where university in('北京大学','复旦大学','山东大学')
SQL14 操作符混合运用
题目:现在运营想要找到gpa在3.5以上(不包括3.5)的山东大学用户 或 gpa在3.8以上(不包括3.8)的复旦大学同学进行用户调研,请你取出相应数据
示例:user_profile
id | device_id | gender | age | university | province | gpa |
1 | 2138 | male | 21 | 北京大学 | BeiJing | 3.4 |
2 | 3214 | male | NULL | 复旦大学 | Shanghai | 4 |
3 | 6543 | female | 20 | 北京大学 | BeiJing | 3.2 |
4 | 2315 | female | 23 | 浙江大学 | ZheJiang | 3.6 |
5 | 5432 | male | 25 | 山东大学 | Shandong | 3.8 |
根据输入,你的查询应返回以下结果:(该题对于小数点后面的0不需要计算与统计,后台系统会统一输出小数点后面1位)
device_id | gender | age | university | gpa |
3214 | male | NULL | 复旦大学 | 4 |
5432 | male | 25 | 山东大学 | 3.8 |
--14,题目:现在运营想要找到gpa在3.5以上(不包括3.5)的山东大学用户 或 gpa在3.8以上(不包括3.8)的复旦大学同学进行用户调研,请你取出相应数据
select device_id,gender,age,university,gpa
from user_profile
where (university = '山东大学' and gpa > 3.5) or (university = '复旦大学' and gpa > 3.8);
SQL15 查看学校名称中含北京的用户
题目:现在运营想查看所有大学中带有北京的用户的信息,请你取出相应数据。
示例:用户信息表:user_profile
id | device_id | gender | age | university | gpa |
1 | 2138 | male | 21 | 北京大学 | 3.4 |
2 | 3214 | male | 复旦大学 | 4.0 | |
3 | 6543 | female | 20 | 北京大学 | 3.2 |
4 | 2315 | female | 23 | 浙江大学 | 3.6 |
5 | 5432 | male | 25 | 山东大学 | 3.8 |
6 | 2131 | male | 28 | 北京师范大学 | 3.3 |
根据示例,你的查询应返回如下结果:
device_id | age | university |
2138 | 21 | 北京大学 |
6543 | 20 | 北京大学 |
2131 | 28 | 北京师范大学 |
select device_id,age,university
from user_profile
where university like '北京%';
SQL16 查找GPA最高值
题目:运营想要知道复旦大学学生gpa最高值是多少,请你取出相应数据
示例:某user_profile表如下:
id | device_id | gender | age | university | gpa |
1 | 2234 | male | 21 | 北京大学 | 3.2 |
2 | 2235 | male | NULL | 复旦大学 | 3.8 |
3 | 2236 | female | 20 | 复旦大学 | 3.5 |
4 | 2237 | female | 23 | 浙江大学 | 3.3 |
5 | 2238 | male | 25 | 复旦大学 | 3.1 |
6 | 2239 | male | 25 | 北京大学 | 3.6 |
7 | 2240 | male | NULL | 清华大学 | 3.3 |
8 | 2241 | female | NULL | 北京大学 | 3.7 |
根据输入,你的查询应返回以下结果,结果保留到小数点后面1位(1位之后的四舍五入):
gpa |
3.8 |
select max(gpa) from user_profile
where university = '复旦大学'
SQL17 计算男生人数以及平均GPA
题目:现在运营想要看一下男性用户有多少人以及他们的平均gpa是多少,用以辅助设计相关活动,请你取出相应数据。
示例:user_profile
id | device_id | gender | age | university | gpa |
1 | 2138 | male | 21 | 北京大学 | 3.4 |
2 | 3214 | male | 复旦大学 | 4.0 | |
3 | 6543 | female | 20 | 北京大学 | 3.2 |
4 | 2315 | female | 23 | 浙江大学 | 3.6 |
5 | 5432 | male | 25 | 山东大学 | 3.8 |
6 | 2131 | male | 28 | 北京师范大学 | 3.3 |
根据输入,你的查询应返回以下结果,结果保留到小数点后面1位(1位之后的四舍五入):
male_num | avg_gpa |
4 | 3.6 |
select count(gender) as male_num,round(avg(gpa),1) as avg_gpa
from user_profile
where gender='male';
附录:KingbaseES数据库测试验证结果:
使用例子有一点区别,相同的语句进行测试验证输出结果符合预期,和上面的例子一一对应
drop table if exists user_profile;
CREATE TABLE user_profile (
id int NOT NULL,
device_id int NOT NULL,
gender varchar(14) NOT NULL,
age int ,
university varchar(32) NOT NULL,
province varchar(32) NOT null,
gpa float
);
INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学','BeiJing',3.4);
INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学','Shanghai',4.0);
INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学','BeiJing',3.2);
INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学','ZheJiang',3.6);
INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学','Shandong',3.8);
INSERT INTO user_profile VALUES(6,2131,'male',28,'北京师范大学','BeiJing',3.3);
INSERT INTO user_profile VALUES(7,2240,'male',null,'清华大学','BeiJing',3.3);
INSERT INTO user_profile VALUES(8,2241,'female',null,'北京大学','BeiJing',3.7);
select * from user_profile;
--1,题目:现在运营想要查看用户信息表中所有的数据,请你取出相应结果
select * from user_profile;
--2,题目:现在运营同学想要用户的设备id对应的性别、年龄和学校的数据,请你取出相应数据
select device_id,gender,age,university
from user_profile;
--3,题目:现在运营需要查看用户来自于哪些学校,请从用户信息表中取出学校的去重数据。
select distinct university
from user_profile;
--或者分组查询
SELECT university
from user_profile
GROUP BY university;
--4,题目:现在运营只需要查看前2个用户明细设备ID数据,请你从用户信息表 user_profile 中取出相应结果。
select device_id from user_profile limit 2;
select device_id from user_profile limit 0,2;
select device_id from user_profile limit 2 offset 0;
select device_id from user_profile where id in(1,2);
select device_id from user_profile where id <=2;
select device_id from user_profile where id=1 or id=2;
--5,题目:现在你需要查看前2个用户明细设备ID数据,并将列名改为 'user_infos_example',,请你从用户信息表取出相应结果。
select device_id as user_infos_example
from user_profile
where id < 3;
--或者
select device_id as user_infos_example
from user_profile
where id in (1,2);
--或者
select device_id as user_infos_example
from user_profile
limit 2 offset 0;
--6,题目:现在运营想要筛选出所有北京大学的学生进行用户调研,
--请你从用户信息表中取出满足条件的数据,结果返回设备id和学校。
select device_id,university
from user_profile
where university = '北京大学'
--7,题目:现在运营想要针对24岁以上的用户开展分析,请你取出满足条件的设备ID、性别、年龄、学校。
select device_id,gender,age, university
from user_profile
where age > 24
--8,题目:现在运营想要针对20岁及以上且23岁及以下的用户开展分析,请你取出满足条件的设备ID、性别、年龄。
select device_id,gender,age
from user_profile
where age > 19 and age < 24
--9,题目:现在运营想要查看除复旦大学以外的所有用户明细,请你取出相应数据
select device_id,gender,age,university
from user_profile
--where university != '复旦大学'
where university not like '复旦大学'
--10,题目:现在运营想要对用户的年龄分布开展分析,在分析时想要剔除没有获取到年龄的用户,
--请你取出所有年龄值不为空的用户的设备ID,性别,年龄,学校的信息。
select device_id,gender,age,university
from user_profile
Where age is not null
--Where age != 'null' --测试不通过,mysql可以
--Where age <> 'null' --测试不通过,mysql可以
--11,题目:现在运营想要找到男性且GPA在3.5以上(不包括3.5)的用户进行调研,请你取出相关数据。
select device_id,gender,age,university,gpa
from user_profile
where gpa > 3.5 and gender = 'male';
--12,题目:现在运营想要找到学校为北大或GPA在3.7以上(不包括3.7)的用户进行调研,请你取出相关数据(使用OR实现),
select device_id,gender,age,university,gpa
from user_profile
where gpa > 3.7 or university = '北京大学';
--13,题目:现在运营想要找到学校为北大、复旦和山大的同学进行调研,请你取出相关数据。,
select device_id,gender,age,university,gpa
from user_profile
where university = '北京大学' or university = '复旦大学' or university = '山东大学';
--where university in('北京大学','复旦大学','山东大学')
--14,题目:现在运营想要找到gpa在3.5以上(不包括3.5)的山东大学用户 或 gpa在3.8以上(不包括3.8)的复旦大学同学进行用户调研,请你取出相应数据
select device_id,gender,age,university,gpa
from user_profile
where (university = '山东大学' and gpa > 3.5) or (university = '复旦大学' and gpa > 3.8);
--15,题目:现在运营想查看所有大学中带有北京的用户的信息,请你取出相应数据。
select device_id,age,university
from user_profile
where university like '北京%'; --%通配符,后面可以跟0-N字符
--16,题目:运营想要知道复旦大学学生gpa最高值是多少,请你取出相应数据
select max(gpa) from user_profile
where university = '北京大学'
--17,题目:现在运营想要看一下男性用户有多少人以及他们的平均gpa是多少,用以辅助设计相关活动,请你取出相应数据。
select count(gender) as male_num,round(avg(gpa),1) as avg_gpa
from user_profile
where gender='male';
以上是关于SQL日常练习1-基础篇-牛客网的主要内容,如果未能解决你的问题,请参考以下文章