【数据库】实验五 数据库综合查询|多表查询、聚集函数、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

相关文章

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI