数据库实验—复杂查询

news2024/10/5 13:02:04

在这里插入图片描述

  • 查询20161151班的学生在大学一年级选修的课程情况,查询结果要显示学号(Sno)、姓名(Sname)、专业名(Mname)、选课的课程号(Cno)、选课的课程名称(Cname)及成绩(Grade),并按照学号、课程号升序排序

    select Sno, Sname,Mname, Cno,Cname,Grade
    from Students S, Courses C, Reports R, Major M
    where S.Sno = R.Sno and C.Cno = R.Cno 
    and M.Mno = S.Mno and S.Sclass = '20161151'
    and R.Racademicyear = 2016
    order by S.Sno, C.Cno -- 默认升序,可以不写asc
    
  • 查询教师编号为T002的教师的授课信息,查询结果显示教师编号(Tno)、姓名(Tname)、授课学年(Tacademicyear)、授课学期(Tterm)、授课的课程编号(Cno)、课程名(Cname)以及授课班级(Sclass),结果按授课学年、授课学期升序排序

    select T.Tno, T.Tname, Tu.Tacademicyear, Tu.Tterm, 
    Tu.Cno, C.Cname, Tu.Sclass
    from Teachers T, Tutors Tu, Courses C
    where T.Tno = Tu.Tno, C.Cno = Tu.Cno and Tno = 'T002'
    order by Tu.Tacademicyear, Tu.Tterm
    
  • 查询计算机与信息工程学院的各个专业的学生数,查询结果以中文名显示专业号(Mno)、专业名称(Mname)、学生人数,并按专业号升序排序

    select M.Mno '专业号', 
    M.Mname '专业名称', count(*) '学生人数'
    from Major M, Students S, Department D
    where M.Mno = S.Mno and M.Dno = D.Dno 
    and D.Dname = '计算机与信息工程学院'
    group by M.Mno, M.Mname 
    order by M.Mno
    
  • 查询和“王一凡”在同一个学院,且总工资(基本工资Tsal+岗位津贴Tcomm)比“王一凡”高的教师的信息,查询结果以中文显示教师编号(Tno)、姓名(Tname)和总工资

    select T2.Tno '教师编号', T2.Tname '姓名',
    T2.Tsal+T2.Tcomm '总工资' 
    from Teachers T1, Teachers T2 
    where T1.Tname = ' 王一凡' and T1.Tno <> T2.Tno
    and (T1.Tsal+T1.Tcomm < T2.Tsal+T2.Tcomm)
    and T1.Dno = T2.Dno
    
  • 查询前序课程是数据结构的课程的信息,查询结果显示课程编号(Cno)、课程名称(Cname)和学分(Ccredit)

    select C1.Cno, C1.Cname,C1.Ccredit
    from Courses C1, Courses C2
    where C1.Cno = C2.Cno and C1.Cname = '数据结构'
    
  • 查询既给20161121班上过课,也给20161151班上过课的教师信息,查询结果显示教师编号(Tno)、教师姓名(Tname)

    select  distinct T1.Tno, T.Tname
    from Tutors T1, Tutors T2,Teachers T
    where T1.Tno = T2.Tno and T1.Tno = T.Tno
    and T1.Sclass = '20161121'
    and T2.Sclass = '20161151'
    
  • 查询课程表中的所有课程在每个学期的选课情况,查询结果以中文名显示课程编号(Cno)、课程名称(Cname)、选课学年(Racademicyear)、选课学期(Rterm)及该学年该学期的选课人数(SelNumber),按课程编号、选课学年、选课学期升序排序

    • 从这一题中学到,分组的对象就是最后select的那个表的主键,否则如果select元组主键没有进行分组的就可能会报错,因为用集函数就是希望能够计算多个元组的数据
      • 比如:我要计算成绩,这时候我多个表拼起来了,那么最后select出来的多个元组组合起来就是属于一个表,那么这个select出来的表选一个主键,那么这个主键就应该是你分组的属性。
      • 一般比较霸道的做法就是你select什么就将其放进分组中
      • 但有种属于比较大白话的,这种就属于你能读懂就可以知道怎么写,如下就是,典型的直接使用大白话说明了按照学院分组,然后计算每个学院的平均薪水
        select avg((T2.Tsal + T2.Tcomm))
        				from Teachers T2
        				where T1.Tno <>T2.Tno 
        				group by T2.Dno
        
    • 因为查找的是所有课程,为了防止会出现Reports表中没有对应课程记录,所以将Courses表设置为主表进行查询。(left join表示以左边的表为主表,如果你把Courses表放在右边就要用right join)
    • left join 或者right join后不能接where,两个表之间的条件筛选变成了on,只有当两个表连接完成后你还想继续筛选的时候还是可以继续使用where的,同样后面如果有分组的还是继续使用having
    select R.Cno '课程编号' , C.Cname '课程名',
    R.Racademicyear '选课学年', R.Rterm, count(*) '选课人数'
    from Courses C left join Reports R
    on C.Cno = R.Cno
    group by R.Cno, C.Cname,R.Rterm,R.Racademicyear
    order by R.Cno, R.Racademicyear, R.Rterm
    
  • 查询教师表中的每一位数学与统计学院的教师的授课课情况,查询结果显示教师编号(Tno)、教师姓名(Tname)、授课学年(Tacademicyear)、授课学期(Tterm)、课程编号(Cno)及课程名称(Cname),按教师编号、开课学年、授课学期升序排序

    select 
    Tu.Tno, T.Tname,Tu.Tacademicyear, 
    Tu.Tterm,C.Cno,C.Cname
    from 
    Department D inner join Teachers T on T.Dno = D.Dno
    left join Tutors Tu on T.Tno = Tu.Tno
    left join Courses C on Tu.Cno = C.Cno
    where D.Dname = '数学与统计学院'
    order by T.Tno, Tu.Tacademicyear, Tu.Tterm
    
  • 使用IN谓词查询有课程成绩不及格的学生的信息,结果显示学号(Sno)、姓名(Sname)及所在班级(Sclass)

    select Sno, Sname, Sclass
    from Students S
    where S.Sno in (select Sno
    				from Reports 
    				where Grade < 60)
    
  • 使用嵌套WHERE子查询,查询在2014学年有授课的教师的信息,结果显示教师编号(Tno)、教师姓名(Tname)及职称(Tprof)

    select Tno,Tname,Tprof
    from Teachers
    where Tno in (select Tno
    				from Tutors
    				where Tacademicyear = 2014)
    
  • 使用嵌套WHERE子查询,查询计算机与信息工程学院中总工资高于本学院的平均总工资的教师信息,结果以中文名称显示教师编号(Tno)、教师姓名(Tname)、职称(Tprof)及总工资

    select T1.Tno, T1.Tname, T1.Tprof,(T1.Tsal+T1.Tcomm)
    from Teachers T1
    where (T1.Tsal+T1.Tcomm) > 
    		(select avg((T2.Tsal+T2.Tcomm)) 
    		from Teachers T2
    		where T1.Dno = T2.Dno 
    		and T2.Dno = (select Dno
    					from Department
    					where Dname = '计算机与信息工程学院'))
    
  • 使用嵌套WHERE子查询,查询总工资高于所有学院的平均总工资的教师信息,结果显示教师编号(Tno)、教师姓名(Tname)、学院名称(Dname)、职称(Tprof)及总工资

    select T1.Tno, T1.Tname, D.Dname, 
    T1.Tprof, (T1.Tsal+T1.Tcomm)
    from Teachers T1,Department D
    where T1.Dno = D.Dno and 
    (T1.Tsal+T1.Tcomm) > all (
    				select avg((T2.Tsal + T2.Tcomm))
    				from Teachers T2
    				where T1.Tno <>T2.Tno 
    				group by T2.Dno)
    				
    
  • 使用嵌套WHERE子查询,查询已获学分比2014级所有计算机与信息工程学院学生的获得的学分都高的学生的学号(Sno)、姓名(Sname)及已获得的总学分(提示:① 已获学分是指已有成绩且成绩大于等于60分的课程的学分;② 先统计每位学生获得的学分,再筛选出满足条件的学生)

    select S.Sno, S.Sname, sum(C.Ccredit) '总学分'
    from Reports R, Courses C,Students S
    where C.Cno = R.Cno and R.Sno = S.Sno
    and R.Grade > 60
    group by R.Sno,S.Sname
    having sum(C.Ccredit) > all (
    	select sum(Ccredit)
    	from Reports R,Department D,Courses C
    	where R.Grade > 60 and C.Cno = R.Cno 
    	and left(R.Sno,4) = '2014'
    	and D.Dno=(
    		select Dno
    		from Department
    		where Dname = '计算机与信息工程学院')
    	group by R.Sno)
    
  • 使用EXISTS谓词查询计算机与信息工程学院中没有讲授过课程号为112p0054课程的教师编号(Tno)、姓名(Tname)和职称(Tprof)

    select T.Tno, T.Tname, T.Tprof
    from Teachers T
    where 
    not exists (select * 
    			from Tutors Tu
    			where Cno = '112p0054' 
    			and Tu.Tno = T.Tno)
    and 
    T.Dno = (select Dno
    			from Department
    			where Dname = '计算机与信息工程学院')
    
  • 使用EXISTS谓语查询至少选修了学生2014112104选修的全部课程的学生的学号(Sno)、姓名(Sname)及其所选修的课程号(Cno)、课程名(Cname)和成绩(Grade)

    select S.Sno, C.Cno, C.Cname, R.Grade
    from Students S, Courses C, Reports R
    where S.Sno = R.Sno and C.Cno = R.Cno
    and S.Sno<>'2014112104'
    and not exists (select *
    			from Reports R_
    			where R_.Sno = '2014112104'
    			not exists (select *
    						from Reports 
    						where S.Sno = Sno 
    						and Cno = R_.Cno))
    
  • 使用嵌套子关系查询,查询课程表中每一门课程的选课情况,查询结果要显示课程编号(Cno)、课程名称(Cname)、选课人数、平均分、最高分、最低分。若某门课程还没有被选,则要选课人数显示为‘尚未选’,平均分等显示为NULL;若某门课程有人选,但平均分等结果为NULL,则显示为’尚无成绩’;非空的数据结果保留两位小数。

    • convert:第一个参数是类型,decimal(4,2)表示最后数据出来的长度是4是包含小数位的总长,保留2位小数。
      点击学习SQL数据类型讲解
    • case when then 必须加上end表示结束,否则会报错。
    select C.Cname, 
    case when count(*) is null then '尚未选' 
    else count(*) end,
    case when avg(R.Grade) is null then '尚无成绩' 
    else convert(decimal(4,2),avg(R.Grade)) end,
    case when max(R.Grade) is null then '尚无成绩' 
    else convert(decimal(4,2),max(R.Grade)) end,
    case when min(R.Grade) is null then '尚无成绩' 
    else convert(decimal(4,2),min(R.Grade)) end
    from Courses C left join Reports R on C.Cno = R.Cno 
    group by C.Cname, C.Cno
    
  • 使用嵌套子关系查询,查询在2015年的第1学期,选修了刘伟老师上的计算机科学概论课程的学生的基本信息,查询结果显示所在班级(Sclass)、学号(Sno)、姓名(Sname)、选修的课程编号(Cno)、课程名(Cname)以及授课的教师(Tname)

    • 这里采用了先在Reports表中选出所有选择了计算机科学概论的同学信息,然后再进一步筛选是刘伟老师授课的同学
    select S.Sclass,S.Sno, S.Sname,C.Cno,C.Cname,T.Tname
    from 
    (select R.Sno Sno,R.Cno Cno
    from Reports R
    where R.Cno = (select Cno
    				from Courses
    				where Cname ='计算机科学概论')
    and R.Racademicyear = 2015 and R.Rterm = 1) as new_R,
    Teachers T,Students S, Courses C
    where
    Tname = '刘伟'
    and new_R.Cno = C.Cno and new_R.Sno = S.Sno
    
  • 使用嵌套子关系查询,查询选修了数据结构,且其成绩不低于本年级所有选修了该门课程的学生的平均成绩的学生信息,查询结果以中文名称显示学生所在年级、学号(Sno)、姓名(Sname)及其选修的该门课程的成绩(Grade)

