(2022级)成都工业学院数据库原理及应用实验六: SQL DML(增、删、改)

写在前面

1、基于2022级软件工程/计算机科学与技术实验指导书

2、成品仅提供参考

3、如果成品不满足你的要求,请寻求其他的途径

运行环境

window11家庭版

Navicat Premium 16

Mysql 8.0.36

实验要求

在实验三的基础上完成下列查询:

1、在科室表中增加一个二级科室,其科室编码为“10401”

2、在科室表中增加一个二级科室,其上级科室编码为“10600”。

3、在医生表中增加一个医生,要求其级别编码为7。

4、将“一级专家”诊疗费改为120。

5、将医生“万春”在2022年4月18日的值班时段调整为上午。

6、删除医生编号为‘D001’的值班记录。

7、删除医生‘朱强’在2022年4月18日的值班记录。

8、删除工作证号为“D016”的医生。

9、创建一个表work_count,包含两个属性工作证号、值班次数。使用子查询的形式将每个医生的工作证号、值班次数存入表work_count。从work_count查询出医生的工作证号、值班次数。

10、定义一个视图doctor_info,包含工作证号,医生姓名、科室编码、科室名称、医生级别编码、级别名称,其中工作证号来自Doctor表,科室编码来至department表,医生级别编码DoctorLevel表。使用该视图完成查询:查询医生姓名、科室名称、级别名称。

11、基于上题中定义的视图doctor_info,插入一个医生级别(7,‘测试1’),插入一个医生(’D020’,’测试医生’),观察是否成功,并思考产生这种结果的原因?

实验过程

1、在科室表中增加一个二级科室,其科室编码为“10401”

INSERT into department VALUES("10401","新增科室1","2",NULL);
SELECT * FROM department

546cc30d09024a45aebb0a741c8010c0.png

2、在科室表中增加一个二级科室,其上级科室编码为“10600”。

INSERT into department VALUES("12345","新增科室2","2",10600);
SELECT * FROM department

698a6241d8fe4ae487426738e709d06f.png

3、在医生表中增加一个医生,要求其级别编码为7。

SET FOREIGN_KEY_CHECKS = 0; --禁用外键
INSERT into doctor VALUES("1234","新增医生","123456","2022-2-2","7","躺平");
SET FOREIGN_KEY_CHECKS = 1; --重启外键
SELECT * FROM doctor

931f3bb28d2a4b8b83735d79c36da8f7.png

4、将“一级专家”诊疗费改为120。

UPDATE doctorlevel SET Drlv_fee="120" WHERE Drlv_no=1;
SELECT * FROM doctorlevel

5e749cd9810b4a93b010886729846165.png

5、将医生“万春”在2022年4月18日的值班时段调整为上午。

UPDATE doctor INNER JOIN schedule ON doctor.Dr_no=schedule.Dr_no SET Skd_seg=1 WHERE Dr_name="万春" AND Skd_Date="2022-4-18";
SELECT * FROM schedule

80602c2765904899b981dbceadb8ea92.png

6、删除医生编号为‘D001’的值班记录。

DELETE FROM schedule WHERE Dr_no="D001";
SELECT * FROM schedule

8bf3ece44fcf4f6b81564d73001a7f1b.png

7、删除医生‘朱强’在2022年4月18日的值班记录。

DELETE schedule FROM schedule INNER JOIN doctor ON schedule.Dr_no=doctor.Dr_no WHERE Dr_name="朱强" AND Skd_Date="2022-4-18";
SELECT * FROM schedule

ae3ab86ba03d4e63916cc4784fea5156.png8、删除工作证号为“D016”的医生。

SET FOREIGN_KEY_CHECKS = 0; -- 禁用外键
DELETE FROM doctor WHERE Dr_no = 'D016';
DELETE FROM schedule WHERE Dr_no = 'D016';
SET FOREIGN_KEY_CHECKS = 1; -- 重启外键
SELECT * FROM doctor;
SELECT * FROM schedule

3eefe739d4f64ca6ac3e13bcf0cc0c8d.png

459ec2c0c7ed422faa0be9895f44903a.png

9、创建一个表work_count,包含两个属性工作证号、值班次数。使用子查询的形式将每个医生的工作证号、值班次数存入表work_count。从work_count查询出医生的工作证号、值班次数。

CREATE TABLE `work_count` ( `Dr_id` CHAR ( 4 ) NOT NULL, `Skd_time` TINYINT NOT NULL, PRIMARY KEY ( `Dr_id` ) ) ENGINE = INNODB DEFAULT CHARSET = utf8mb3;
INSERT INTO work_count ( Dr_id, Skd_time ) SELECT
Dr_no,
count( Skd_seg ) 
FROM
SCHEDULE 
GROUP BYDr_no 
HAVINGCOUNT( Skd_seg )>=(SELECTMIN( Skd_seg ) FROMSCHEDULE );
SELECT * FROM work_count

e298f76cb45e4fb5b086247d302571b9.png

