HQL,SQL刷题,尚硅谷(初级)

目录

相关表数据: 

题目及思路解析:

多表连接

1、课程编号为"01"且课程分数小于60,按分数降序排列的学生信息

2、查询所有课程成绩在70分以上 的学生的姓名、课程名称和分数,按分数升序排列

3、查询该学生不同课程的成绩相同的学生编号、课程编号、学生成绩

4、查询课程编号为“01”的课程比“02”的课程成绩高的所有学生的学号

5、查询学过编号为“01”的课程并且也学过编号为“02”的课程的学生的学号、姓名

6、查询学过 “李体音”老师所教的所有课的同学的学号、姓名

7、查询学过“李体音”老师所讲授的任意一门课程的学生的学号、姓名

8、查询没学过"李体音"老师讲授的任一门课程的学生姓名

9、查询至少有一门课与学号为“001”的学生所学课程相同的学生的学号和姓名

10、按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩

总结归纳: 

知识补充:


相关表数据: 

  1. 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 ,

            · 可以过滤不需要的数据,减少最后查询时候的数据量

            ·子查询会单独开启一个任务,提高计算效率

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 分组聚合可以起到去重的作用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/785706.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络中的网络(NiN)

文章目录 NiN块 NiN块 NiN的想法是在每个像素位置&#xff08;针对每个高度和宽度&#xff09;应用一个全连接层。果我们将权重连接到每个空间位置&#xff0c;我们可以将其视为1x1卷积层&#xff0c;或作为在每个像素位置上独立作用的全连接层。 从另一个角度看&#xff0c;即…

ollama本地部署大模型(纯CPU推理)实践

文章目录 说明Ollama和Ollama WebUI简介Ollama模型硬件要求内存要求 Ollama容器部署Ollama容器内模型下载和对话Ollama WebUI部署Ollama WebUI下载模型和对话轻量模型推荐机器硬件信息概览qwen:0.5b推理体验gemma:7b推理体验 说明 本文旨在分享在linux(centos8)平台使用docker…

新生报到系统的设计与实现(论文+源码)_kaic

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对新生报到信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

3.29号系统移植

1. uboot介绍 bootloader&#xff1a;引导加载程序的统称 uboot是引导加载程序中的一种 1.1 uboot特点 uboot是一个开源分布式软件uboot是由德国DNEX小组进行维护uboot支持多种硬件架构平台uboot是一个裸机开发程序uboot占用体积小uboot主要作用引导linux内核进行启动&#…

Vulnhub:BROKEN: GALLERY

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb WEB wen信息收集 目录扫描 进制转换 ssh登录 提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali/vulnhub] └─# arp-scan -l Interface: eth0, type: EN10MB, M…

【Docker】搭建安全可控的自定义通知推送服务 - Bark

【Docker】搭建安全可控的自定义通知推送服务 - Bark 前言 本教程基于绿联的NAS设备DX4600 Pro的docker功能进行搭建。 简介 Bark是一款为Apple设备用户设计的开源推送服务应用&#xff0c;它允许开发者、程序员以及一般用户将信息快速推送到他们自己的iPhone、iPad等设备上…

4G/5G防爆布控球

#防爆布控球 #远程实时监控 #移动应急指挥 #高清图像采集 #防爆安全认证 4G/5G防爆布控球 M130-EX防爆布控球是针对石化装置、石油平台、燃气、化工、制药、煤炭、冶炼、船舶制造、纺织等易燃易爆环境及危险场所而开发设计的防爆智能一体化电气设备。 产品型号&#xff1a;M13…