select S.Sno, S.Sname,R.Grade
from Students S,Reports R
where R.Sno = S.Sno 
and R.Grade >= (select avg(Grade)
			from Reports
			where R.Cno = Cno and left(S.Sno,4) = left(Sno,4)
			and Cno = (select Cno
						from Courses
						where Cname = '数据结构'))

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

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

相关文章

Windows11安装WSL2(Ubuntu20.04)

以管理员身份打开 PowerShell&#xff0c;输入以下命令安装&#xff1a; wsl --install dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /no…

【历史上的今天】6 月 29 日:SGI 和 MIPS 合并;微软收购 PowerPoint 开发商;新闻集团出售 Myspace

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 6 月 29 日&#xff0c;在 2008 年的今天&#xff0c;CNNIC 发布《第 22 次中国互联网络发展状况统计报告》&#xff0c;截至 2008 年 6 月底&#xff0c;中国…

draggable里包裹的卡片,卡片里有个input,点击input聚焦无效。

在input标签上加pointerdown.stop.native <el-input placeholder"请输入" pointerdown.stop.native v-model"dataForm.nickName" :style"{width:180px}" suffix-icon"el-icon-search" lazy />

TLD7002学习笔记(三)-使用S32K144EVB烧录TLD7002

文章目录 1. 前言2. 烧录数据准备2.1 OTP Wizard的下载与安装2.2 OTP Wizard的配置2.3 OTP寄存器烧录数据提取 3. OTP烧录和仿真的流程3.1 OTP烧录流程3.2 OTP仿真流程 4. 验证测试4.1 测试代码4.2 测试环境4.3 测试情况 5. 参考资料 1. 前言 本篇文章是TLD7002学习笔记的第三…

