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

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

SQL Server数据库迁移到MySQL的完整指南

《SQLServer数据库迁移到MySQL的完整指南》在企业应用开发中,数据库迁移是一个常见的需求,随着业务的发展,企业可能会从SQLServer转向MySQL,原因可能是成本、性能、跨平台兼容性等... 目录一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据二、迁移工具的选择2.1

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo