HQL,SQL刷题,尚硅谷
目录
相关表数据:
题目及思路解析:
多表连接
1、课程编号为"01"且课程分数小于60,按分数降序排列的学生信息
2、查询所有课程成绩在70分以上 的学生的姓名、课程名称和分数,按分数升序排列
3、查询该学生不同课程的成绩相同的学生编号、课程编号、学生成绩
4、查询课程编号为“01”的课程比“02”的课程成绩高的所有学生的学号
5、查询学过编号为“01”的课程并且也学过编号为“02”的课程的学生的学号、姓名
6、查询学过 “李体音”老师所教的所有课的同学的学号、姓名
7、查询学过“李体音”老师所讲授的任意一门课程的学生的学号、姓名
8、查询没学过"李体音"老师讲授的任一门课程的学生姓名
9、查询至少有一门课与学号为“001”的学生所学课程相同的学生的学号和姓名
10、按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
编辑
总结归纳:
知识补充:
相关表数据:
- Score_info表

2、Student_info表

3、Course_info表

4、Teacher_info 表

题目及思路解析:
多表连接
1、课程编号为"01"且课程分数小于60,按分数降序排列的学生信息
代码:
selectst.stu_id,stu_name,birthday,gender,score
from student_info st
join score_info sc on st.stu_id=sc.stu_id
where course_id='01'and score<60
order by score desc;
思路分析:
这道题没什么特别的,就是简单join连接查询,不过结果显示可以加上成绩,可能比较好看点
结果:
2、查询所有课程成绩在70分以上 的学生的姓名、课程名称和分数,按分数升序排列
链接 :HQL,SQL刷题,尚硅谷-CSDN博客
3、查询该学生不同课程的成绩相同的学生编号、课程编号、学生成绩
代码:
selectsc1.stu_id,sc1.scorefrom score_info sc1inner join score_info sc2 on sc1.stu_id=sc2.stu_idwhere sc1.course_id !=sc2.course_id and sc1.score=sc2.score;
思路分析:
这道题主要是内连接,需要两张相同的表(简单理解为自己连自己),横向拼接,两张表对比找出不同课程的,然后同时成绩相同的学生成绩
结果:

4、查询课程编号为“01”的课程比“02”的课程成绩高的所有学生的学号
注意:这里隐含条件是两门课程都选修的学生
这道题目意思是在选修两门课程的学生中,课程01成绩比02课程高的学生
代码1:
selectsc1.stu_idfrom score_info sc1join score_info sc2 on sc1.stu_id =sc2.stu_idwhere sc1.course_id='01' and sc2.course_id='02'and sc1.score>sc2.score;
代码2:
selects1.stu_id
from
(selectsc1.stu_id,sc1.course_id,sc1.scorefrom score_info sc1where sc1.course_id ='01'
) s1
join
(selectsc2.stu_id,sc2.course_id,scorefrom score_info sc2where sc2.course_id ="02"
)s2
on s1.stu_id=s2.stu_id
where s1.score > s2.score;
思路分析:
这道题还行,主要是题目开始理解错了,题目意思不太明确。
代码1和代码2主要区别是代码2 join之前进行子查询
主要也是内连接,自己连自己,然后按照条件筛选
注意:代码1比较简洁,但是在大数据场景下,特别是数据量比较大的时候,应选择代码2
结果:

5、查询学过编号为“01”的课程并且也学过编号为“02”的课程的学生的学号、姓名
代码1:
selectsc1.stu_id as `学号`,stu_name as `姓名`from score_info sc1join score_info sc2 on sc1.stu_id=sc2.stu_idleft join student_info st on st.stu_id=sc1.stu_idwhere sc1.course_id ="01" and sc2.course_id='02';
代码2:
selectt1.stu_id as `学号`,s.stu_name as `姓名`
from
(selectstu_idfrom score_info sc1where sc1.course_id='01'and stu_id in (selectstu_idfrom score_info sc2where sc2.course_id='02')
)t1
join student_info s
on t1.stu_id = s.stu_id;
思路分析:
代码1 和代码2主要的不同在于,代码1使用join连接,而代码2是通过子查询
代码1是通过内连接,自己连接自己,然后筛选出同时选修两门课程的学生
代码2是先查询选修课程2的学生,在此基础上,通过stu_id连接,筛选也选修了课程1的学生
注意:SQL文基本没什么区别,但在大数据场景下应当选择Join的(即选择代码2)
结果:

下面三题就比较有意思了,而且关联性较强
6、查询学过 “李体音”老师所教的所有课的同学的学号、姓名
HQL,SQL刷题,尚硅谷-CSDN博客
7、查询学过“李体音”老师所讲授的任意一门课程的学生的学号、姓名
HQL,SQL刷题,尚硅谷-CSDN博客
8、查询没学过"李体音"老师讲授的任一门课程的学生姓名
HQL,SQL刷题,尚硅谷-CSDN博客
9、查询至少有一门课与学号为“001”的学生所学课程相同的学生的学号和姓名
代码:
selectsc.stu_id,stu_name
from score_info sc
left join juntest.student_info si on sc.stu_id = si.stu_id
where sc.stu_id <>'001' and course_id in(selectcourse_idfrom score_infowhere stu_id ='001'
)
group by sc.stu_id, stu_name;
思路分析:
这道题比较普通,先子查询得到001学生的选修课程,接着在此基础上外面查询筛选课程号在001学生的选修课程之中的学生。
稍微需要注意的是,子查询结果是多个因此用 in,然后外面查询记得学生号不等于001(即排除掉001学生)
结果:

10、按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
注意:这里的平均成绩是学生所有课程的总成绩的平均成绩
代码:
selectsi.stu_name,ci.course_name,sc.score,t1.avg_score
from score_info sc
join student_info si
on sc.stu_id=si.stu_id
join course_info ci
on sc.course_id=ci.course_id
join
(selectstu_id,avg(score) avg_scorefrom score_infogroup by stu_id
)t1
on sc.stu_id=t1.stu_id
order by t1.avg_score desc;
思路分析:
这道题关键在Join子查询部分,子查询部分是用来求平均成绩的,如果在最外层就求平均成绩求出来的是每个科目的平均成绩,因此需要加个子查询。
另外,这里可能有同学觉得子查询用了score_info表,Join连接又使用score_info表,太过于冗余,可不可以直接用子查询作为主表(即from 子查询),这里与上面的第二道题类似,是不可以的。
结果:
总结归纳:
1、考察多表连接使用,以及与子查询结合使用
2、在大数据场景下,join连接往往意味着需要shuffle,落盘
因此Join越多,计算、查询性能越差
3、在大数据场景下,先子查询在Join ,
一方面可以减少join时候的数据量,提高计算效率,
另一方面是子查询可以类似spark checkpoint,在执行数据计算时候出现中间数据丢 失时候,可以保存计算中间临时结果
4、另外,要仔细理解题目意思
知识补充:
1、表示不等于符合,<> 、!=
2、在外查询与子查询连接中,子查询返回结果为一个则可以使用=,>,<等,若是返回多个则使用in,not in等
3、---关于sum(if())函数
sum(if():有条件累加,常用于分类筛选统计
sum(if)只试用于单个条件判断,如果筛选条件很多,我们可以用sum(case when then else end)来进行多条件筛选注意,hive中并没有sum(distinct col1)这种使用方式,我们可以使用sum(col) group by col来达到相同效果.
4、goup by 分组聚合可以起到去重的作用
相关文章:
HQL,SQL刷题,尚硅谷
目录 相关表数据: 题目及思路解析: 多表连接 1、课程编号为"01"且课程分数小于60,按分数降序排列的学生信息 2、查询所有课程成绩在70分以上 的学生的姓名、课程名称和分数,按分数升序排列 3、查询该学生不同课程的成绩…...
随机生成用户名、密码、注册时间【Excel】
1.1简介 最近想虚拟一些数据,看下有没有自动生成的工具。百度看了下,大概有这么几种方法 1.excel内置公式函数处理 2.使用使用VBA宏生成随机 3.下载方方格子,emm工具是个好工具,蛮多功能的,每月8块 4.Java函数实现…...
C++函数模板详解(结合代码)
目录 1. 模板概念 2. 函数模板语法 3. 函数模板注意事项 4. 函数模板案例 5. 普通函数与函数模板的区别 6. 普通函数与函数模板的调用规则 7. 模板的局限性 1. 模板概念 在C中,模板是一种通用的程序设计工具,它允许我们处理多种数据类型而不是固…...
Nest学习随笔
一、Middleware(中间件)、Interceptor(拦截器)、ExceptionFilter(异常过滤器) 执行顺序 接口调用正常:Middleware > Interceptor接口调用异常:Middleware > ExceptionFilter 二、访问静态文件 使用 nestjs/serve-static 依赖 配置方法&#x…...
二十二、软考-系统架构设计师笔记-真题解析-2018年真题
软考-系统架构设计师-2018年上午选择题真题 考试时间 8:30 ~ 11:00 150分钟 1.在磁盘调度管理中,应先进行移臂调度,再进行旋转调度。假设磁盘移动臂位于21号柱面上,进程的请求序列如下表所示。如果采用最短移臂调度算法,那么系统…...
2024最新最全Selenium自动化测试面试题!
1、什么是自动化测试、自动化测试的优势是什么? 通过工具或脚本代替手工测试执行过程的测试都叫自动化测试。 自动化测试的优势: 1、减少回归测试成本 2、减少兼容性测试成本 3、提高测试反馈速度 4、提高测试覆盖率 5、让测试工程师做更有意义的…...
Docker 搭建Redis集群
目录 1. 3主3从架构说明 2. 3主3从Redis集群配置 2.1关闭防火墙启动docker后台服务 2.2 新建6个docker容器实例 2.3 进去任意一台redis容器,为6台机器构建集群关系 2.4 进去6381,查看集群状态 3. 主从容错切换迁移 3.1 数据读写存储 3.1.1 查看…...
spring boot商城、商城源码 欢迎交流
一个基于spring boot、spring oauth2.0、mybatis、redis的轻量级、前后端分离、防范xss攻击、拥有分布式锁,为生产环境多实例完全准备,数据库为b2b2c设计,拥有完整sku和下单流程的商城 联系: V-Tavendor...
全面解析“通义千问”:功能、优势与使用指南
引言: “通义千问”是由阿里云研发的一款先进的人工智能语言模型,以其强大的自然语言处理能力与广泛的知识覆盖面,在教育、咨询、信息检索等领域发挥着重要作用。本文将详细介绍“通义千问”的核心功能、显著优势以及具体使用方法。 一、“…...
【第三方登录】Google邮箱
登录谷歌邮箱开发者 https://console.developers.google.com/ 先创建项目 我们用的web应用 设置回调 核心主要: 1.创建应用 2.创建客户端ID 3.设置域名和重定向URL 4.对外公开,这样所有的gmail邮箱 都能参与测试PHP代码实现 引入第三方包 h…...
oslo_config学习小结
2.配置文件加载方法 2.1基础 配置文件指的是文件以.conf,.ini结尾等内容为配置项的文件,配置文件内容格式一般为 [DEFAULT] option value [sectiona] optiona valuea optionb valueb [sectionb] optionc valuec optiond valued 2.2加载方法…...
SpringBoot2.6.3 + knife4j-openapi3
1.引入项目依赖: <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-spring-boot-starter</artifactId><version>4.5.0</version> </dependency> 2.新增配置文件 import io.swag…...
PostgreSQL FDW(外部表) 简介
1、FDW: 外部表 背景 提供外部数据源的透明访问机制。PostgreSQL fdw(Foreign Data Wrapper)是一种外部访问接口,可以在PG数据库中创建外部表,用户访问的时候与访问本地表的方法一样,支持增删改查。 而数据则是存储在外部,外部可以是一个远程的pg数据库或者其他数据库(…...
Java项目:75 springboot房产销售系统
作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 使用房产销售系统分为管理员和用户、销售经理三个角色的权限子模块。 管理员所能使用的功能主要有:首页、个人中心、用户管理、销…...
2.6 IDE(集成开发环境)是什么
IDE(集成开发环境)是什么 IDE 是 Integrated Development Environment 的缩写,中文称为集成开发环境,用来表示辅助程序员开发的应用软件,是它们的一个总称。 通过前面章节的学习我们知道,运行 C 语言&…...
tomcat和web服务器是什么??
一、什么是服务器 1.服务器是计算机的一种,它比普通计算机运行更快、负载更高。服务器拥有独立IP地址,并且运行了服务器软件。 2.服务器由服务器软件和服务器硬件组成。服务器硬件就是拥有独立ip的计算机,服务器软件是一个被动的软件&#…...
鸿蒙Harmony跨模块交互
1. 模块分类介绍 鸿蒙系统的模块一共分为四种,包括HAP两种和共享包两种 HAP(Harmony Ability Package) Entry:项目的入口模块,每个项目都有且只有一个。feature:项目的功能模块,内部模式和En…...
由浅到深认识Java语言(30):集合
该文章Github地址:https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.c…...
Python学习笔记(二)
一:异常: 1.1:异常处理: 1.2:异常捕获: 1.3:异常传递: 二:模块: 2.1:模块的定义: 2.2:模块的导入: 2.3&…...
5.域控服务器都要备份哪些资料?如何备份DNS服务器?如何备份DHCP服务器?如何备份组策略?如何备份服务器状态的备份?
(2.1) NTD(域控数据库)备份 (2.2)DNS备份 (2.3)DHCP备份 (2.4)组策略备份 (2.5)CA证书备份 (2.6)系统状态备份 (2.1)…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...