设计模式第18讲——中介者模式

目录 一、什么是中介者模式 二、角色组成 三、优缺点 四、应用场景 4.1 生活场景 4.2 java场景 五、代码实现 5.0 代码结构 5.1 抽象中介者&#xff08;Mediator&#xff09;——LogisticsCenter 5.2 抽象同事类&#xff08;Colleague&#xff09;——Participant 5…

Beego之Bee安装(Windows)以及创建,运行项目

一.简介 Bee是什么&#xff1f; bee工具是一个为了协助快速开发 Beego 项目而创建的项目&#xff0c;通过 bee 可以很容易的进行 Beego 项目的 创建、热编译、开发、测试和部署 Beego中文文档 Beego中文文档: Beego简介 安装前提 在安装bee之前&#xff0c;首先得提前安装好Go的…

【T3】打开财务报表提示不能登陆到服务器,请检查服务器配置。

【问题描述】 在使用畅捷通T3软件的时候&#xff0c; 打开【财务报表】提示&#xff1a;不能登陆到服务器&#xff08;GUPR7FM&#xff09;&#xff0c;请检查服务器配置。 但是打开【总账系统】&#xff0c;填制凭证、查看报表等操作都正常。 【解决方法】 由于操作【总账系…

【Java高级编程】Java反射机制

