10-19 查询学生成绩及汇总其总学分(MSSQL)

2023-12-07 14:20

本文主要是介绍10-19 查询学生成绩及汇总其总学分(MSSQL),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本题目要求编写SQL语句,
检索出学生‘张三’选修的所有及格的课程及成绩,最后计算他所获得的总学分。

注意:选课成绩在60分以上才能获得相应的学分。cou表中credit列为某课程的学分值 。假定学生姓名没有重名的情况。
输出成绩结果集忽略顺序只对比数据。

提示:可使用WITH ROLLUP语句或UNION子句汇总结果。

表结构:

请在这里写定义表结构的SQL语句。例如:

-- 专业表
CREATE TABLE major (  
  mno char(2) NOT NULL,
  mname nvarchar(20) NOT NULL,
  PRIMARY KEY (mno)
);
-- 学生表
CREATE TABLE stu (    
  sno char(4) NOT NULL,
  sname nvarchar(8) NOT NULL,
  sex smallint DEFAULT NULL,
  mno char(2) DEFAULT NULL,
  birdate datetime DEFAULT NULL,
  memo ntext,
  PRIMARY KEY (sno),
  CONSTRAINT  fk_stu_mno FOREIGN KEY (mno) REFERENCES major (mno)
);
-- 课程表
CREATE TABLE  cou  (  
   cno  char(4) NOT NULL,
   cname  nvarchar(30) NOT NULL,
   credit  smallint DEFAULT NULL,
   ptime  char(5) DEFAULT NULL,
   teacher  nvarchar(10) DEFAULT NULL,
  PRIMARY KEY ( cno )
);
-- 学生选课成绩表
CREATE TABLE  sc  (  
   sno  char(4) NOT NULL,
   cno  char(4) NOT NULL,
   grade  decimal(4,1) DEFAULT NULL,
  PRIMARY KEY ( sno , cno ),
  CONSTRAINT  fk_sc_cno  FOREIGN KEY ( cno ) REFERENCES  cou  ( cno ),
  CONSTRAINT  fk_sc_sno  FOREIGN KEY ( sno ) REFERENCES  stu  ( sno )
);
 

表样例

请在这里给出上述表结构对应的表样例。例如

stu表:

stu.JPG

 cou表:

cou.JPG

 sc表:

sc.JPG

输出样例:

请在这里给出输出样例。例如:

查询结果.PNG

 思路:

这个查询语句的目的是获取学生姓名为"张三"的课程成绩信息以及该学生所修课程的总学分。

1.使用内连接将"sc"表和"cou"表连接起来,连接条件是"sc"表中的课程号(cno)等于"cou"表中的课程号(cno)。

2.使用子查询获取学生姓名为"张三"的学生学号(sno)。 在连接后的结果中,使用WHERE子句过滤出成绩大于等于60的记录。

3.使用UNION ALL操作符将上述结果与另一个查询结果连接起来。这个查询结果返回了三个NULL值和学生所修课程的总学分。

4.使用子查询获取学生姓名为"张三"的学生学号(sno),并在WHERE子句中过滤出成绩大于等于60的记录。

5.最终的结果将包括学生姓名为"张三"的课程成绩信息以及该学生所修课程的总学分。

SELECT sc.cno as 课程号,cou.cname as 课程名,sc.grade as 成绩,cou.credit as 学分
FROM sc
INNER JOIN cou ON sc.cno = cou.cno
WHERE sc.sno = (SELECT snoFROM stuWHERE sname = N'张三')
AND sc.grade >= 60
UNION ALL
SELECT NULL, NULL, NULL, SUM(cou.credit)
FROM sc
INNER JOIN cou ON sc.cno = cou.cno
WHERE sc.sno = (SELECT snoFROM stuWHERE sname = N'张三'
)
AND sc.grade >= 60

这篇关于10-19 查询学生成绩及汇总其总学分(MSSQL)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

MySQL不使用子查询的原因及优化案例

《MySQL不使用子查询的原因及优化案例》对于mysql,不推荐使用子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,本文给大家... 目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EX

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

Java 枚举的常用技巧汇总

《Java枚举的常用技巧汇总》在Java中,枚举类型是一种特殊的数据类型,允许定义一组固定的常量,默认情况下,toString方法返回枚举常量的名称,本文提供了一个完整的代码示例,展示了如何在Jav... 目录一、枚举的基本概念1. 什么是枚举?2. 基本枚举示例3. 枚举的优势二、枚举的高级用法1. 枚举

详解Spring Boot接收参数的19种方式

《详解SpringBoot接收参数的19种方式》SpringBoot提供了多种注解来接收不同类型的参数,本文给大家介绍SpringBoot接收参数的19种方式,感兴趣的朋友跟随小编一起看看吧... 目录SpringBoot接受参数相关@PathVariable注解@RequestHeader注解@Reque

Redis KEYS查询大批量数据替代方案

《RedisKEYS查询大批量数据替代方案》在使用Redis时,KEYS命令虽然简单直接,但其全表扫描的特性在处理大规模数据时会导致性能问题,甚至可能阻塞Redis服务,本文将介绍SCAN命令、有序... 目录前言KEYS命令问题背景替代方案1.使用 SCAN 命令2. 使用有序集合(Sorted Set)

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核