MySQL实验四:数据更新

news2024/10/5 11:18:28

MySQL实验四:数据更新

目录

  • MySQL实验四:数据更新
  • 导读
    • 表结构
    • sql建表语句
    • 模型图
  • 1、 SQL更新:将所有学生的年龄增加1岁
    • 代码
  • 2、SQL更新:修改“高等数学”课程倒数三名成绩,在原来分数上减5分
    • 代码
    • 解析
  • 3、SQl更新:将所有平均分为75分以上的学生的各门课成绩在原来基础上加5分
    • 代码
    • 解析
  • 4、SQL更新:修改“王大力”的“计算机导论”课程成绩为70
    • 代码
    • 解析
  • 5、SQL更新:修改“9512101”的“C01”课程成绩为85
    • 代码
  • 6、SQL插入:在学生表Student中插入数据
    • 代码
  • 7、SQL删除:删除“数据库基础”的全部记录(包括课程信息,成绩信息)
    • 代码
  • 8、SQL插入:在课程表Course中插入数据
    • 代码
  • 9、SQl删除:删除“张海”的所有成绩记录
    • 代码
  • 10、SQL插入:在选课表SC中插入95211班学生选修C04的选课信息
    • 代码
  • 11、SQL删除:删除“9531102”学生“C05”课程的成绩记录
    • 代码
  • 12、根据employee表中各部门的员工数,更新department表的各对应部门人数
    • 题目
    • 代码
    • 解析

在这里插入图片描述

导读

本期实验,我们将讲解数据更新的一些sql语句的练习题,所有题目的表结构基于下述,与sql语句与模型图一并给出。

表结构

学生数据库db_student包括三个数据表student(学生表)、course(课程表)和sc(选课表)。表结构如下:

1、student(学生表):

SNO学号CHAR(7)

SNAME姓名CHAR(10)

SSEX性别CHAR(2)

SAGE年龄SMALLINT

SDEPT所在系 VARCHAR(20)

2、course(课程表)

CNO课程号CHAR(10)

CNAME课程名VARCHAR(20)

CCREDIT学分SMALLINT

SEMSTER学期SMALLINT

PERIOD学时SMALLINT

3、sc(选课表)

SNO 学号CHAR(7)

CNO 课程号CHAR(10)

GRADE 成绩 SMALLINT

sql建表语句

-- 创建学生表
CREATE TABLE student (
  SNO CHAR(7) PRIMARY KEY,
  SNAME CHAR(10) NOT NULL,
  SSEX CHAR(2),
  SAGE SMALLINT,
  SDEPT VARCHAR(20)
);

-- 创建课程表
CREATE TABLE course (
  CNO CHAR(10) PRIMARY KEY,
  CNAME VARCHAR(20) NOT NULL,
  CCREDIT SMALLINT,
  SEMSTER SMALLINT,
  PERIOD SMALLINT
);

-- 创建选课表
CREATE TABLE sc (
  SNO CHAR(7),
  CNO CHAR(10),
  GRADE SMALLINT,
  PRIMARY KEY (SNO, CNO),
  FOREIGN KEY (SNO) REFERENCES student(SNO),
  FOREIGN KEY (CNO) REFERENCES course(CNO)
);

模型图

在这里插入图片描述

1、 SQL更新:将所有学生的年龄增加1岁

代码

update student set sage=sage+1;

2、SQL更新:修改“高等数学”课程倒数三名成绩,在原来分数上减5分

代码

UPDATE sc
SET sc.grade = sc.grade-5
where cno in(select cno from course where cname='高等数学') and grade is not null
order by grade
limit 3;

解析

  1. UPDATE sc 表示要更新选课表 sc 中的数据。
  2. SET sc.grade = sc.grade-5 表示将选课表 sc 中所有符合条件的记录中的成绩减去 5 分。
  3. where cno in(select cno from course where cname='高等数学') and grade is not null 表示只更新选修了课程名为“高等数学”的课程且成绩不为空的学生的选课记录。其中,cno in(select cno from course where cname='高等数学') 表示选修了课程名为“高等数学”的课程,grade is not null 表示成绩不为空。
  4. order by grade 表示按成绩升序排序。
  5. limit 3 表示最多更新 3 条记录。如果符合条件的记录多于 3 条,则只更新前三条记录。

3、SQl更新:将所有平均分为75分以上的学生的各门课成绩在原来基础上加5分

代码