10、定义一个视图doctor_info,包含工作证号,医生姓名、科室编码、科室名称、医生级别编码、级别名称,其中工作证号来自Doctor表,科室编码来至department表,医生级别编码DoctorLevel表。使用该视图完成查询:查询医生姓名、科室名称、级别名称。

CREATE VIEW `doctor_info` AS SELECT
`doctor`.`Dr_no` AS `Dr_no`,
`doctor`.`Dr_name` AS `Dr_name`,
`doctorlevel`.`Drlv_no` AS `Drlv_no`,
`doctorlevel`.`Drlv_name` AS `Drlv_name`,
`department`.`Dept_no` AS `Dept_no`,
`department`.`Dept_name` AS `Dept_name` 
FROM((`doctor`JOIN `doctorlevel` ON ( `doctor`.`Drlv_no` = `doctorlevel`.`Drlv_no` ))JOIN `department` ON ( `doctor`.`Dept_no` = `department`.`Dept_no` ));
SELECTDr_name,Drlv_name,Dept_name 
FROMdoctor_info

7f789a1c4b614f5497b33532ae640575.png

11、基于上题中定义的视图doctor_info,插入一个医生级别(7,‘测试1’),插入一个医生(’D020’,’测试医生’),观察是否成功,并思考产生这种结果的原因?

--第一种1393报错:表示您不能通过一个连接视图(join view)修改超过一个基表
INSERT INTO doctor_info ( Dr_no, Dr_name, Drlv_no, Drlv_name, Dept_no, Dept_name )
VALUES( NULL, NULL, "7", "测试1", NULL, NULL);
INSERT INTO doctor_info ( Dr_no, Dr_name, Drlv_no, Drlv_name, Dept_no, Dept_name )
VALUES( "D020","测试医生",NULL, NULL, NULL, NULL);

f6ba5b58f49142a1b2ad129004d0d955.png

--第二种1423报错:表示您尝试插入数据到一个视图,但是视图对应的基表中有一个字段没有默认值,而且在插入操作中没有为该字段提供值。
INSERT INTO doctor_info ( Drlv_no, Drlv_name )
VALUES( "7", "测试1" );
INSERT INTO doctor_info ( Dr_no, Dr_name )
VALUES( "D020", "测试医生" );

b757322e809a496890b7e8be376b720b.png

插入失败,原因是:

视图在数据库中是一种虚拟表,它是由一个或多个实际表(基表)上的查询结果构成的。视图本身不存储数据,它只是展示基表数据的一种方式。视图只能查,不能增删改

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

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

相关文章

神经网络进阶学习文章(一)

