常见的sql面试题

article/2025/10/3 14:28:16

本章是SQL面试题的汇总,之后还会不断更新,文章的思维导图如下:
在这里插入图片描述
1.SQL初级查询
单表查询

-- 查询学生表中有几名学生的信息.显示学号
select distinct 学号  from student;

在这里插入图片描述
查询条件

-- 查询学生表中性别为女的学生所有信息
SELECT * FROM student WHERE 性别='女';

在这里插入图片描述
结果排序

-- 查询成绩表中学生所有成绩,按照课程号升序,成绩降序排列
SELECT * FROM score 
ORDER BY 课程号 ASC,成绩 DESC;

在这里插入图片描述
限定数量

-- 查询成绩表中学生所有成绩,按照课程号升序,成绩降序排列,显示前5条数据
SELECT * FROM score 
ORDER BY 课程号 ASC,成绩 DESC
LIMIT 5;

在这里插入图片描述

-- 查询成绩表中学生所有成绩,返回成绩第二学生成绩信息
SELECT * FROM score
ORDER BY 成绩 DESC
LIMIT 1 OFFSET 1;

在这里插入图片描述
case表达式

-- 对各课程的成绩按照[100-85(含)]、[85-70(含)]、[70-60(含)]、[60以下]分段,并统计各分段数人数和课程名
/*
定义条件:成绩在100-85(含)为[100-85(含)]段,在85-70(含)为[85-70(含)]段,在70-60(含)为[70-60(含)]段,小于60就是[60以下]分段;
把成绩表score和课程表course交叉联结(右联结),显示课程号、课程名、和分数段;
按课程号、课程名进行分组,对分组结果的人数按照上上述的逻辑条件计数;
*/
SELECT a.课程号,b.课程名称,
SUM(CASE WHEN 成绩 BETWEEN 85 AND 100 THEN 1 ELSE 0 END)AS '100-80(含)',
SUM(CASE WHEN 成绩 BETWEEN 70 AND 85 THEN 1 ELSE 0 END)AS '85-70(含)',
SUM(CASE WHEN 成绩 BETWEEN 60 AND 70 THEN 1 ELSE 0 END)AS '70-60(含)',
SUM(CASE WHEN 成绩 <60 THEN 1 ELSE 0 END)AS '60以下'
FROM score AS a RIGHT JOIN course AS b
ON a.课程号=b.课程号
GROUP BY a.课程号,b.课程名称;

在这里插入图片描述
分组汇总

-- 对每门课程进行分组,计算每门课程有几名学生
SELECT 课程号,COUNT(学号) FROM score GROUP BY 课程号

在这里插入图片描述
SQL高级查询
多表联结

# 查询出每门课程的及格人数和不及格人数
/*
定义条件:成绩>=60分及格,成绩<60分不及格;
按课程号进行分组,对分组结果的人数按照上一步的逻辑条件计数;
*/
SELECT 课程号,
SUM(CASE WHEN 成绩>=60 THEN 1
ELSE 0
END)AS 及格人数,
SUM(CASE WHEN 成绩<60 THEN 1
ELSE 0
END)AS 不及格人数
FROM score
GROUP BY 课程号;

在这里插入图片描述
集合运算

-- 把学生表student和成绩表score交叉联结,显示所有成绩和学生
/*① 使用左联结 left join取绿色部分面积;
②使用右联结right union 条件为左列名为null的部分面积;
③ 使用union all 相加*/
SELECT a.学号,a.姓名,b.课程号,b.成绩 
FROM student as a LEFT JOIN score as b 
ON a.学号=b.学号
UNION ALL
SELECT a.学号,a.姓名,b.课程号,b.成绩 
FROM student as a RIGHT JOIN score as b 
ON a.学号=b.学号 
WHERE a.学号 IS NULL;

在这里插入图片描述
子查询

-- 每一科成绩都大于该科平均成绩学生的学号和成绩
/*
大白话:对每一科课程分组,对分组结果计算平均成绩;对每一科对应的学生的成绩比较,大于该科平均成绩的便符合条件
SELECT 课程号,AVG(成绩) FROM score GROUP BY 课程号;
SELECT 学号,课程号,成绩 FROM score WHERE 成绩> <关联子查询>;
*/
SELECT 学号,课程号,成绩 FROM score as s1 WHERE 成绩 > 
(SELECT AVG(成绩) FROM score as s2 WHERE s1.课程号=s2.课程号 GROUP BY 课程号);

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

