【数据库】实验五 数据库综合查询|多表查询、聚集函数、orderby、groupby

2024-03-05 18:50

本文主要是介绍【数据库】实验五 数据库综合查询|多表查询、聚集函数、orderby、groupby,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 参考文章

本文在实验四的基础上增加了orderby、聚集函数、groupby、多表查询的知识点,相较于上一次实验的难度变大了,嵌套表达更多了,逐渐开始套娃……
其实可以看成一个偏正短语来拆分,再写成SQL语句,比如查询一个年龄大于20的学生成绩,那么学生成绩就为中心语,年龄大于20则作为修饰语,将中心语放至select ...from之间,依次类推进行分析。


  1. 查询‘C language’或者‘Database’的学生学号、姓名、所在院系、选修课程号及成绩;
  1. 中心语:Student.sno,sname,sdept,Course.cno,SC.grade放到前面
  2. 由于所查询的内容涉及三个表,所以将三表按照索引进行合并Student.sno=SC.sno and Course.cno=SC.cno
  3. 修饰语:课程为‘C language’或者‘Database’=》为在课程名字中查询‘C language’或者‘Database’
select Student.sno,sname,sdept,Course.cno,SC.grade 
from Student,Course,SC 
where Student.sno=SC.sno and Course.cno=SC.cno 
and Course.cname in ('C language','Database');

在这里插入图片描述


  1. 查询缺少成绩的所有学生的详细情况;
  1. 中心语:学生的详细情况Student.*
  2. 合并Student,SC两表Student.sno=SC.sno
  3. 修饰语:成绩缺少grade is null
select Student.* 
from Student,SC 
where Student.sno=SC.sno and grade is null;

在这里插入图片描述


  1. 查询与‘Lisi’(假设姓名唯一)年龄不同的所有学生的信息;
  1. 中心语:学生信息Student.*
  2. 从表Student提取信息
  3. 修饰语:与‘Lisi’年龄不同;提取年龄为中心语,Lisi的年龄为修饰语
select Student.* 
from Student 
where sage not in (select sage from Student where sname='Lisi');

在这里插入图片描述


  1. 查询所选课程的平均成绩大于‘Lisi’的平均成绩的学生学号、姓名及平均成绩
  1. 中心语:学生学号、姓名及平均成绩Student.sno,sname,avg(SC.grade)
  2. 合并Student,SC两表Student.sno=SC.sno
  3. 修饰语:课程的平均成绩avg(Grade)
  4. 子语句:‘Lisi’的平均成绩=》查李四的成绩,嵌套一个子语句:select avg(grade)from SC,Student where sname='lisi’and Student.sno=SC.sno
select Student.sno,sname,avg(grade) 
from Student ,SC
where Student.sno=SC.sno 
group by Student.sno,sname
having avg(Grade)>(select avg(grade)from SC,Student where sname='lisi'and Student.sno=SC.sno)

由于条件语句中有聚集函数avg所有使用group by … having

  • count sum avg max min
  • 不可以出现在where语句后面,要使用group by和having

在这里插入图片描述


  1. 按照学号,姓名,所在院系,已修学分的顺序列出学生学分的获得情况。
    其中已修学分为考试已经及格的课程学分之和;
  1. 中心语:学号,姓名,所在院系,已修学分
  2. 三表按照索引进行合并Student.sno=SC.sno and Course.cno=SC.cno
  3. 修饰语:已经及格的课程学分之和
select Student.sno,sname,sdept,sum(ccredit) 
from Student,SC,Course 
where Student.sno=SC.sno and SC.cno=Course.cno 
and grade>60 group by student.sno,sname,sdept;

在这里插入图片描述


  1. 查询只选修一门课程的学生的学号、姓名、院系及成绩;
  1. 中心语:学生的学号、姓名、院系及成绩
  2. 涉及两个表内容,连接两表:Student.sno=SC.sno
  3. 修饰语:只选修一门的课程
  4. 子语句中心语:课程
  5. 子语句修饰语:只选修一门
select Student.sno,sname,sdept,grade
from Student,SC
where Student.sno=SC.sno
and SC.sno in (select sno from SC group by SC.sno having count(distinct cno)=1);

在这里插入图片描述


  1. 查找选修了至少一门和‘Lisi’选修课程一样的学生的学号、姓名及课程号;
  1. 中心语:学生的学号、姓名及课程号
  2. 二表按照索引进行合并Student.sno=SC.sno
  3. 修饰语:选修了至少一门和‘Lisi’选修课程一样
  4. 子语句中心语:课程一样的学生
  5. 子语句修饰语:‘Lisi’选修的课程
