mysql数据库笔试题库和答案mysql语句(后端面试必备)

一、入门基础题

基础查询

1、现在运营想要查看用户信息表中所有的数据,请你取出相应结果(1-6题共用一个表)

2、现在运营同学想要用户的设备id对应的性别、年龄和学校的数据,请你取出相应数据

3、现在运营需要查看用户来自于哪些学校,请从用户信息表中取出学校的去重数据。

4、现在运营只需要查看前2个用户明细设备ID数据,请你从用户信息表 user_profile 中取出相应结果。

5、现在你需要查看前2个用户明细设备ID数据,并将列名改为 ‘user_infos_example’,请你从用户信息表取出相应结果。

6、现在运营想要筛选出所有北京大学的学生进行用户调研,请你从用户信息表中取出满足条件的数据,结果返回设备id和学校。
在这里插入图片描述
建表语句:(最好能根据上表自己写出来,对于初级的笔试很可能会有建表的题写语句)


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');

第一题答案

selectid,device_id,gender,age,university,provincefrom user_profile
或者
select*from user_profile
实际应用中一般写列名,很少用*号。select 表列名 from 表名

在这里插入图片描述

第二题答案

SELECT device_id,gender,age,university from user_profile

在这里插入图片描述

第三题答案

二种方式
1.distinct 关键字
select distinct university from user_profiledistinct去重,放在列的前面使用。
2.分组SELECT
universityfrom user_profilegroup by university以分组来筛选出去重的结果

在这里插入图片描述

第四题答案

select device_id from user_profile limit 0,2---运行效率更高

select device_id from user_profile limit 2 ---运行效率低

也可结合 limit offset: 一起使用时,limit表示要取的数量,offset表示跳过的数量

select device_id from user_profile limit 2 offset 0 // 跳过0条,从第一条数据开始取,取两条数据 ---运行效率中

在这里插入图片描述

第五题答案

select device_id as user_infors_example from user_profile limit 0,2;
这里主要是用到了 起别名关键字 as 以及组合限制查询 limit 索引,个数
其中as可以省略,索引为0可以省略
select device_id user_infors_example from user_profile limit 2;

在这里插入图片描述

第六题答案

SELECT device_id,university from user_profile where university='北京大学';

在这里插入图片描述

条件查询

7、现在运营想要取出用户信息表中的用户年龄,请取出相应数据,并按照年龄升序排序。

8、现在运营想要取出用户信息表中的年龄和gpa数据,并先按照gpa升序排序,再按照年龄升序排序输出,请取出相应数据。
在这里插入图片描述
建表语句

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,
`gpa` float);
INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学',3.4);
INSERT INTO user_profile VALUES(2,3214,'male',23,'复旦大学',4.0);
INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学',3.2);
INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学',3.6);
INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学',3.8);
INSERT INTO user_profile VALUES(6,2131,'male',28,'北京师范大学',3.3);

第七题答案

SELECT device_id,age FROM user_profile ORDER BY age ASC; 结尾加 ASC是升序,不写也行因为默认升序。 
#SELECT device_id,age FROM user_profile ORDER BY age desc; 结尾加 desc 是降序。

在这里插入图片描述
第八题答案

SELECT device_id,gpa,age from user_profile order by gpa,age;默认以升序排列
SELECT device_id,gpa,age from user_profile order by gpa,age asc;
SELECT device_id,gpa,age from user_profile order by gpa asc,age asc;

在这里插入图片描述
基础操作符
9、现在运营想要筛选出所有北京大学的学生进行用户调研,请你从用户信息表中取出满足条件的数据,结果返回设备id和学校。

10、现在运营想要针对24岁以上的用户开展分析,请你取出满足条件的设备ID、性别、年龄、学校。
用户信息表:user_profile

11、现在运营想要针对20岁及以上且23岁及以下的用户开展分析,请你取出满足条件的设备ID、性别、年龄。

12、现在运营想要查看除复旦大学以外的所有用户明细,请你取出相应数据