-- 查询大于平均成绩学生的学号和成绩
/*大白话:得出平均成绩;成绩大于平均成绩就符合条件,对符合条件的学号和成绩汇总;
SELECT AVG(成绩) FROM score;
SELECT 学号,成绩 FROM score WHERE 成绩 > <标量子查询>;
*/
SELECT 学号,成绩 FROM score WHERE 成绩 > (SELECT AVG(成绩) FROM score);

在这里插入图片描述
EXISTS运算符用于指定子查询以测试行的存在.EXISTS运算符在找到行后立即终止查询处理,因此,可以利用EXISTS运算符的此功能来提高查询性能。

-- 查找所有选修了0001号课程的课程的学生,并显示他们的姓名
SELECT 姓名 FROM student WHERE EXISTS(SELECT * FROM score WHERE 学号=student.学号 AND 课程号='0001');

在这里插入图片描述
窗口函数
查找每个班级成绩最高的2个学生成绩数据

拆分两步:

1.先按班级分组,并按照成绩降序排列,查看各班成绩排名:

/*
先按班级分组,并按照成绩降序排列
SELECT *, row_number() over ( PARTITION BY 班级 ORDER BY 成绩 DESC) AS row_num  FROM score_new;
*/
SELECT *, 
row_number() over ( PARTITION BY 班级 ORDER BY 成绩 DESC) AS row_num  
FROM score_new;

2.只要我们筛选row_num值<=2即可,我们可以用子查询:

SELECT * 
FROM
(SELECT *, 
row_number() over ( PARTITION BY 班级 ORDER BY 成绩 DESC) AS row_num  
FROM score_new) AS a
WHERE row_num <=2;

3.设计与开发
创建视图

-- 创建视图
CREATE VIEW 按性别汇总(性别,人数) AS SELECT 性别,COUNT(*) FROM student GROUP BY 性别;

2.牛客网SQL实战题目练习
1.查找最晚入职员工的所有信息
【知识点】关联子查询,两次查询都要在employees中获取数据,通过入职时间和最大入职时间是否一致来寻找符合条件的员工所有信息;

--思路:直接使用聚合函数max()来做判断
select *
from employees
where hire_date >=(select max(hire_date) from employees);

2.查找入职员工时间排名倒数第三的员工所有信息
【知识点】关联子查询,同样两次查询(查员工信息、查时间)都要在employees中获取数据;

注意:对时间排序取倒数第三,需要对时间使用distinct去掉重复值;倒数第三需要跳过2条数据,读取1条数据;我们使用limit y offset x;也可以使用limit x,y 跳过x条数据读取y条数据;

--这里考察的是limit函数的用法
/*
① select * from table limit 2,1;                //含义是跳过2条取出1条数据,limit后面是从第2条开始读,读取1条信息,即读取第3条数据② select * from table limit 2 offset 1;     //含义是从第1条(不包括)数据开始取出2条数据,limit后面跟的是2条数据,offset后面是从第1条开始读取,即读取第2,3条
*/
select *
from employees
where hire_date = (select hire_date from employees order by hire_date desc limit 2,1)

3.查找各个部门当前(to_date=‘9999-01-01’)领导当前薪水详情以及其对应部门编号dept_no
【知识点】多表查询(内联结)

--这里有个小坑,如果把dept_manager当做主表来写,就会不通过
select s.*,d.dept_no
from salaries s 
inner join dept_manager d
on s.emp_no = d.emp_no
where d.to_date = '9999-01-01' and s.to_date='9999-01-01';

4,查找所有已经分配部门的员工的last_name和first_name以及dept_no
【知识点】多表查询(内联结)

select e.last_name,e.first_name,d.dept_no
from employees e
inner join dept_emp d
on e.emp_no = d.emp_no
where d.dept_no is not null;

5.查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括展示没有分配具体部门的员工

【知识点】多表查询(左联结)