select Student.sno,sname,cno 
from Student,SC 
where Student.sno=SC.sno 
and SC.sno in 
(select SC.sno from SC,Student where cno in 
(select cno from Student,SC where sname='lisi' and Student.sno=SC.sno));

在这里插入图片描述


  1. 至少选修’C language’或’Database’课程的学生的基本信息;
  • 只包括其中一门或两门:
  1. 中心语:学生的基本信息
  2. 三表按照索引进行合并Student.sno=SC.sno and Course.cno=SC.cno
  3. 修饰语:至少选修’C language’或’Database’课程
  4. 子语句中心语:课程
  5. 子语句修饰语:选修’C language’或’Database’
select Student.sno,sname,sdept,SC.cno,cname,grade 
from Student,SC,Course 
where Student.sno=SC.sno and Course.cno=SC.cno 
and SC.cno in 
(select SC.cno from SC,Course where (cname='C language' or cname='Database') and SC.cno=Course.cno);

在这里插入图片描述

  • 两门全部包括:
  1. 中心语:学生的基本信息
  2. 三表按照索引进行合并Student.sno=SC.sno and Course.cno=SC.cno
  3. 修饰语:至少选修’C language’或’Database’课程
  4. 子语句中心语:课程
  5. 子语句修饰语:选修’C language’和’Database’
select Student.sno,sname,sdept,SC.cno,grade 
from Student,SC,Course 
where Student.sno=SC.sno and Course.cno=SC.cno 
and SC.sno in (select SC.sno from SC,Course where (cname='C language' or cname='Database') 
and SC.cno=Course.cno group by SC.sno having count(SC.cno)>=2);

在这里插入图片描述


  1. 列出所有课程被选修的详细情况,包括课程号、课程名、学号、姓名及成绩
  1. 中心语:课程号、课程名、学号、姓名及成绩
  2. 三表按照索引进行合并Student.sno=SC.sno and Course.cno=SC.cno
  3. 修饰语:课程被选修
select Course.cno,cname,Student.sno,sname,grade 
from Student,SC,Course 
where Student.sno=SC.sno and SC.cno=Course.cno 
order by Course.cno;

在这里插入图片描述


  1. 查询只被一名学生选修的课程的课程号、课程名
  1. 中心语:课程号、课程名
  2. 二表按照索引进行合并Course.cno=SC.cno
  3. 修饰语:只被一名学生选修的课程
select SC.cno,cname 
from SC,Course where Course.cno=SC.cno 
group by SC.cno,cname having count(SC.cno)=1;

在这里插入图片描述


11.使用嵌套查询列出选修了’Data structure’课程的学生学号和姓名

  1. 中心语:学生学号和姓名
  2. 三表按照索引进行合并Student.sno=SC.sno and Course.cno=SC.cno
  3. 修饰语:选修了’Data structure’课程
  4. 子语句中心语:课程
  5. 子语句修饰语:选修了’Data structure’
select Student.sno,sname 
from Student,SC,Course 
where Student.sno=SC.sno and Course.cno=SC.cno 
and SC.cno in 
(select SC.cno from SC,Course where SC.cno=Course.cno and Course.cname='Data structure');

在这里插入图片描述


  1. 使用嵌套查询查询其它系中年龄小于AI的某个学生的学生姓名、年龄和院系;
  1. 中心语:学生姓名、年龄和院系
  2. 从表Student选取
  3. 修饰语1:其它系
  4. 修饰语2:年龄小于AI的某个学生的年龄
select sname,sage,sdept 
from Student 
where sage<any (select sage from Student where sdept='AI') and sdept<>'AI';

在这里插入图片描述

参考文章

https://blog.csdn.net/qq_43776450/article/details/95965866
https://blog.csdn.net/qq_43717736/article/details/107722502
https://max.book118.com/html/2017/0326/97190702.shtm

这篇关于【数据库】实验五 数据库综合查询|多表查询、聚集函数、orderby、groupby的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/777475

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

ural 1026. Questions and Answers 查询

1026. Questions and Answers Time limit: 2.0 second Memory limit: 64 MB Background The database of the Pentagon contains a top-secret information. We don’t know what the information is — you

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是

Mybatis中的like查询

<if test="templateName != null and templateName != ''">AND template_name LIKE CONCAT('%',#{templateName,jdbcType=VARCHAR},'%')</if>