Java反射机制 1、反射的概述1.1、本章的主要内容1.2、关于反射的理解1.3、体会反射机制的“动态性”1.4、反射机制能提供的功能1.5、相关API 2、Class类的理解与获取Class的实例2.1、Class类的理解2.2、获取Class实例的几种方式2.3、总结&#xff1a;创建类的对象的方式2.4、Cl…

生产者与消费者问题

本篇文章我们使用C探讨一下生产者与消费者问题. 1. 多线程的引入 我们学习了操作系统, 知道了进程和线程的概念, 但是如果不进行代码实战的话, 会很难理解它们. 特别是编程的初学者(比如我), 在了解了进程和线程后通常会感到疑惑: 多线程怎么用? 为啥我平时写代码没有使用到…

ATM机项目实战——准备

项目介绍 大概功能&#xff1a; 实现一个模拟ATM机存款、取款、转账功能的一个系统&#xff0c;可以查看打印交易明细&#xff0c;后台用户可以管理用户账户卡信息。 适合人群&#xff1a; 在校计算机专业的大学生&#xff0c;愿意从事JAVA开发的人群&#xff0c;具体基础的…

记一次系统的jar包本地化方案

重在思路 行内容器环境,tomcat版本是8.5,导致jar包冲突,优先调用了jar包中的方法,致使同名同路径下,改写的类方法失效,报java.lang.NoSuchMethodError错误,删除对应class后需要重新更新jar包到行内maven私服仓库,流程复杂,且不清楚哪些地方依然有重写方法的地方,设置tomcat加载…