UPDATE sc
SET GRADE = GRADE + 5
WHERE SNO IN (
SELECT t.SNO
FROM (
SELECT SNO, AVG(GRADE) AS AVG_GRADE
FROM sc
GROUP BY SNO
HAVING AVG_GRADE >= 75
) AS t
);

解析

在这条 SQL 语句的子查询中,使用了别名 t 来代表子查询的结果集。这样做的好处是,可以在 SELECT 子句中引用这个别名,从而简化 SQL 语句的书写。

在这个例子中,子查询的目的是找出平均成绩大于等于 75 分的学生的学号。因此,子查询的结果需要包含两个字段:SNO(学号)和 AVG_GRADE(平均成绩)。在子查询中,使用了 GROUP BY 子句对 SNO 进行分组,并使用 AVG 函数计算每个学生的平均成绩。由于 AVG 函数返回的结果需要命名为 AVG_GRADE,因此使用了 AS 关键字来给这个字段起别名。

4、SQL更新:修改“王大力”的“计算机导论”课程成绩为70

代码

UPDATE sc
SET GRADE = 70
WHERE SNO = (
SELECT SNO
FROM student
WHERE SNAME = '王大力'
    
) AND CNO = (
SELECT CNO
FROM course
WHERE CNAME = '计算机导论'
);

解析

  1. UPDATE sc 表示要更新选课表 sc 中的数据。
  2. SET GRADE = 70 表示将选课表 sc 中符合条件的记录的成绩设置为 70 分。
  3. WHERE SNO = (SELECT SNO FROM student WHERE SNAME = '王大力') AND CNO = (SELECT CNO FROM course WHERE CNAME = '计算机导论') 表示只更新某个学生选修的某一门课程的成绩。其中,SELECT SNO FROM student WHERE SNAME = '王大力' 是一个子查询,用于查找名为“王大力”的学生的学号。同样地,SELECT CNO FROM course WHERE CNAME = '计算机导论' 也是一个子查询,用于查找课程名为“计算机导论”的课程的课程号。因此,WHERE 子句中的条件 SNO = (SELECT SNO FROM student WHERE SNAME = '王大力') AND CNO = (SELECT CNO FROM course WHERE CNAME = '计算机导论') 表示选取符合条件的学生和课程的选课记录进行更新。

5、SQL更新:修改“9512101”的“C01”课程成绩为85

代码


update sc
set grade = 85
where sno='9512101' and cno='C01';

6、SQL插入:在学生表Student中插入数据

Sno:9512102 Sname:刘晨 Ssex:男 Sage:20 Sdept:计算机系

表结构如下:student(学生表)

列名说明数据类型约束
SNO学号CHAR(7)主码
SNAME姓名CHAR(10)NOT NULL
SSEX性别CHAR(2)取“男”或“女”
SAGE年龄SMALLINT
SDEPT所在系VARCHAR(20)默认“计算机系”

代码

INSERT INTO student (SNO, SNAME, SSEX, SAGE, SDEPT)
VALUES ('9512102', '刘晨', '男', 20, '计算机系');

7、SQL删除:删除“数据库基础”的全部记录(包括课程信息,成绩信息)

代码

delete from sc where cno in(select cno from course where  cname='数据库基础' );
delete from course where cname='数据库基础';

8、SQL插入:在课程表Course中插入数据

Cno:C06 Cname:数据结构 Ccredit:5 Semster:4

表结构如下:course(课程表)

列名说明数据类型约束
CNO课程号CHAR(10)主码
CNAME课程名VARCHAR(20)NOT NULL
CCREDIT学分SMALLINT
SEMSTER学期SMALLINT
PERIOD学时SMALLINT

代码

insert into course (cno,cname,ccredit,semster)
values ('C06','数据结构',5,4);
        

9、SQl删除:删除“张海”的所有成绩记录

代码

DELETE FROM sc
WHERE sno IN(SELECT sno FROM student WHERE sname='张海');

10、SQL插入:在选课表SC中插入95211班学生选修C04的选课信息

代码

INSERT INTO sc(sno,cno)
SELECT sno,cno FROM student,course 
WHERE sno LIKE '95211%' and cno='C04';

11、SQL删除:删除“9531102”学生“C05”课程的成绩记录

代码

DELETE FROM sc
WHERE cno='C05' AND sno='9531102';

12、根据employee表中各部门的员工数,更新department表的各对应部门人数

题目

