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

news/2024/5/20 10:50:36

写在前面

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.mrgr.cn/p/35778846

相关文章

WIFI加密方式对无线速率的影响

目录无线加密三种选择:WEP、WPA和WPA2测试平台和测试方法非加密和WEP加密测试 结果差别巨大非加密条件下 300M无线路由实测WEP加密条件下 300M无线路由实测TKIP加密算法:WPA与WPA2成绩低迷WPA加密(TKIP加密算法)条件下 300M无线路由实测WPA2加密(TKIP加密算法)条件下 300…

10.Godot Input与自定义单例的使用

单例 单例是一个可以在任何一个脚本中对其进行直接访问的对象,分为内置单例与自定义单例。每个单例都是独一无二的对象。内置单例不是节点,主要成员是各类 Server,开发者可以使用它们直接控制游戏程序的图形与音效等内容。此外,还…

偶然看到一个古老的算法

九韶精选,你值得拥有只能说秦哥牛批!!!那个破三角公式到现在还没记住c++代码实现 #include<bits/stdc++.h> using namespace std; int n; int main(){cin>>n;//输入多项式的次数double *a=new double[n+1];//n次多项式申请n+1大小的数组for(int i=n;i>=0;i--)//…

JVM 内存溢出、泄漏与引用

1、引用概述在栈上的reference类型存储的数据代表某块内存地址,称reference为某内存、某对象的引用。实际上引用分为很多种,从强到弱分为:强引用 > 软引用 > 弱引用 > 虚引用。平常我们使用的引用实际上是强引用,各种引用有自己的特点,强引用就是Java中普通的对象…

解决VSCode中“#include错误,请更新includePath“问题

目录 1、问题原因 2、解决办法 1、问题原因 在编写C程序时&#xff0c;想引用头文件但是出现如下提示&#xff1a; &#xff08;1&#xff09;首先检查要引用的头文件是否存在&#xff0c;位于哪里。 &#xff08;2&#xff09;如果头文件存在&#xff0c;在编译时提醒VSCo…

CMakeLists.txt中如何添加编译选项?

1. 引子 编译器有多种可供选择&#xff0c;如g、c、clang等&#xff0c;如下以c作为示例。 2. 使用CMAKE_CXX_FLAGS添加编译选项 在Makefile中可能用类似如下的指令来添加编译选项&#xff1a; /usr/bin/c -Wall -Wextra -Wno-sign-compare -Wno-unused-variable -Wno-unuse…

深入理解Python协程:从基础到实战

title: 深入理解Python协程:从基础到实战 date: 2024/4/27 16:48:43 updated: 2024/4/27 16:48:43 categories:后端开发tags:协程 异步IO 并发编程 Python aiohttp asyncio 网络爬虫第1章:协程基础 1.1 协程概念介绍 协程(Coroutines)是一种特殊的软件构造,它允许程序在执…

leetCode60. 排列序列

leetCode60. 排列序列 方法一:语法版&#xff0c;面试官不认可的方法&#xff1a;next_permutation函数 // 方法一&#xff1a;使用next_permutation函数&#xff0c;将某容器设置为当前按照字典序 // 的下一个全排列的内容 class Solution { public:string getPermutation(in…

四数之和 ---- 双指针

题目链接 题目: 分析: 我们已经知道三数之和如何求取, 并去重了 三数之和 那么四数之和同理, 需要固定两个数a和b 然后用"双指针算法" , 只要两指针之和等于target-a-b即可同样对于四个数都要进行去重 代码: class Solution {public List<List<Integer>…

Vue入门到关门之前端引入

一、前端发展历史 1、什么是前端&#xff1f; 前端&#xff1a;针对浏览器的开发&#xff0c;代码在浏览器运行后端&#xff1a;针对服务器的开发&#xff0c;代码在服务器运行 2、前后端不分的时代 互联网发展的早期&#xff0c;前后端开发是一体的&#xff0c;前端代码是…

Git 使用教程(新手学习)

Git 是一种分布式版本控制系统,用于管理软件项目的源代码。它是由 Linux 之父 Linus Torvalds 开发的,并已经成为了现代软件开发领域中最流行的版本控制系统之一。 使用 Git 可以追踪代码的历史修改记录,方便团队协作、代码共享和代码重构。Git 的基本工作流程如下: 在开始…

jwt的思路

我们通常在项目中使用登录接口的时候,会利用jwt的token实现一个对其他接口的一个请求头这层的一个验证,那么如何去应用呢,正常来讲我们需要写出两个功能 1.jwt基本的加密和解密 2.jwt的一个拦截器,检验token请求头使用依赖 jdk1.8仅需<dependency><groupId>io.json…

一道编程题引发的C中关于数组、指针的思考

7-163 谷歌的招聘由一道编程题引发的C中关于数组、指针的思考先来看三种数组定义方式 #include <stdio.h> #include <stdlib.h>int main(){//方式1int array_1[4] = {1};//方式2,变长数组int n2;scanf("%d",&n2);int array_2[n2]; //使用变长数组pri…

【003_音频开发_基础篇_Linux进程通信(20种你了解几种?)】

003_音频开发_基础篇_Linux进程通信&#xff08;20种你了解几种&#xff1f;) 文章目录 003_音频开发_基础篇_Linux进程通信&#xff08;20种你了解几种&#xff1f;)创作背景Linux 进程通信类型fork() 函数fork() 输出 2 次fork() 输出 8 次fork() 返回值fork() 创建子进程 方…

力扣-498. 对角线遍历

1.题目 题目地址(498. 对角线遍历 - 力扣(LeetCode)) https://leetcode.cn/problems/diagonal-traverse/ 题目描述 给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。示例 1:输入:mat = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,…

在控制台实现贪吃蛇

在控制台实现贪吃蛇 前备知识Win32APICOORD这个结构体的声明如下&#xff1a;GetStdHandle 函数GetConsoleCursorInfo 函数SetConsoleCursorInfo 函数 SetConsoleCursorPosition 函数getAsyncKeyState 函数 控制台窗口的大小以及字符打印介绍控制台中的坐标宽字符及本地化介绍s…

MySQL第一次作业

解压完安装包 以管理员进入命令行 初始化并记住初始随机密码 创建服务名称 启动mysql 使用随机密码登录 修改密码 退出并重登服务器 MySQL创建数据库和表 创建数据库 创建表 1.进入数据库 创建表 向表中插入数据

启动 UE4编辑器报 加载 Plugin 失败

启动 UE4编辑器报 加载 Plugin 失败&#xff0c;报如下错误&#xff1a; Plugin ‘SteamVR’ failer to load because module ‘SteamVR’ could not be found. Please ensure the plugin is properly installed, otherwise consider disabling the plugin for this project. …

[ARC176F] Colorful Star

数数My Blogs [ARC176F] Colorful Star 感觉很考验想象力和计数基本功 QWQ。 首先考虑给定了局面之后如何进行判定。考虑把覆盖的过程倒着做:如果 \(i\) 旁边有和它颜色相同的棋子,那它就可以变成任意的颜色,然后要求最终能不能 \(n\) 种颜色都只剩一种。 然后这个还是不太本…

LayuiMini使用时候初始化模板修改(下载源码)

忘记加了 下载 地址 &#xff1a; layui-mini: layuimini&#xff0c;后台admin前端模板&#xff0c;基于 layui 编写的最简洁、易用的后台框架模板。只需提供一个接口就直接初始化整个框架&#xff0c;无需复杂操作。 LayuiMini使用时候初始化模板官网给的是&#xff1a; layu…