45道SQL题目陆续更新
文章目录
- 学习视频
- 配置环境
- 第一天
- 内连接 + 外连接
- 第二天
- 第三天
学习视频
学习视频
配置环境
- 四张表

- 配置四张表的sql语句
#创建发据库
create database frogdata charset=utf8;use frogdata;# 学生表 Student
create table Student(
SId varchar(10),
Sname varchar(10),
Sage datetime,
Ssex varchar(10));# 教师表 Teacher
create table Teacher(
TId varchar(10),
Tname varchar(10));# 科目表 Course
create table Course(
CID varchar(10),
Cname nvarchar(10),
TId varchar(10)
);# 成绩表 SC
create table SC(
SId varchar(10),
CId varchar(10),
score decimal(18,1));# 学生表
insert into Student values('01','赵雷','1990-01-01','男');
insert into Student values('02','钱电','1990-12-21','男');
insert into Student values('03','孙风','1990-05-20','男');
insert into Student values('04' ,'李云','1990-08-06','男');
insert into Student values('05','周梅','1991-12-01','女');
insert into Student values('06','吴兰','1992-03-01','女');
insert into Student values('07','郑竹','1999-07-01','女');
insert into Student values('09','张三','2017-12-20','女');
insert into Student values('10','李四','2017-12-25','女');
insert into Student values('11','李四','2017-12-30','女');
insert into Student values('12','赵六','2017-01-01','女');
insert into Student values('13','孙七','2018-01-01','女');# 教师表
insert into Teacher values('01','张三');
insert into Teacher values('02','李四');
insert into Teacher values('03','王五');# 科目表Course
insert into Course values('01','语文','02');
insert into Course values('02','数学','01');
insert into Course values('03','英语','03');# 成绩表SC
insert into SC values('01', '01', 80),('01', '02', 90),('01', '03', 99),('02', '01', 70),('02', '02', 60),('02', '03', 80),('03', '01', 80),('03', '02', 80),('03', '03', 80),('04', '01', 50),('04', '02', 30),('04', '03', 20),('05', '01', 76),('05', '02', 87),('06', '01', 31),('06', '03', 34),('07', '02', 89),('07', '03', 98);
- 配置好的环境




第一天
- from 后面紧接的基础表会放在开头
- on 后面放与基础表的条件
1-1 查询01课程比02课程成绩高的学生信息和课程分数
# 第一步:通过Sid主键连接学生表和成绩表
select* from Student a inner join SC b on a.SId = b.SId;# 第二步:进行同一学生不同成绩比较,利用Sid相同,Cid不同进行关联
select* from Student a
inner join SC b on a.SId = b.SId inner join SC c on a.SId = c.SId
and b.CId = '01' and c.CId = '02';# 最后:回到题目,利用where比较分数即可
select* from Student a
inner join SC b on a.SId = b.SId inner join SC c on a.SId = c.SId
and b.CId = '01' and c.CId = '02'
where b.score > c.score;
1-2 查询存在 01 课程但可能不存在 02 课程的情况(不存在的时候显示为null)
# 第一步:实现1名学生的2门课程在同一行,左边的Cid等于 01 课程, 右边Cid等于 02 课程
select * from SC a
inner join SC b on a.SId = b.SId
where a.cid = '01' and b.CId = '02';# 最后:需要用到left JOIN,实现1个学生两个课程在同一行,左边 01 课程,右边 02 课程
# and b.CId = '02'; 表示 a 这个表只显示01课程若无则显示null
# where a.CId = '01'; 这是一个显示条件,若无就不显示
select * from SC a
left join SC b on a.SId = b.SId
and a.CId = '01'and b.CId = '02'
where a.CId = '01';
1-3 查询不存在 01 课程但存在 02 课程的情况
# 第一步:筛选出存在 01 课程的学生
select sid from SC where cid = '01';
# 最后:使用not in 筛选出不存在 01 课程,但是存在 02 课程的学生
select* from SC
where sid not in(select sid from SC where cid = '01') and cid = '02';
补充知识点:
内连接 + 外连接
从网上偷的图:





sql执行顺序
from->on->join->where->group by->having+聚合函数->select->order by->limit
- on的优先级高于join,那就说明在联表前,会对表提前进行过滤,形成一张更小的临时表,然后再进行join联表,接着就对连表的结果进行where过滤
- 在使用内连接的情况下on和where差别不大,
- 但是使用外连接的时候就会有差距了,那么来看看join是怎么执行的,我们的优化器首先会选中一个表作为驱动表,然后我们的执行器从存储引擎中取出这个表中的所有数据,这个表中的每一行数据会去另一个表进行连表操作,如果我们能提前用on条件去缩小我们的这张驱动表,这样连表的速度就会更快。
第二天
2-1 查询平均成绩大于等于60分的同学的学生编号,学生姓名,平均成绩。
提示:要求查询平均成绩大于等于60分的同学信息,首先确定是在成绩表里面找,找到了这样的同学后,是不是用sid去学生信息表里面关联就可以得到学生的姓名信息,在这里的关键就是找sid。
select a.sid,a.Sname,b.avg_score
from student as a
inner join
(select sid,avg(score) as avg_score from SC
group by SId having avg_score>=60) as b
on a.sid = b.sid;
- 子语句可以查询成绩表中平均成绩大于60的sid
知识点补充:
- group by 的用法
select 聚合函数,列(要求出现在group by的后面)
from 表
where 筛选条件
group by 分组的列表
order by 子句
注意:除了出现在group by后面的字段,如果要在select后查询其他字段,必须用聚合函数进行聚合
-
特点:分组查询中的筛选条件分为两类:
- where:对分组前的表进行筛选,所以放在group by前面
- having:对分组后的表进行筛选,所以放在group by后面
-
因为执行顺序:
from->on->join->where->group by->having+聚合函数->select->order by->limit
3-1、查询在sc表存在成绩的学生信息
提示:成绩表肯定都是有学生的,所以用左关联就可以得到学生的信息。
select b.*from (
select SId
from sc
group by SId) as aleft join student as b
on a.SId = b.SId
- 子语句可以查询所有成绩表中的SId,结果作为主表。
4-1:查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为null)
解法一:子查询
select a.SId,a.sname,b.counts,b.sums
from student as a
left join
(SELECT SId,count(CId) as counts,sum(score) as sums
from sc
group by SId) as b
on a.SId = b.SId;
- 子语句使用聚合函数,算出:选课总数、所有课程的总成绩,根据SId分组
解法二:
select a.SId,a.sname,count(b.CId) as counts,sum(b.score) as sums
from student as a
left join sc as b
on a.SId = b.SId
group by a.SId;
- 除了出现在group by后面的字段,如果要在select后查询其他字段,必须用聚合函数进行聚合。
- 所以这个代码运行错误,但是如果修改一下mysql的配置还是可以使用的。
- 我这里没有修改,如果以后有需要再修改。
第三天
5-1 查询所有李姓老师的数量
select count(a.Tname) as nums
from teacher as a
where a.Tname LIKE '李%';
- like:模糊查找
- ‘李%’:李后面可以加的文字不限定个数
6-1 查询学过【张三】老师授课的同学的信息
select
b.*
from( select SId from sc
inner join course on sc.CId = course.CId
inner join teacher on course.TId = teacher.TId
where teacher.Tname = '张三') as ainner join student as b
on a.SId = b.Sid;
子句主要作用是从sc表中找出张三学生的SId,然后通过SId关联到学生表,找到学生信息

