今天就给大家总结一些经典的SQL面试题。
首先熟悉一下数据库相关专业名词, 比如DB、 DBMS和SQL,这些概念常常让人傻傻分不清楚。
数据库(DataBase)是长期存储在计算机内、有组织的、统一管理的相关数据的集合。
数据库管理系统(DataBase Management System)是用于管理数据库的软件( Oracle/DB2/MySQL/sql server等), 它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。
SQL是一种结构化查询语言(Structure Query Language),它是国际标准化组织采纳的标准数据库语言。
下面进入正题,给大家分享一套互联网公司数据库笔试题,希望对你有所帮助。
题目背景:
以下是4个表结构情况,提供了脱敏数据。其中学生表有8条记录,课程表有3条记录,教师表有3条记录,成绩表有18条记录。
公司使用Mysql数据库,明确表结构间的关系后,请完成以下题目。解题有不同方法,答案仅供参考。
1. 查询学生编号为01的学生成绩总分、平均分、最高分、最低分
select s_id,sum(score),avg(score),max(score),min(score) from sc where s_id=“01”;
2. 查询名字中含有“风”字的学生信息
select * from stu where s_name like “%风%”;
3. 查询每位同学的平均成绩,并按分数降序、学生编号升序排列
select s_id,avg(score) as 分数 from sc
group by s_id
order by 分数 desc,s_id;
4. 查询至少两门课程及格的学生学号
select s_id from sc
where score>=60
group by s_id
having count(*)>1;
5. 查询仅学过编号“01”和“02”课程的学生编号
select s_id from sc
group by s_id
having sum(c_id=“01”)=1 and sum(c_id=“02”)=1 and count(c_id)=2 ;
6. 每门课程的第二名和第三名
#方法1
select * from sc sc1 where
(select sum(score>sc1.score) from sc where c_id=sc1.c_id) in(1,2);
#方法2
使用开窗函数
select * from
(select *,dense_rank() over(partition by c_id order by score desc) 排名 from sc) t
where 排名<=2;
7. 查询没学过“张三”老师课程同学的信息
select stu.* from stu
left join sc on stu.s_id=sc.s_id
left join co on sc.c_id=co.c_id
left join te on co.t_id=te.t_id
group by stu.s_id
having ifnull(group_concat(t_name),0) not like “%张三%”;
8. 查询“01”课程比“02”课程分数高的学生信息及课程分数
select stu.*,
sum((c_id=“01”)*score) 01分数,
sum((c_id=“02”)score) 02分数
from stu left join sc on stu.s_id=sc.s_id
group by stu.s_id
having (01分数>02分数) * (sum(c_id in (“01”,“02”))=2);
9. 查询学生的总成绩并进行排名
select s_id,sum(score) 总成绩,
dense_rank() over(order by sum(score) desc) 排名 #开窗函数
from sc
group by s_id;
以上题目你都会吗?
简单总结下:
作为一名数据分析师,玩转SQL查询语言至关重要!重点掌握知识点有:SQL查询语法,多表连接逻辑和查询,常用函数等。