基于SSM+jsp的二手车交易网站设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

DBeaver mysql socks5 代理

DBeaver mysql socks5 代理 测试连接报错 Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.切换代理&#xff0c;连接成功 参考 DBeaver 文档 代理配置

谈一谈面试算法的几个常见误区

下一篇我们就开始梳理面试算法的体系了&#xff0c;今天呢&#xff0c;有个问题有必要谈一下——如何正确对待算法&#xff0c;如何征服算法。 目录 1.如何平常心对待算法 2.关于准备算法面试的一些误区 1.如何平常心对待算法 在老师之前算法班的群里&#xff0c;有位同学分…

vue3创建项目(五)vite配置端口号

Vue3配置代理跨域和服务端口等配置&#xff0c;可以在 vite.config.js 进行配置。(类似用 vue-cli 的 vue.config.js&#xff09; https://cn.vitejs.dev/config/第一步&#xff1a;首先在根目录下面创建vue.config.js import { defineConfig } from vite import vue from vite…

CubeMx打不开/不兼容大于java8的解决方案

最近在学习stm32&#xff0c;需要用到cubemx&#xff0c;但是软件都装好了却死活打不开 最后才发现是java版本的问题&#xff0c;cubemx只支持java8(至少java14,16,17,20亲测都不行) 于是便把java8又装了回来&#xff0c;但是又有新问题 不知道为什么&#xff0c;即便环境变量已…

Hologres弹性计算在OLAP分析上的实践和探索

作者&#xff1a;王奇 阿里云Hologres研发 简介&#xff1a; 1、本文介绍了OLAP分析在大数据分析中的位置 2、分析并介绍目前大数据OLAP遇到的分析性能、资源隔离、高可用、弹性扩缩容等核心问题 3、解析阿里云Hologres是如何解决极致性能、弹性、业务永续、性价比等核心刚需的…

从0到1 关于MySQL的数据库和表

一个字&#xff1a;细腻。 目录 1. 下载和安装MySQL及其可视化工具 2. 启动MySQL和客户端连接 3. 创建和查看数据库和表 1. 下载和安装MySQL及其可视化工具 下载和安装MySQL推荐博客&#xff1a; mysql数据库安装&#xff08;详细&#xff09;_体会&#xff01;的博客-CSD…

Idea部署 web项目时出现404问题

新手开发过程中发布项目可能会遇到这种问题&#xff0c;看到404&#xff0c;证明代码没有问题&#xff0c;地址有问题。 解决方法&#xff1a;&#xff08;此解决方法适用于&#xff0c;发布程序后首页能正常显示的情况下&#xff0c;点击任何菜单直接404&#xff09; 先看发布…

【NoSQL之 Redis配置与优化】

目录 一、关系数据库与非关系型数据库1、关系型数据库和非关系型数据库区别&#xff08;1&#xff09;数据存储方式不同&#xff08;2&#xff09;扩展方式不同&#xff08;3&#xff09;对事务性的支持不同 2、非关系型数据库产生背景总结 二、Redis简介1、Redis 具有以下几个…