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)…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...