select e.last_name,e.first_name,d.dept_no
from employees e
left join dept_emp d
on e.emp_no = d.emp_no

http://chatgpt.dhexx.cn/article/s1gHL9BU.shtml

相关文章

美团/得物sql面试题

解题思路: 1.找出uid不同的但是买过pro_id相同的商品的用户 [自连接] selecta.uid,b.pro_id fromtb_order ajoin tb_order bon a.pro_id b.pro_id where a.uid <> b.uid -- 找出uid不同的但是pro_id相同的商品2.对uid和pro_id进行分组 selecta.uid,a.pro_id fromtb…

Spark SQL面试题

1.RDD DataFrame DataSet的区别 &#xff08;1&#xff09; 三者之间的关系 DataFrame是特殊的RDD(它相当于RDDschema&#xff0c;即RDD表信息)&#xff0c;可以将他看成数据库中的一张数据表&#xff0c;但是只知道这个"表"中的各个字段&#xff0c;不知道各个字段…

SQL常见面试题

SQL常见面试题关系型数据库&#xff08;SQL&#xff09;非关系型数据库&#xff08;NoSQL&#xff09;数据库三大范式主键与外键CHAR与VRCHAR数据类型临时表数据库函数、触发过程与存储器 SQL语句SQL语言分类DROP、TRUNCATE、DELETE的区别sum、count(\*)、count(1)、count(colu…

常见的SQL面试题:经典50例

SQL基础知识整理 select 查询结果&#xff0c;如: [学号,平均成绩&#xff1a;组函数avg(成绩)] from 从哪张表中查找数据&#xff0c;如:[涉及到成绩&#xff1a;成绩表score] where 查询条件&#xff0c;如:[b.课程号0003 and b.成绩>80] group by 分组&#xff0c;如:…

5个必考的大厂SQL面试题

学Python的同学&#xff0c;SQL也一定要学习&#xff0c;SQL几乎是每个数据岗的必备题目&#xff0c;下面分享几个常见的大厂SQL习题。 &#xff08;1&#xff09;找出连续7天登陆&#xff0c;连续30天登陆的用户&#xff08;小红书笔试&#xff0c;电信云面试&#xff09;&am…

7 大开源数据库利弊全对比

1、CUBRID CUBRID 是一个很好的免费开源选择&#xff0c;专门针对 Web 应用程序进行优化&#xff0c;当复杂的 Web 服务需要处理大量数据并生成巨大的并发请求时&#xff0c;CUBRID 非常有用。这个解决方案是用 C 写的。 优点&#xff1a; 多粒度锁定 在线备份 用于开发语言…

还在用Navicat?这款开源的数据库管理工具界面更炫酷!

数据库管理工具&#xff0c;是后端程序员使用频率非常高的的工具。Navicat、DataGrip虽然很好用&#xff0c;但都是收费的。最近在逛Github的时候&#xff0c;无意间发现了一款开源的数据库管理工具Beekeeper Studio&#xff0c;界面非常炫酷推荐给大家&#xff01; Beekeeper…

开源数据库管理系统现在比商业产品更受欢迎

原文链接&#xff1a;https://db-engines.com/en/blog_post/86 2021年1月13日 作者&#xff1a;马蒂亚斯盖尔曼&#xff08;Matthias Gelbmann&#xff09; Matthias Gelbmann是奥地利维也纳Solid IT联合创始人&#xff0c;董事总经理兼顾问。 Matthias Gelbmann在维也纳学习了…

你了解世界上功能最强大的开源数据库吗?

如果不是领导强制要求&#xff0c;可能根本不会留意到这款号称世界上功能最强大的开源数据库——PostgreSQL。如果你不读这篇文章&#xff0c;或许也会错过一个跃跃欲试想挤进前三的优秀数据库。 为了能够熟练运用&#xff0c;特意买书研究&#xff0c;发现这款数据库还真有点…

开源数据库列表

转载于&#xff1a;http://database.csdn.net/subject/databaseopen.htm 编辑导语 开源数据库最初的诞生和发展大都依靠自由软件开发者&#xff0c;但是&#xff0c;现在越来越多的IT公司开始把触角伸向了开源数据库。而早期投身于其中的IT厂商早已获利&#xff0c;比如Sleepy…