如何使用potplayer在公网环境访问内网群晖NAS中储存在webdav中的影视资源

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-D7WJh3JaNVrLcj2b {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

vue3 i18n国际化,普通js,ts文件中的设置方法

项目环境&#xff1a;vue3 ts element plus i18n vue3 ts i18n用法 1 在vue3ts中&#xff0c;如.<标签>{{ $t(login.title) }}</标签> <div class"title">{{ $t(login.title) }}</div>2 在<script setup>...</script>中 …

【C++】C++入门第二课(函数重载 | 引用 | 内联函数 | auto关键字 | 指针空值nullptr)

目录 前言 函数重载 概念 重载函数的条件 C支持重载函数的原理--名字修饰 引用 概念 特性 常引用&#xff08;const引用&#xff09; 使用场景 传值&#xff0c;传引用效率比较 引用和指针的区别 内联函数 概念 特性 auto关键字&#xff08;C11&#xff09; a…

NLP技术大解析:人工智能应用从分词到情感分析的全面指南

自然语言处理&#xff0c;简称NLP&#xff0c;是人工智能领域中的一个重要分支&#xff0c;致力于让计算机理解和生成人类使用的自然语言。随着科技的飞速发展&#xff0c;NLP已经渗透到我们生活的方方面面&#xff0c;从智能语音助手到在线翻译工具&#xff0c;再到社交媒体的…

Vscode下使用markdown入门

1.安装vscode插件 1. **Markdown All in One** ——提供丰富的Markdown相关的快捷键、自动补全功能&#xff0c;提高md文档编写生产力 2. **Markdown Preview Ehanced** ——用于渲染当前编写文档的效果同步预览 3. **Paste Image** ——用于快速引用图片至Markdown文…

程序汪接的4万智慧餐饮项目

本文章来自程序汪背后的私活小团队&#xff0c;开发智慧餐厅的小程序 由于程序汪太忙于是把这个项目让一个靠谱粉丝开发了&#xff0c;当然开发质量和进度我会跟踪&#xff0c;具体分析如下 B站【我是程序汪】 老程序员接了一个4万的智慧餐饮项目&#xff0c;开发周期60天 小程…

YoloV8改进策略:BackBone改进|GCNet(独家原创)

摘要 非局部网络&#xff08;NLNet&#xff09;通过为每个查询位置聚合特定于查询的全局上下文&#xff0c;为捕获长距离依赖关系提供了一个开创性的方法。然而&#xff0c;经过严格的实证分析&#xff0c;我们发现非局部网络所建模的全局上下文在图像中的不同查询位置几乎相同…

EFCore 反向工程(DBFirst)----慎用

使用EFCore时一般推荐code first&#xff0c;也就是先创建实体类&#xff0c;然后根据实体类生成数据表。但是有时候数据表已经存在&#xff0c;这时候就需要基于数据库表来创建实体类。 首先已经有数据表&#xff0c;显示如下&#xff1a; 下载依赖包&#xff1a; Microsoft…

C++——哈希(一)

1. unordered系列关联式容器 在了解哈希之前我们先简单了解一下unordered系列的关联式容器&#xff0c;因为其底层就是用哈希来实现的&#xff0c;其实也没啥好说的&#xff0c;C11中&#xff0c;STL又提供了unordered系列的关联式容器(unordered_map和unordered_set)&#xf…

python练习二

# Demo85def pai_xu(ls_test):#创建一个列表排序函数命名为pai_xu# 对创建的函数进行注释"""这是一个关于列表正序/倒序排列的函数:param ls_test: 需要排序的列表:return:"""ls1 [int(ls_test[i]) for i in range(len(ls_test))]#对input输入的…

Demis Hassabis,这位被封为爵士的AI领域的杰出研究者和神经科学家,是否能成为Google的救星?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

一文教会女朋友学会日常Git使用!Git知识总结

文章目录 一文教会女朋友学会日常Git使用&#xff01;Git知识总结一、git基本知识了解1.git简介2.git区域了解3.git常用命令 二、常用工作场景1.克隆远程仓库&#xff0c;把仓库代码拉到本地2.推送代码到远程仓库&#xff08;1&#xff09;本地代码和远程仓库版本相同&#xff…

200个有趣的HTML前端游戏项目合集(持续更新中)

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…