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

news2024/11/25 4:28:48

目录

相关表数据: 

题目及思路解析:

多表连接

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,按分数降序排列的学生信息

代码:

select
   st.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、查询该学生不同课程的成绩相同的学生编号、课程编号、学生成绩

代码:

    select
        sc1.stu_id,
        sc1.score
    from score_info sc1
    inner join score_info sc2 on sc1.stu_id=sc2.stu_id
    where sc1.course_id !=sc2.course_id and sc1.score=sc2.score;

思路分析

这道题主要是内连接,需要两张相同的表(简单理解为自己连自己),横向拼接,两张表对比找出不同课程的,然后同时成绩相同的学生成绩

结果:

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

注意:这里隐含条件是两门课程都选修的学生

这道题目意思是在选修两门课程的学生中,课程01成绩比02课程高的学生

代码1

 select
        sc1.stu_id
    from score_info sc1
    join score_info sc2 on sc1.stu_id =sc2.stu_id
    where sc1.course_id='01' and sc2.course_id='02'and sc1.score>sc2.score;

代码2:

select
    s1.stu_id
from
(
    select
        sc1.stu_id,
        sc1.course_id,
        sc1.score
    from  score_info sc1
    where sc1.course_id ='01'
) s1
join
(
    select
        sc2.stu_id,
        sc2.course_id,
        score
    from score_info sc2
    where 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:

    select
        sc1.stu_id as `学号`,
        stu_name as `姓名`
    from score_info sc1
    join score_info sc2 on sc1.stu_id=sc2.stu_id
    left join student_info st on st.stu_id=sc1.stu_id
    where sc1.course_id ="01" and sc2.course_id='02';

代码2:

select
    t1.stu_id as `学号`,
    s.stu_name as `姓名`
from
(
    select
        stu_id
    from score_info sc1
    where sc1.course_id='01'
    and stu_id in (
          select
              stu_id
          from score_info sc2
          where 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”的学生所学课程相同的学生的学号和姓名

代码:

select
    sc.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(
    select
       course_id
    from score_info
    where stu_id ='001'
)
group by sc.stu_id, stu_name;

思路分析

这道题比较普通,先子查询得到001学生的选修课程,接着在此基础上外面查询筛选课程号在001学生的选修课程之中的学生。

  稍微需要注意的是,子查询结果是多个因此用 in,然后外面查询记得学生号不等于001(即排除掉001学生)

结果:

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

注意:这里的平均成绩是学生所有课程的总成绩的平均成绩

代码:

select
    si.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
(
    select
        stu_id,
        avg(score) avg_score
    from score_info
    group 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.coloradmin.cn/o/1561680.html

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

相关文章

Linux多进程通信(2)——POSIX信号量使用例程

1.POSIX信号量 1&#xff09;POSIX信号量和System V信号量区别 常用的是POSIX信号量&#xff0c;使用起来更加方便&#xff0c;而POSIX信号量分为有名信号量和无名信号量 POSIX信号量是多线程多进程安全的&#xff0c;而System V标准的信号量并不是&#xff0c;Posix通过sem_…

java----继承

1、继承的定义 继承就是子类继承父类的特征和行为&#xff0c;使得子类对象具有父类的属性和方法&#xff08;不劳而获&#xff09; 使用 extends关键字 2、方法重写&#xff08;方法覆盖&#xff09; 子类可以重写父类中的方法&#xff0c;要求方法签名必须一样 3、方法重载…

2、jvm基础知识(二)

类的生命周期 加载 1、加载(Loading)阶段第一步是类加载器根据类的全限定名通过不同的渠道以二进制流的方式获取字节码信息。 程序员可以使用Java代码拓展的不同的渠道。 2、类加载器在加载完类之后&#xff0c;Java虚拟机会将字节码中的信息保存到内存的方法区中。在方法区生…

【已解决】Port 8080 was already in use

问题描述 运行项目时显示错误页&#xff0c;无法成功进入目标页 *************************** APPLICATION FAILED TO START ***************************Description:Web server failed to start. Port 8080 was already in use.Action:Identify and stop the process thats…

MySQL常见故障案例与优化介绍

前言 MySQL故障排查的意义在于及时识别并解决数据库系统中的问题&#xff0c;确保数据的完整性和可靠性&#xff1b;而性能优化则旨在提高数据库系统的效率和响应速度&#xff0c;从而提升用户体验和系统整体性能。这两方面的工作都对于保证数据库系统稳定运行、提升业务效率和…

html基础:颜色的 5 种表示方法(最全!)

你好&#xff0c;我是云桃桃。一个希望帮助更多朋友快速入门 WEB 前端的程序媛&#xff0c;大专生&#xff0c;2年时间从1800到月入过万&#xff0c;工作5年买房。 分享成长心得。 HTML 颜色在网页设计中扮演着重要角色&#xff0c;给网页增加颜色可以增强用户体验&#xff0c;…

臻奶惠无人售货机:新零售时代的便捷消费革命

臻奶惠无人售货机&#xff1a;新零售时代的便捷消费革命 在新零售的浪潮中&#xff0c;智能无人售货机作为一个创新的消费模式&#xff0c;已经成为距离消费者最近的便捷购物点之一。这种模式不仅能够满足居民对消费升级的需求&#xff0c;还能通过建立多样化和多层次的消费体…

Spring使用(一)注解

Spring使用 资源 Spring 框架内部使用 Resource 接口作为所有资源的抽象和访问接口&#xff0c;在上一篇文章的示例代码中的配置文件是通过ClassPathResource 进行封装的&#xff0c;ClassPathResource 是 Resource 的一个特定类型的实现&#xff0c;代表的是位于 classpath …

Python创建三维空间立体方阵,根据赋予数值绘图赋色

代码如下&#xff1a; import matplotlib.pyplot as plt from mpl_toolkits.mplot3d.art3d import Poly3DCollection from matplotlib.colors import LinearSegmentedColormap, Normalize import numpy as npdef make_cube(matrix: np.ndarray)->None:fig plt.figure(figs…

vue项目视频播放ckplayer使用

ckplayer 官方网址&#xff0c;点击访问 1&#xff0c;打开网页后能看到这里&#xff0c;我现在使用的是最新 X3版手册 2&#xff0c;这个ckplayer不是npm 插件&#xff0c;要下载安装包解压到项目里面使用 安装包网址 通过gitee下载 3&#xff0c;解析安装包到项目中 publ…

leetcode 不同路径

62. 不同路径 问题描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的…

仿真黑科技EasyGo DeskSim 2022

DeskSim2022的FPGA支持多种solver的混合应用&#xff0c;对于每一种solver可以采用不同的仿真步长&#xff0c;以下图模型为例&#xff0c;模型运行在FPGA上&#xff0c;FPGA解算方式采用的是Power Electronic & FPGA Coder解算&#xff0c;其中电力电子电路部分采用了两种…

SD-WAN支持的多种线路类型

SD-WAN技术的崛起为企业网络带来了全新的可能性&#xff0c;尤其是在连接选项的多样性方面。通过SD-WAN方案&#xff0c;企业可以根据自身需求来选择最适合的连接类型&#xff0c;以实现性能优化和成本效益的平衡。下面&#xff0c;让我们深入了解SD-WAN所支持的各种线路类型。…

【御控物联】JavaScript JSON结构转换(12):对象To数组——键值互换属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、核心构件之转换映射三、案例之《JSON对象 To JSON数组》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换…

vue+elementUI实现表格组件的封装

效果图&#xff1a; 在父组件使用表格组件 <table-listref"table":stripe"true":loading"loading":set-table-h"slotProps.setMainCardBodyH":table-data"tableData":columns"columns.tableList || []":ra…

JAVAEE——多线程进阶,锁策略

文章目录 锁策略乐观锁和悲观锁乐观锁悲观锁两者的比较 读写锁重量级锁和轻量级锁重量级锁轻量级锁 自旋锁公平锁和非公平锁公平锁非公平锁 可重入锁和不可重入锁可重入锁不可重入锁 锁策略 乐观锁和悲观锁 乐观锁 什么是乐观锁呢&#xff1f;我们可以认为乐观锁比较自信&am…

MySQL 连接池的实现

池化技术 池化技术能够减少资源对象的创建次数&#xff0c;提高程序的响应性能&#xff0c;特别是在高并发下这种提高更明显。共同特征 对象创建时间长。对象创建需要大量资源。对象创建后可被重复使用。 数据库连接池 数据库连接池&#xff08;Connection pooling&#xff…

linux C:变量、运算符

linux C 文章目录 变量运算符 一、变量 [存储类型] 数据类型 标识符 值 标识符&#xff1a;由数字、字母、下划线组成的序列&#xff0c;不能以数字开头。 数据类型&#xff1a;基本数据类型构造类型 存储类型&#xff1a;auto static…

2.4_2 死锁的处理策略——预防死锁

2.4_2 死锁的处理策略——预防死锁 知识总览 #mermaid-svg-z0noPuUcH4CJsxb7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-z0noPuUcH4CJsxb7 .error-icon{fill:#552222;}#mermaid-svg-z0noPuUcH4CJsxb7 .error-t…

【BlossomRPC】接入注册中心

文章目录 NacosZookeeper自研配置中心 RPC项目 配置中心项目 网关项目 这是BlossomRPC项目的最后一篇文章了&#xff0c;接入完毕注册中心&#xff0c;一个完整的RPC框架就设计完成了。 对于项目对注册中心的整合&#xff0c;其实我们只需要再服务启动的时候将ip/port/servic…