TuGraph 开源数据库体验

TuGraph 开源数据库体验 文章目录 TuGraph 开源数据库体验1. 简单介绍2. 可视化界面体验&#xff1a;查询界面&#xff1a;数据建模&#xff1a;数据导入&#xff1a; 3. 体验心得&#xff1a; 1. 简单介绍 TuGraph 是蚂蚁集团自主研发的大规模图计算系统&#xff0c;提供图数…

数据库与开源的未来

大家好&#xff0c;社区的小伙伴可能已经发现CnosDB已经全面拥抱Rust。我们一直高度关注行业趋势的发展&#xff0c;拥抱新兴的语言和前沿的技术。本期Jesse就想跟大家聊聊数据库与开源的未来。 本文仅代表个人观点&#xff0c;如有偏颇之处&#xff0c;还请海涵&#xff5e; …

做了7年开源数据库开发,我学到了什么?

作者 | PHILIP OTOOLE&#xff0c;已获作者授权 译者 | 弯月 责编 | 欧阳姝黎 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 2016年4月9日&#xff0c;第一版rqlite&#xff08;https://github.com/rqlite/rqlite/releases/tag/v1.0&#xff09;正式发布&a…

【数据库】什么是 PostgreSQL?开源数据库系统

文章目录 前言什么是 PostgreSQL&#xff1f;PostgreSQL 中的 SQL服务器管理接口 PostgreSQL 用途通用 OLTP&#xff1a;联合中心&#xff1a;地理空间&#xff1a;LAPP 堆栈&#xff1a; 使用 PostgreSQL 有什么好处&#xff1f;开源许可证&#xff1a;易于扩展&#xff1a;可…

这款免费开源的数据库工具,支持所有主流数据库!

Java技术栈 www.javastack.cn 关注阅读更多优质文章 DBeaver 是一个基于 Java 开发&#xff0c;免费开源的通用数据库管理和开发工具&#xff0c;使用非常友好的 ASL 协议。可以通过官方网站或者 Github 进行下载。 由于 DBeaver 基于 Java 开发&#xff0c;可以运行在各种操作…

开源数据库管理系统DBeaver

简介 DBeaver dbeaver是免费和开源&#xff08;GPL&#xff09;为开发人员和数据库管理员通用数据库工具。 易用性是该项目的主要目标&#xff0c;是经过精心设计和开发的数据库管理工具。免费、跨平台、基于开源框架和允许各种扩展写作&#xff08;插件&#xff09;。 它支持任…

开源数据库的国际化思考与实践

整理 | 小雨青年 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 在全球开源技术掌门人高峰论坛上&#xff0c;PingCAP 联合创始人兼CTO 黄东旭分享了《开源数据库的国际化思考与实践》。 开源已死&#xff1f;不&#xff0c;还差得远 可能因为TiDB 是开源的&a…

一个比 ClickHouse 还快的开源数据库

开源分析数据库 ClickHouse 以快著称&#xff0c;真的如此吗&#xff1f;我们通过对比测试来验证一下。 ClickHouse vs Oracle 先用 ClickHouse&#xff08;简称 CH&#xff09;、Oracle 数据库&#xff08;简称 ORA&#xff09;一起在相同的软硬件环境下做对比测试。测试基准使…

Java开源数据库引擎,数据库计算封闭性的一站式解决方案

目录 前言引入一、数据库封闭性带来的问题&#xff1f;问题1: ETL变成ELT甚至LETETL&#xff1a;ELT&#xff1a; 问题2: 中间表带来的资源消耗和耦合问题3: 多样性数据源问题4: 存储过程带来的安全和耦合问题问题5: 大数据性能导致的尴尬 二、开放的SPL解决方式多样源直接计算…

比较适合物联网的开源数据库

物联网产生大量的数据&#xff0c;包括流数据、时间序列数据、RFID数据、传感数据等。要有效地管理这些数据&#xff0c;就需要使用数据库。物联网数据的本质需要一种不同类型的数据库。以下是一些数据库&#xff0c;当与物联网一起使用时&#xff0c;会给出非常好的结果。 物联…