数据库的定义和维护—学生选课

2024-04-28 19:12

本文主要是介绍数据库的定义和维护—学生选课,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文提供了所有的查询操作来显示出操作前后数据库中表的改变, 插入的数据保证了每一个题目有输出结果

学生选课数据库

-- 创建数据库
CREATE DATABASE XSXK

学生选课相关表操作

学生表

-- 建表
CREATE TABLE student(sno CHAR(10) PRIMARY KEY,sname VARCHAR(8) NOT NULL,ssex CHAR(2) CHECK(ssex IN('男','女')) DEFAULT('男') NOT NULL,sage SMALLINT CHECK(sage > 18),sdept VARCHAR(30),stel VARCHAR(13)
)-- 添加记录
INSERT INTO student
VALUES
('2024010001','张三','男',20,'数学与计算机科学学院','11111111111'),
('2024010002','李四','男',25,'马克思主义学院','22222222222'),
('2024010003','王五','男',29,'数学与计算机科学学院','33333333333'),
('2024010004','张三','女',23,'数学与计算机科学学院','44444444444'),
('2024010005','赵七','男',22,'材料科学与工程学院','55555555555'),
('2024010006','王华','女',20,'数学与计算机科学学院','66666666666'),
('2024010007','老八','男',19,'管理学院','77777777777'),
('2024010008','李萍','女',22,'外语学院','88888888888'),
('2024010009','十号','女',20,'数学与计算机科学学院','99999999999'),
('2024010010','十一号','男',19,'管理学院','00000000000'),
('2100001','十一号','男',19,'管理学院','123123123123')-- 查询表
SELECT * FROM student-- 删除所有信息
DELETE FROM student WHERE sno = sno

课程表

-- 建表
CREATE TABLE Course(cno CHAR(10) PRIMARY KEY,cname VARCHAR(16) NOT NULL,ccredit SMALLINT NOT NULL,cpno VARCHAR(10)
)-- 添加记录
INSERT INTO Course
VALUES
('01','数据库原理与应用',3,'10'),
('02','JAVA',4,'10'),
('03','数据结构',5,'9'),
('04','计算机组成原理',3,'9'),
('05','计算机网络',4,'9'),
('06','高等数学下',5,'07'),
('07','高等数学上',5,NULL),
('08','线性代数',3,NULL),
('09','离散数学',3,'10'),
('10','C语言',3,'06')-- 查询表
SELECT * FROM Course-- 删除所有信息
DELETE FROM Course WHERE cno = cno

选课表

-- 建表
CREATE TABLE SC(sno CHAR(10),cno CHAR(10),grade SMALLINT,PRIMARY KEY(sno,cno),FOREIGN KEY (sno) REFERENCES student(sno) ON DELETE CASCADE,FOREIGN KEY (cno) REFERENCES Course(cno) ON DELETE CASCADE
)-- 添加记录
INSERT INTO SC 
VALUES
('2024010001','01',65),
('2024010001','02',88),
('2024010001','03',89),
('2024010001','04',65),
('2024010001','05',77),
('2024010001','06',65),
('2024010001','07',66),
('2024010001','08',95),
('2024010001','09',68),
('2024010001','10',87),
('2024010002','01',80),
('2024010002','03',2),
('2024010002','09',85),
('2024010004','01',15),
('2024010004','06',91),
('2024010005','03',100),
('2024010005','06',95),
('2024010005','07',70),
('2024010006','01',88),
('2024010006','08',80),
('2024010007','02',NULL),
('2024010007','09',NULL),
('2024010008','02',80),
('2024010009','05',27),
('2024010010','10',89),
('2100001','05',74)-- 查询表
SELECT * FROM SC-- 删除所有信息
DELETE FROM SC WHERE sno = sno

删除和修改示例

1.对于每个学生,求学生的选课门数和平均成绩,并把结果存入学生选课数据库中

-- 创建一个学生平均成绩表, 列包括学生学号, 学生选课门数, 学生平均成绩
CREATE TABLE avg_grade(sno CHAR(10) PRIMARY KEY,scnumber SMALLINT,ag SMALLINT
)-- 插入数据
INSERT INTO avg_grade
SELECT s.sno, COUNT(*), AVG(grade)
FROM student s
LEFT JOIN SC ON s.sno = SC.sno
LEFT JOIN Course c ON SC.cno = c.cno
GROUP BY s.sno-- 查询结果
SELECT * FROM avg_grade

2.将"数据库原理与应用"的学分修改为4

-- 修改
UPDATE Course SET ccredit = 4
WHERE cname='数据库原理与应用'

3.将王华同学选修的数据库原理与应用课程的成绩增加五分

-- 修改
UPDATE SC
SET grade = grade + 5
WHERE sno IN(SELECT sno FROM studentWHERE sname='王华')AND cno IN(SELECT cno FROM CourseWHERE cname='数据库原理与应用')SELECT sno FROM student
WHERE sname='王华'SELECT cno FROM Course
WHERE cname='数据库原理与应用'

4.将管理学院学生选课成绩置为空

-- 修改
UPDATE SC SET grade = NULL
WHERE sno IN(SELECT sno FROM studentWHERE sdept='管理学院')-- 查询管理学院学生选课及成绩
SELECT *
FROM SC
WHERE sno IN(SELECT sno FROM studentWHERE sdept='管理学院')

5.删除选课成绩中低于40分的记录

-- 删除
DELETE FROM SC
WHERE grade < 40-- 查询选课成绩中低于40分的记录
SELECT * FROM SC
WHERE grade < 40

6.删除所有选修"JAVA"的选课记录

-- 删除
DELETE FROM SC
WHERE cno IN(SELECT cno FROM CourseWHERE cname='JAVA')-- 查询所有选修"JAVA"的选课记录
SELECT * FROM SC
WHERE cno IN(SELECT cno FROM CourseWHERE cname='JAVA')

7.删除学生李萍所有的选课记录

-- 删除
DELETE FROM SC
WHERE sno IN(SELECT sno FROM studentWHERE sname='李萍')-- 查询学生李萍所有的选课记录
SELECT * FROM SC
WHERE sno IN(SELECT sno FROM studentWHERE sname='李萍')

8.删除学生学号为'2100001'的学生记录

-- 删除
DELETE FROM student
WHERE sno='2100001'-- 查询学生学号为'2100001'的学生记录
SELECT * FROM student
WHERE sno='2100001'

这篇关于数据库的定义和维护—学生选课的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

SQL Server数据库磁盘满了的解决办法

《SQLServer数据库磁盘满了的解决办法》系统再正常运行,我还在操作中,突然发现接口报错,后续所有接口都报错了,一查日志发现说是数据库磁盘满了,所以本文记录了SQLServer数据库磁盘满了的解... 目录问题解决方法删除数据库日志设置数据库日志大小问题今http://www.chinasem.cn天发

Oracle数据库执行计划的查看与分析技巧

《Oracle数据库执行计划的查看与分析技巧》在Oracle数据库中,执行计划能够帮助我们深入了解SQL语句在数据库内部的执行细节,进而优化查询性能、提升系统效率,执行计划是Oracle数据库优化器为... 目录一、什么是执行计划二、查看执行计划的方法(一)使用 EXPLAIN PLAN 命令(二)通过 S

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

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

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

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

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

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

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