SQL面试题精选:助你轻松拿Offer
创作时间:
作者:
@小白创作中心
SQL面试题精选:助你轻松拿Offer
引用
CSDN
等
7
来源
1.
https://blog.csdn.net/weixin_38037405/article/details/136891835
2.
https://blog.csdn.net/m0_53300365/article/details/139102278
3.
https://m.blog.csdn.net/2401_85405886/article/details/140204922
4.
https://blog.csdn.net/weixin_44996457/article/details/137829741
5.
https://m.blog.csdn.net/m0_61549591/article/details/136674699
6.
https://m.bjpowernode.com/sqlmst/sqldbcx.html
7.
https://cloud.tencent.com/developer/article/2438210
SQL作为数据管理和分析的核心工具,在各类技术面试中占据重要地位。无论是数据分析师、数据工程师还是软件开发工程师,掌握SQL都是必备技能。本文精选了一系列SQL面试题,从基础查询到复杂分析,帮助求职者全面准备SQL面试。
01
基础查询
单表查询
题目1:查询所有学生的信息
表结构:学生表(Student)
- SId:学生ID
- Sname:学生姓名
- Sage:出生日期
- Ssex:性别
解题思路:这是一个最基础的查询,直接使用SELECT语句即可。
SELECT * FROM Student;
简单聚合
题目2:查询每个部门的平均绩效
表结构:绩效表(Performance)
- a:年份
- b:部门
- c:绩效得分
解题思路:使用GROUP BY对部门进行分组,然后用AVG计算平均值。
SELECT b, AVG(c) as avg_performance
FROM Performance
GROUP BY b;
02
多表连接
内连接
题目3:查询每个学生的选课信息
表结构:
- 学生表(Student):SId, Sname
- 成绩表(SC):SId, CID, score
- 课程表(Course):CID, Cname
解题思路:使用INNER JOIN连接三个表,获取学生姓名和对应的课程名称及成绩。
SELECT s.Sname, c.Cname, sc.score
FROM Student s
INNER JOIN SC sc ON s.SId = sc.SId
INNER JOIN Course c ON sc.CID = c.CID;
外连接
题目4:查询所有部门及其员工数量
表结构:
- 员工表(Employees):employee_id, department_id
- 部门表(Departments):department_id, department_name
解题思路:使用LEFT JOIN确保所有部门都被列出,即使没有员工的部门也要显示。
SELECT d.department_name, COUNT(e.employee_id) as num_employees
FROM Departments d
LEFT JOIN Employees e ON d.department_id = e.department_id
GROUP BY d.department_name;
03
窗口函数
排名问题
题目5:查询每个部门工资排名前3的员工
表结构:员工表(Employees)
- employee_id
- department_id
- salary
解题思路:使用窗口函数ROW_NUMBER()进行分组排名。
SELECT employee_id, department_id, salary
FROM (
SELECT employee_id, department_id, salary,
ROW_NUMBER() OVER(PARTITION BY department_id ORDER BY salary DESC) as rn
FROM Employees
) tmp
WHERE rn <= 3;
累计计算
题目6:计算用户每月的累计访问次数
表结构:用户访问表(UserVisits)
- userid
- month
- visits
解题思路:使用窗口函数SUM()进行累计计算。
SELECT userid, month, visits,
SUM(visits) OVER(PARTITION BY userid ORDER BY month) as cumulative_visits
FROM UserVisits;
04
综合应用
题目7:查找连续7天登录的用户
表结构:登录表(Logins)
- Uid
- dt
- login_status(1表示登录成功,0表示异常)
解题思路:使用窗口函数LAG()检查连续登录情况。
WITH LoginStatus AS (
SELECT Uid, dt,
CASE
WHEN login_status = 1 AND
LAG(login_status, 1) OVER(PARTITION BY Uid ORDER BY dt) = 1 AND
LAG(login_status, 2) OVER(PARTITION BY Uid ORDER BY dt) = 1 AND
LAG(login_status, 3) OVER(PARTITION BY Uid ORDER BY dt) = 1 AND
LAG(login_status, 4) OVER(PARTITION BY Uid ORDER BY dt) = 1 AND
LAG(login_status, 5) OVER(PARTITION BY Uid ORDER BY dt) = 1 AND
LAG(login_status, 6) OVER(PARTITION BY Uid ORDER BY dt) = 1
THEN 1
ELSE 0
END as is_seven_days
FROM Logins
)
SELECT Uid, COUNT(DISTINCT dt) as num_seven_days
FROM LoginStatus
WHERE is_seven_days = 1
GROUP BY Uid;
通过以上题目,我们可以看到SQL面试题从基础查询到复杂分析的难度递进。掌握这些题目不仅能帮助你应对面试,更能提升你的SQL实战能力。建议在学习过程中多加练习,理解每个语句的执行逻辑,这样才能在面试中游刃有余。
最后,祝大家面试顺利,拿到心仪的Offer!
热门推荐
孩子肺炎咳嗽厉害怎么缓解
银发族鼻腔三大问题!打鼾、鼻塞、嗅觉差如何改善?
硬质合金带锯条切割钛合金的精细化操作
通话时间:何时拨打更有效?
当归党参黄芪与什么搭配不易上火
山东郓城:种上良品西瓜 收获甜蜜产业
汽车胎压:被忽视的行车安全关键
仅需一件健身器材,4个动作,教你全方位的锻炼手臂肌肉
有源、半有源和无源RFID标签的区别详解
心率慢吃什么食物好
《越过山丘》这首歌表达了什么情感?歌词解析
被辞退N+1怎么算?一文详解经济补偿计算方式
如何用公积金实现购房梦想?使用公积金购房有哪些具体要求?
粤菜肉类腌制核心技术:从清代《随园食单》到现代创新
怎么验收毛坯房质量,避免入住后烦恼
毛坯房验房标准
科目三追尾现场视频播放的法律分析及实务探讨
麻省理工学院开设音乐技术与计算研究生项目
内热外寒有效治疗方法是什么
新华书店:从书页到屏幕的文化破壁者
觉得“喘不上气”,是哪里出了问题?
崇祯死前,左良玉拥兵数十万却不救援,孔尚任:他是大明忠臣良将
大学一个月多少生活费合适?怎么分配生活费合理?
慢性咽炎反复发作怎么治疗
曹操的情感选择:历史背后的复杂因素
自动挡车辆如何跟车行驶?这种驾驶技巧对行车安全有什么重要性?
肉眼可见的星星有6000多颗,它们都在银河系之内吗?
鄂州乔街持续火爆的背后:独特的浪漫三国主题,深度的游客情感链接
【悦读】唐•刘禹锡《乌衣巷》赏析及同步练习
SKU是什么意思?一文读懂库存管理核心概念