根据employee员工表中各部门的员工数,更新department部门表的各对应部门人数。

员工表employee表结构如下:

在这里插入图片描述
在这里插入图片描述

代码

update department,
  (select dept_id,count(*) as snum from employee group by dept_id)as num1
set emp_num = snum
where num1.dept_id = department.dept_id;

解析

  1. UPDATE department, (select dept_id,count() as snum from employee group by dept_id) as num1 表示要更新部门表 department 中的数据,并使用子查询 (select dept_id,count() as snum from employee group by dept_id) as num1 来获取每个部门的员工人数信息。

  2. set emp_num = snum 表示将部门表 department 中的 emp_num 字段设置为子查询 num1 中的 snum 字段,即将每个部门的员工人数信息更新到部门表中。

  3. where num1.dept_id = department.dept_id 表示将子查询 num1 的结果与部门表 department 进行关联,只更新那些部门的员工人数信息,其部门编号在子查询 num1 中也存在。

    综上所述,这条 SQL 语句的作用是将每个部门的员工人数信息更新到部门表 department 中。子查询 num1 用于计算每个部门的员工人数并将结果存储在一个临时表 num1 中。在主查询中,使用 num1 表来获取每个部门的员工人数信息,并将其更新到部门表的 emp_num 字段中。WHERE 子句中的条件用于将临时表 num1 的结果与部门表 department 进行关联,只更新那些部门的员工人数信息,其部门编号在临时表 num1 中也存在。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/421468.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker详解

一、docker相关命令 1、docker进程相关命令 启动docker服务:systemctl start docker 停止docker服务:systemctl stop docker 重启docker服务:systemctl restart docker 查看docker服务状态:systemctl status docker 设置…

可变形卷积(Deformable Conv)原理解析与torch代码实现

1. 可变形卷积原理解析 1.1 普通卷积原理 传统的卷积操作是将特征图分成一个个与卷积核大小相同的部分,然后进行卷积操作,每部分在特征图上的位置都是固定的。 图1 普通卷积过程 图1所示为普通卷积在输入特征图上进行卷积计算的过程,卷积核…

4.3-4.4学习总结

文章目录 目录 文章目录 1.集合的概念 2.Set集合 1.HashSet类 2.LinkedHashSet类 3.TreeSet类 4.EnumSet类 一、Java集合 1.集合的概念 Java集合类是一种特别有用的工具类 , 可用于存贮数量不等的对象 , 并可以实现经常用的数据结构 , 同时集合还可用于保存具有映射关系的关…

小波变换在脑电数据处理中的特征工程

导读在生物信号中,高效的特征工程和特征提取(FE)是获得最优结果的必要条件。特征可以从时域、频域和时频域三个方面进行提取。时频域特征是最先进的特征,在大多数基于人工智能的信号分析问题中表现良好。本文介绍了小波散射变换(WST)在神经疾病分类中的应…

2023美赛春季赛A题思路数据代码论文分享

文章目录赛题思路赛题详情参赛建议(个人见解)选择队友及任务分配问题(重要程度:5星)2023美赛春季赛A题思路数据代码【最新】赛题思路 (赛题出来以后第一时间在CSDN分享) 最新进度在文章最下方卡片,加入获取…

高效便捷构造 Http 请求

Http 请求构造 如何构造http请求 对于Get请求: 地址栏直接输入点击收藏夹html 中的 link script img a…form 标签 这里我们重点强调 form 标签构造的 http请求 使用 form 标签构造http请求. <!-- 表单标签, 允许用户和服务器之间交互数据 --><form action"ht…

SpringBoot 项目的创建与启动

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

腾讯最热门的 10 款前端开源项目

作为国内知名的互联网公司&#xff0c;腾讯在前端领域做出了很多开源贡献。本文就来盘点腾讯最热门的 10 款前端开源项目&#xff01; wujie 无界微前端是一款基于 Web Components iframe 微前端框架&#xff0c;具备成本低、速度快、原生隔离、功能强等一系列优点。其能够完…

【ChatGPT】教你搭建多任务模型

ChatGPT教你搭建多任务模型 You: tell me what’s your version of gpt ? ChatGPT: As an AI language model developed by OpenAI, I am based on the GPT (Generative Pretrained Transformer) architecture. However, my version is known as GPT-3.5, which is an updat…