7-1查询没有,学全所有课程的同学的信息
select b.*
from(select sc.SId from sc
group by sc.SId
having count(sc.CId) < (select count(CId)from course )) AS ainner join student as b
on a.SId = b.SId;
- count(sc.CId) < (select count(CId)from course ):课程总数大于学生选择数
- 子句主要是找出没有学全所有课程的SId
8-1:查询至少一门课与学号为01的同学所学相同的同学的信息
- 关键点:先查询到01同学所学的课程CId,IN DISTINCT 也可以用group by 代替DISTINCT
select distinct a.*
from student a
inner join sc b on a.SId = b.SIdwhere b.CId IN (select sc.CId from sc where sc.SId = '01');
子句主要是查询01学生所学的所有课程
9-1:查询和01号同学学习课程完全相同的其他同学信息
- 关键点:1、要没有学习01号同学以外的其他课程 (1)01号同学学习了哪些课程,(2)找到学习1号同学以外课程的同学
- SELECT cid from sc where sid = ‘01’ :01号同学学习课程
- SELECT sid FROM sc WHERE cid NOT IN (SELECT cid from sc where sid = ‘01’ ):筛选出与01课程同学所学不一样的同学的信息。
- 两次用NOT IN 第一次筛选出与01课程同学所学不一样的同学的信息,第二次把这些不一样的同学筛选掉留下一样的,然后再用group by 保证课程个数一样
2、课程的数量要保持一致
select a.*
from student a
inner join sc b
on a.SId = b.SId
where b.SId not in (select sc.SId from sc where sc.CId not in
(select CId from sc where SId = '01')) and b.SId != '01'group by a.SId
having COUNT(*) = (select COUNT(*) from sc where SId = '01');
10-1:查询没有学过“张三”老师讲授任意一门课程的学生姓名
select student.* from student
where student.SId not in
(
select c.Sid from teacher as a
inner join course as b on a.TId = b.TId
inner join sc as c on b.CId = c.CId
where a.Tname = '张三'
);
- 子句是查询张三老师教的学生Sid
- inner join course as b on a.TId = b.TId:找出与老师相匹配的课程 形成一个表
- inner join sc as c on b.CId = c.CId;再刚刚形成表的基础上找到相应的学生
相关文章:
45道SQL题目陆续更新
文章目录 学习视频配置环境第一天内连接 外连接第二天第三天 学习视频 学习视频 配置环境 四张表 配置四张表的sql语句 #创建发据库 create database frogdata charsetutf8;use frogdata;# 学生表 Student create table Student( SId varchar(10), Sname var…...
在线PS软件有哪些不错的推荐
许多新的UI设计合作伙伴非常关心在线ps工具的选择。现在市场上有各种各样的ps网页替代工具,数量众多,令人眼花缭乱。本文简要介绍了10个在线PS工具,我相信一定有一个适合你! 1.即时设计 即时设计是一款在线 UI 设计工具…...
Java实现天气预报功能
如果要实现类似百度天气、手机App这样的天气预报功能该如何实现?首先想到的是百度... 背景: 最近公司做了一个项目,天气预报的功能也做上去了,不仅有实时天气、未来7天预报的功能、还有气象预警的功能。 天气包括基本天气、白天夜…...
python循环语句
while循环 Python中,while循环只要在条件(表达式)为真的情况下,就会一直重复执行相应的循环代码块。 while语句的语法格式如下: while 条件表达式:代码块while语句执行的具体流程为:首先判断…...
多线程基础(一)线程基础信息、synchronized 锁概念
1. 基本概念: 程序: 程序是一些保存在磁盘上的指令的有序集合,是静态的。程序包括:内存资源、IO资源、信号处理等。(如:XX.exe) 进程: 进程是程序执行的过程,包括了动态…...
JAVA期末考内容知识点的梳理
作者的话 前言:这些都是很基本的,还有很多没有写出来,重点在于考试复习,包括后四章的内容 前面内容请参考JAVA阶段考内容知识点的梳理 一、集合、流 课堂总结1集合 集合概念: 保存和盛装数据的容器,将许多…...
为什么要使用Thrift与Protocol Buffers?
编码数据的格式 程序通常(至少)使用两种形式的数据: 在内存中,数据保存在对象、结构体、列表、数组、散列表、树等中。 这些数据结构针对 CPU 的高效访问和操作进行了优化(通常使用指针)。如果要将数据写…...
oa是什么意思?oa系统哪个好用?
一、oa是什么意思 oa(Office Automation办公自动化)是一种将智能化科技应用于企业管理中的应用系统。它可以通过电脑网络、互联网等技术手段,将企业的各种业务流程、各种业务数据进行集成和处理,将各种业务流程和各种业务数据统一…...
Linq和C# Lambda表达式
什么是Linq 简介 Linq (Language Integrated Query) 是一种语言集成的查询技术,可以在C#和其他.NET语言中使用。Linq允许我们使用一种类SQL的语言来查询数据,这使得代码更加简洁和易于阅读。Linq提供了一种通用的查询接口,可以用于查询各种…...
蓝桥:前端开发笔面必刷题——Day2 数组(三)
文章目录 📋前言🎯两数之和 II📚题目内容✅解答 🎯移除元素📚题目内容✅解答 🎯有序数组的平方📚题目内容✅解答 🎯三数之和📚题目内容✅解答 📝最后 &#x…...
人工智能专栏第四讲——人工智能的未来展望与机遇
目录 一、人工智能的未来展望 二、人工智能在各领域的应用 三、人工智能的机遇 四、总结...
Unity阴影(Shadow)、Shadowmap
Unity阴影(Shadow) 在Unity中,阴影(Shadow)是用于模拟场景中物体之间相互遮挡和光照效果的特性。阴影可以增加场景的真实感,并在视觉上提供深度和空间感。 Unity提供了几种阴影投射和接收的方法和技术&am…...
编程语言的四种错误处理方法,你知道几种?
错误处理是编程的一个基本要素。除非你写的是“hello world”,否则就必须处理代码中的错误。在本文中,我将讨论各种编程语言在处理错误时使用的最常见的四种方法,并分析它们的优缺点。 关注不同设计方案的语法、代码可读性、演变过程、运行效…...
ContOS7单机安装Hadoop
安装Hadoop 1,准备环节 因为Hadoop是由java编写的,所以需要Java的环境支持,作为开发者我们需要安装jdk。 安装jdk的教程http://t.csdn.cn/6qJKg 下载Hadoop的安装包 Hadoop官网:http://hadoop.apache.org/ Hadoop版本下载地…...
抓取动态网页的数据的具体操作方法
抓取动态网页的数据的具体操作方法 动态网页是指在用户交互过程中,网页内容不断更新和变化的网页。抓取动态网页的数据需要了解以下具体操作方法: 使用浏览器开发者工具:在浏览器中打开目标网页后,按下F12键,打开开发…...
Windows 和 Linux 环境下 ProtoBuf 的安装
文章目录 一、ProtoBuf 在 Windows 环境中的安装二、ProtoBuf 在 Linux 环境中的安装 ProtoBuf在GitHub上的下载地址 一、ProtoBuf 在 Windows 环境中的安装 首先选择自己要下载的版本,我选择的是v21.11: 点进去在最下面选择Windows的版本࿰…...
商用密码应用安全性测评方案编制流程
密评方案编制的目标是完成测评准备活动中获取的信息系统相关资料整理,为现场测评活动提供最基本的文档和指导方案。 按照《GM-T 0116-2021 信息系统密码应用测评过程指南》标准,密评方案编制包括5项关键任务,简要汇总如下表。 编号任务输入文…...
Elasticsearch 集群部署插件管理及副本分片概念介绍
Elasticsearch 集群配置版本均为8以上 安装前准备 CPU 2C 内存4G或更多 操作系统: Ubuntu20.04,Ubuntu18.04,Rocky8.X,Centos 7.X 操作系统盘50G 主机名设置规则为nodeX.qingtong.org 生产环境建议准备单独的数据磁盘主机名 #各自服务器配置自己的主机名 hostnamectl set-ho…...
Liunx 套接字编程(2)TCP接口通信程序
1.TCP通信程序的编写 面向连接、可靠传输、提供字节流传输服务 客户端向服务器发送一个连接建立的请求流程,上图中服务端第三步详细流程 2.TCP接口 socket--创建套接字 int socket(int domain, int type, int protocol); bind---绑定 intbind(int sockfd, struct s…...
8年开发经验,浅谈 API 管理
随着信息化飞速增长的还有各信息系统中的应用接口(API),API作为信息系统内部及不同信息系统之间进行数据传输的渠道,其数量随着软件系统的不断庞大而呈指数型增长,如何管理这些API已经在业界变得越来越重要,…...
暗黑破坏神2存档编辑器的终极指南:打造你的完美角色
暗黑破坏神2存档编辑器的终极指南:打造你的完美角色 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾为暗黑破坏神2中某个角色的属性分配不当而后悔?是否想体验不同装备组合却不想花费数小时刷装备…...
Cursor Free VIP:终极指南解锁AI编程助手完整功能
Cursor Free VIP:终极指南解锁AI编程助手完整功能 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial r…...
为什么你的推荐系统正在被淘汰?2026奇点大会证实:AI原生架构已成生存刚需,错过即掉队
第一章:2026奇点智能技术大会:AI原生推荐系统全景洞察 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次设立“AI原生推荐系统”主题峰会,聚焦从模型架构、实时推理到闭环反馈的全栈技术演进。与传统推荐系统不同,AI原…...
Hyper-V直通M.2 NVMe硬盘前,你必须搞清楚的3个关键点和1个误区
Hyper-V直通M.2 NVMe硬盘前必须掌握的3个技术真相与1个常见误判 当你盯着那块标称读写速度3500MB/s的M.2 NVMe硬盘,盘算着如何让它为虚拟机提供原生级性能时,90%的技术决策失误往往发生在点击"直通"按钮之前。这不是关于操作步骤的教程&#x…...
Neural Renderer实战:从3D模型到物理对抗样本的渲染流程解析
1. Neural Renderer与物理对抗攻击初探 第一次听说Neural Renderer能用于生成物理对抗样本时,我的反应和大多数开发者一样——既兴奋又困惑。兴奋的是这个技术能让3D模型在真实世界中"隐身",困惑的是具体实现路径。经过三个月的项目实践&#…...
Qwen3.5-4B模型在Proteus仿真电路描述生成中的应用
Qwen3.5-4B模型在Proteus仿真电路描述生成中的应用 1. 引言:电路文档撰写的痛点与解决方案 电子工程师和学生们在使用Proteus进行电路仿真时,常常面临一个共同的困扰:花费大量时间编写电路说明文档。一个复杂的电路仿真项目,可能…...
墨语灵犀处理403 Forbidden错误:智能排查与解决方案生成
墨语灵犀处理403 Forbidden错误:智能排查与解决方案生成 遇到网站打不开,显示“403 Forbidden”,是不是感觉有点懵?这个错误在运维和开发中太常见了,它就像一道“禁止入内”的门,告诉你服务器收到了请求&a…...
Graphormer部署案例:科研云平台中Graphormer作为标准化AI分子服务模块
Graphormer部署案例:科研云平台中Graphormer作为标准化AI分子服务模块 1. 项目概述 Graphormer是一种基于纯Transformer架构的图神经网络模型,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。该模型在OGB、PCQM4M等…...
利用LFM2.5-1.2B-Thinking-GGUF构建智能知识库问答:基于本地文档的精准回答
利用LFM2.5-1.2B-Thinking-GGUF构建智能知识库问答:基于本地文档的精准回答 1. 企业知识管理的痛点与解决方案 在日常工作中,企业员工经常需要查阅大量内部文档——产品手册、技术规范、公司制度等。传统的关键词搜索往往效率低下,要么返回…...
JetBrains IDE试用期重置终极指南:30天免费试用无限续杯
JetBrains IDE试用期重置终极指南:30天免费试用无限续杯 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 还在为JetBrains IDE试用期到期而烦恼吗?IDE Eval Resetter插件为你提供完美的解决…...