1.讲解YOLO有关知识 深入浅出Yolo系列之Yolov5核心基础知识完整讲解 - 知乎 (zhihu.com) 2.目标检测算法综述 目标检测算法综述 - 知乎 (zhihu.com) 3.TensorFlow详解,当然现在用的最多的是Pytorch框架了 谷歌大神带你十分钟看懂TensorFlow - 知乎 (zhihu.co…

黑色主题个人主页HTML源码

源码介绍 黑色主题个人主页HTML源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面 效果预览 源码下载 黑色主题个人主页HTML源码

js的reduce

在JavaScript中,reduce() 是数组(Array)对象的一个方法,用于将数组中的所有元素归并成一个单一的输出值(通常是数字,但也可以是字符串或其他类型)。这个方法通过接收一个函数作为累加器&#xf…

LeetCode题练习与总结:编辑距离--72

一、题目描述 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 示例 1: 输入:word1 "horse", word2…

window cmd/PowerShell 实时查看监控日志命令Get-Content,类似与linux shell的tail命令

命令 最近10行,使用UTF8字符编码 Get-Content app.log -Wait -Tail 10 -Encoding UTF8查找“关键字”,忽略大小写,显示关键字的上下1行 Get-Content app.log -Wait -Tail 10 -Encoding UTF8 | Select-String "keyword" -CaseSen…

clickhouse学习笔记04

ClickHouse高可用之ReplicatedMergeTree引擎介绍 ClickHouse高可用架构准备-环境说明和ZK搭建 RPM安装ClickHouse 上传我们的clickhouse rpm文件。 安装: 中途需要输入用户名和密码 可以不设置 直接回车。 启动: 查看状态: 查看端口是否占用…

【状态压缩 并集查找 图论】2157. 字符串分组

本文涉及知识点 状态压缩 并集查找 图论 LeetCode2157. 字符串分组 给你一个下标从 0 开始的字符串数组 words 。每个字符串都只包含 小写英文字母 。words 中任意一个子串中,每个字母都至多只出现一次。 如果通过以下操作之一,我们可以从 s1 的字母集…

Rust常用特型之AsRef和AsMut特型

在Rust标准库中&#xff0c;存在很多常用的工具类特型&#xff0c;它们能帮助我们写出更具有Rust风格的代码。 今天我们要学习的AsRef和AsMut&#xff0c;和前面学习的Deref和DerefMut有那么一点混淆的地方。 当一个类型U实现了AsRef<T>&#xff0c;那么我们可以高效的从…

K8S哲学 - Pod、RC、RS、deployment

pod&#xff08;最小的可部署单元&#xff09; 容器组&#xff08;运行一个或多个容器&#xff09; Pod(容器组&#xff09;是Kubernetes 中最小的可部署单元。 一个Pod(容器组&#xff09;包含了一个应用程序容器&#xff08;某些情况下是多个容器&#xff09;、存储资源、 一…

C++练级之路——类和对象(中二)

1、运算符重载 C为了增强代码的可读性引入了运算符重载&#xff0c;运算符重载是具有特殊函数名的函数&#xff0c;也是具有其返回值类型&#xff0c;函数名字以及参数列表&#xff0c;其返回值类型和参数列表与普通的函数类似。 函数名字为&#xff1a;关键字operator后面接需…

【C++初识继承】

博主首页&#xff1a; 有趣的中国人 专栏首页&#xff1a; C进阶 本篇文章主要讲解 继承 的相关内容 目录 1. 继承的概念和定义 1.1 继承的概念 1.2 继承的定义 1.2.1 继承定义格式 1.2.2 继承方式与访问修饰限定符 2. 基类和派生类对象赋值转换 3. 继承中的作用域 …

npm常用命令详解(二)

npm&#xff08;Node Package Manager&#xff09;是Node.js的包管理器&#xff0c;它允许你安装、共享和管理Node.js代码库。以下是一些常用的npm命令及其详解&#xff0c;以帮助您更好地理解和使用它。 1. npm doc 功能&#xff1a;查看指定包的文档。 语法&#xff1a;np…

linux离线安装mysql

一、下载mysql 地址&#xff1a;MySQL 这里选择64为还是32为要根据操作系统来 uname -m 二、上传解压配置mysql 使用root账户登录linux服务器&#xff0c;在opt文件下创建mysql文件夹 cd /opt sudo mkdir mysql 使用Xftp上传mysql压缩包到此文件夹下(自行决定路径) cd mysql/…

基于Kubernetes集群构建MongoDB

基于Kubernetes集群构建MongoDB 作者:行癫(盗版必究) 一:基础环境 1.Kubernetes集群正常运行 2.Harbor私有仓库正常运行 二:MongoDB项目部署 ​ MongoDB项目对应Kubernetes的yaml文件: --- apiVersion: v1 kind: Namespace metadata:name: m

力扣:104. 二叉树的最大深度(Java,DFS,BFS)

目录 题目描述&#xff1a;输入&#xff1a;输出&#xff1a;代码实现&#xff1a;1.深度优先搜索&#xff08;递归&#xff09;2.广度优先搜索&#xff08;队列&#xff09; 题目描述&#xff1a; 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从…

【QT进阶】Qt http编程之后端API测试工具postman使用介绍

往期回顾 【QT进阶】Qt Web混合编程之使用ECharts显示各类折线图等-CSDN博客 【QT进阶】Qt Web混合编程之实现ECharts数据交互动态修改-CSDN博客 【QT进阶】Qt http编程之http与https简单介绍-CSDN博客 【QT进阶】Qt http编程之后端API测试工具postman使用介绍 其实这个工具的…

nextjs getStaticProps 和 getServerSideProps 区别

getStaticProps 和 getServerSideProps 是 Next.js 中用于数据获取的两个重要函数&#xff0c;它们在页面渲染时分别起到不同的作用。 1、getStaticProps&#xff1a; 用途&#xff1a;主要用于静态生成页面&#xff0c;即在构建时获取数据并将其预先注入到页面中。执行环境&…

Pytorch的下载安装

本文为自己整理的Pytorch下载相关的内容笔记&#xff0c;以便日后查阅 一. 基本命令 1.查看conda版本 conda --version2.创建conda新环境 conda create –n 名称 python版本3.查看已经创建的conda环境 conda info --envs4.进入虚拟环境 conda activate 环境名称 为了避免…

【Day 3】Ajax + Vue 项目、路由 + Nginx

1 Ajax Asynchronous JavaScript And XML 异步的 JavaScript 和 XML 作用&#xff1a; 数据交换 通过 Ajax 可以给服务器发送请求&#xff0c;并获取服务器响应的数据 异步交互 可以在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部分网页的技术&#xf…

【大模型应用极简开发入门(1)】LLM概述:LLM在AI中所处位置、NLP技术的演变、Transformer与GPT、以及GPT模型文本生成逻辑

文章目录 一. AI中大语言模型的位置与技术发展1. 从AI到Transformer2. NLP&#xff1a;自然语言处理3. LLM大型语言模型&#xff1a;NLP的一种特定技术3.1. LLM定义3.2. LLM的技术发展3.2.1. n-gram模型3.2.2. RNN与LSTM 二. Transformer在LLM中脱颖而出1. Transformer架构能力…