【云原生】:用Kubernetes部署MySQL、SpringCloud、Nacos实现高可用

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 文章目录一、 建立Kubernetes集群1. 安装和配置Kubernetes master节点1.1 安装Docker和Kubernetes1.2 初始化master节点…

Spring事务(2)-EnableTransactionManagement实现源码解析

Transactional注解 Transactional是spring中声明式事务管理的注解配置方式。Transactional注解可以帮助我们标注事务开启、提交、者回滚、事务传播、事务隔离、超时时间等操作。 而EnableTransactionManagement是开启Spring 事务的入口。 EnableTransactionManagement 标注启…

《SpringBoot篇》26.SpringBoot整合Jackson超详细教程(附Jackson工具类)

陈老老老板&#x1f9b8;&#x1f468;‍&#x1f4bb;本文专栏&#xff1a;SpringBoot篇&#xff08;主要讲一些与springboot整合相关的内容&#xff09;&#x1f468;‍&#x1f4bb;本文简述&#xff1a;本文讲一下Jackson常见用法&#xff0c;超级详细。&#x1f468;‍&am…

100天精通Python丨办公效率篇 —— 11、Python自动化操作 Email(发送邮件、收邮件、邮箱客户端)

文章目录一、通过SMTP发送电子邮件1.1 定义邮件正文1.2 发送邮件二、收取电子邮件2.1 配置账户信息2.2 连接邮箱服务器2.3 搜索返回消息ID2.4 读取邮件三、使用邮件客户端发送邮件大家好&#xff0c;我是你们的好朋友西红柿&#xff01;今天咱们聊一聊关于Python怎么操作邮件的…

IP协议以及相关技术

这里写目录标题前言正文IP基本认识IP的作用IP和MAC的关系IP地址的基础知识IP地址定义IP地址分类(IPv4)无分类IP地址CIDR子网掩码IPv6基础知识相关技术DNS域名解析ARPDHCPNATICMPIGMP总结参考连接前言 大家好&#xff0c;我是练习两年半的Java练习生&#xff0c;今天我们来讲一…

TypeScript(八)装饰器

目录 前言 定义 类装饰器 基本用法 操作方式 操作类的原型 类继承操作 方法装饰器 属性装饰器 存取器装饰器 参数装饰器 基本用法 参数过滤器 元数据函数实现 参数过滤 效果实践 装饰器优先级 相同装饰器 不同装饰器 装饰器工厂 hooks与class兼容 结语 …

电子的普线图、能级图,能量吸收和共振

一、圆形电子轨道谱线 光谱产生的原因&#xff1a;原子中的电子在轨道上发生跃迁。如莱曼系为电子从n2,3,4等轨道跃迁到n1的基态轨道产生。 圆形电子轨道&#xff1a;中心的圆点为原子核&#xff0c;中心最接近原子核为n1的电子轨道&#xff0c;轨道大小正比于n的平方。如下图…

NoSQL数据库简介

NoSQL代表“不仅是SQL”&#xff0c;指的是一种数据库管理系统&#xff0c;旨在处理大量非结构化和半结构化数据。与使用具有预定义架构的表格格式的传统SQL数据库不同&#xff0c;NoSQL数据库是无模式的&#xff0c;并且允许灵活和动态的数据结构。 NoSQL数据库是必需的&…

kafka笔记

消息队列 场景模式基础架构发送原理异步发送同步发送分区生产者提高吞吐量&#xff1a;数据可靠性ack应答数据重复幂等性事务数据有序数据乱序broker工作流程follower故障leader故障数据查找文件清除高效读写消费者流程消费者组初始化分区分配策略自动提交offset手动提交指定位…

GaussDB数据库事务介绍

目录 一、前言 二、GaussDB事务的定义及应用场景 三、GaussDB事务的管理 四、GaussDB事务语句 五、GaussDB事务隔离 六、GaussDB事务监控 七、总结 一、前言 随着大数据和互联网技术的不断发展&#xff0c;数据库管理系统的作用越来越重要&#xff0c;实现数据的快速读…

Springboot——文件的上传与下载(reggie)

目录 一、文件上传——upload 1.1 介绍 1.2 前端代码实现 1.3 后端代码实现 二、文件下载——download 2.1 介绍 2.2 前端代码编写 2.3 后端代码编写 三、 前端总代码 四、 应用场景 4.1 数据库表 4.1.1 菜品表 4.1.2 菜品口味表 4.1.3 菜品分类及菜品套餐表 4.2 实体类 4.…