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

相关文章

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

mysql数据库重置表主键id的实现

《mysql数据库重置表主键id的实现》在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,本文主要介绍了mysql数据库重置表主键id的实现,具有一定的参考价值,感兴趣的可以了... 目录关键语法演示案例在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,当我们

浅谈mysql的sql_mode可能会限制你的查询

《浅谈mysql的sql_mode可能会限制你的查询》本文主要介绍了浅谈mysql的sql_mode可能会限制你的查询,这个问题主要说明的是,我们写的sql查询语句违背了聚合函数groupby的规则... 目录场景:问题描述原因分析:解决方案:第一种:修改后,只有当前生效,若是mysql服务重启,就会失效;

MySQL多列IN查询的实现

《MySQL多列IN查询的实现》多列IN查询是一种强大的筛选工具,它允许通过多字段组合快速过滤数据,本文主要介绍了MySQL多列IN查询的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析与优化1.

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程