13、现在运营想要对用户的年龄分布开展分析,在分析时想要剔除没有获取到年龄的用户,请你取出所有年龄值不为空的用户的设备ID,性别,年龄,学校的信息。
在这里插入图片描述
建表语句

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 device_id,university from user_profile where university='北京大学';
#更具需求,首先知道要北京大学的学生,所有用条件university='北京大学'
#然后结果返回设备id和学校, 查询的字段是device_id,university

在这里插入图片描述
第十题答案

select device_id,gender,age ,university from user_profile where age >= 24;

在这里插入图片描述

第十一题答案

SELECT device_id, gender, age
FROM user_profile
WHERE age>=20&&age<=23;
 
SELECT device_id, gender, age
FROM user_profile
WHERE age>=20 AND age<=23;
 
SELECT device_id, gender, age
FROM user_profile
WHERE age BETWEEN 20 AND 23;

在这里插入图片描述
第一十二题答案

SELECT device_id, gender,age,university FROM user_profile WHERE university NOT IN ("复旦大学")

select device_id, gender, age, university from user_profile where university != '复旦大学'

在这里插入图片描述
第十三题答案

SELECT device_id,gender,age,university FROM user_profile  WHERE age IS NOT NUL

高级操作符
14、现在运营想要找到男性且GPA在3.5以上(不包括3.5)的用户进行调研,请你取出相关数据。

15、现在运营想要找到学校为北大或GPA在3.7以上(不包括3.7)的用户进行调研,请你取出相关数据(使用OR实现)

16、现在运营想要找到学校为北大、复旦和山大的同学进行调研,请你取出相关数据。

在这里插入图片描述

第十四题答案

SELECT device_id,gender,age,university,gpa FROM user_profile WHERE gender = 'male' AND gpa > 3.5

在这里插入图片描述

第十五题答案

SELECT device_id,gender,age,university,gpa FROM user_profile
WHERE university='北京大学' OR gpa > 3.7

在这里插入图片描述

第十六题答案

select device_id,gender,age,university,gpa from user_profile
where university in('北京大学','复旦大学','山东大学');

在这里插入图片描述
17、现在运营想要找到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 
--虽然短,但是执行用时长 
select device_id, gender, age, university, gpa from user_profile where device_id in (select device_id from user_profile where gpa>3.5 and university='山东大学') or device_id in (select device_id from user_profile where gpa>3.8 and university='复旦大学') 
--复杂的写法,子查询的方式 
--运行时间短

在这里插入图片描述
18、现在运营想查看所有大学中带有北京的用户的信息,请你取出相应数据。
在这里插入图片描述
第十八题答案

SELECT device_id,age,university FROM user_profile
WHERE university LIKE '%北京%'

在这里插入图片描述

字符匹配
一般形式为:
列名 [NOT ] LIKE
匹配串中可包含如下四种通配符:
:匹配任意一个字符;
%:匹配0个或多个字符;
[ ]:匹配[ ]中的任意一个字符(若要比较的字符是连续的,则可以用连字符“-”表 达 );
[^ ]:不匹配[ ]中的任意一个字符。
例23.查询学生表中姓‘张’的学生的详细信息。
SELECT * FROM 学生表 WHERE 姓名 LIKE ‘张%’
例24.查询姓“张”且名字是3个字的学生姓名。
SELECT * FROM 学生表 WHERE 姓名 LIKE '张
_’
如果把姓名列的类型改为nchar(20),在SQL Server 2012中执行没有结果。原因是姓名列的类型是char(20),当姓名少于20个汉字时,系统在存储这些数据时自动在后边补空格,空格作为一个字符,也参加LIKE的比较。可以用rtrim()去掉右空格。
SELECT * FROM 学生表 WHERE rtrim(姓名) LIKE ‘张__’
例25.查询学生表中姓‘张’、姓‘李’和姓‘刘’的学生的情况。
SELECT * FROM 学生表 WHERE 姓名 LIKE '[张李刘]%’
例26.查询学生表表中名字的第2个字为“小”或“大”的学生的姓名和学号。
SELECT 姓名,学号 FROM 学生表 WHERE 姓名 LIKE ‘_[小大]%’
例27.查询学生表中所有不姓“刘”的学生。
SELECT 姓名 FROM 学生 WHERE 姓名 NOT LIKE '刘%’
例28.从学生表表中查询学号的最后一位不是2、3、5的学生信息。
SELECT * FROM 学生表 WHERE 学号 LIKE ‘%[^235]’

高级查询

计算函数
19、运营想要知道复旦大学学生gpa最高值是多少,请你取出相应数据
在这里插入图片描述

第十九题答案

方法1
# select max(gpa) as gpa
# from user_profile
# where university='复旦大学';
 
# 方法2
select gpa
from user_profile
where university='复旦大学'
order by gpa desc limit 1

在这里插入图片描述
20、现在运营想要看一下男性用户有多少人以及他们的平均gpa是多少,用以辅助设计相关活动,请你取出相应数据。

在这里插入图片描述

第二十题答案

#问题分解:
      #限定条件为 男性用户;
      #有多少人,明显是计数,count函数;
      #平均gpa,求平均值用avg函数;
select
  count(gender) as male_num,
  round(avg(gpa), 1) as avg_gpa
from user_profile where gender="male";

在这里插入图片描述
分组查询
21、现在运营想要对每个学校不同性别的用户活跃情况和发帖数量进行分析,请分别计算出每个学校每种性别的用户数、30天内平均活跃天数和平均发帖数量。

22、现在运营想查看每个学校用户的平均发贴和回帖情况,寻找低活跃度学校进行重点运营,请取出平均发贴数低于5的学校或平均回帖数小于20的学校。

23、现在运营想要查看不同大学的用户平均发帖情况,并期望结果按照平均发帖情况进行升序排列,请你取出相应数据。
在这里插入图片描述

第二十一题答案

select 
    gender, university,
    count(device_id) as user_num,
    avg(active_days_within_30) as avg_active_days,
    avg(question_cnt) as avg_question_cnt
from user_profile
group by gender, university

在这里插入图片描述

第二十二题答案

select
    university,
    avg(question_cnt) as avg_question_cnt,
    avg(answer_cnt) as avg_answer_cnt
from user_profile
group by university
having avg_question_cnt<5 or avg_answer_cnt<20

在这里插入图片描述
第二十三题答案

select university,
    avg(question_cnt) as avg_question_cnt
from user_profile
group by university
order by avg_question_cnt

在这里插入图片描述

多表查询

24、现在运营想要查看所有来自浙江大学的用户题目回答明细情况,请你取出相应数据

在这里插入图片描述

在这里插入图片描述

第二十四题答案

select qpd.device_id, qpd.question_id, qpd.result
from question_practice_detail as qpd
inner join user_profile as up
on up.device_id=qpd.device_id and up.university='浙江大学'
order by question_id

或者

select device_id, question_id, result
from question_practice_detail
where device_id in (
    select device_id from user_profile
    where university='浙江大学'
)
order by question_id

在这里插入图片描述
25、运营想要了解每个学校答过题的用户平均答题数量情况,请你取出数据。

在这里插入图片描述
在这里插入图片描述

第二十五题答案

select university,
    count(question_id) / count(distinct qpd.device_id) as avg_answer_cnt
from question_practice_detail as qpd
inner join user_profile as up
on qpd.device_id=up.device_id
group by university

在这里插入图片描述

26、运营想要计算一些参加了答题的不同学校、不同难度的用户平均答题量,请你写SQL取出相应数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二十六题答案

select 
    university,
    difficult_level,
    round(count(qpd.question_id) / count(distinct qpd.device_id), 4) as avg_answer_cnt
from question_practice_detail as qpd

left join user_profile as up
on up.device_id=qpd.device_id

left join question_detail as qd
on qd.question_id=qpd.question_id

group by university, difficult_level

在这里插入图片描述

  • 14
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程ID

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值