(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

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

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

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

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

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

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

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

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

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

8、删除工作证号为"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

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 BY
	Dr_no 
HAVING
	COUNT( Skd_seg )>=(
	SELECT
		MIN( Skd_seg ) 
	FROM
	SCHEDULE 
	);
SELECT * FROM work_count

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` ));
SELECT
	Dr_name,
	Drlv_name,
	Dept_name 
FROM
	doctor_info

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

插入失败,原因是:

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

相关推荐
计算机学长felix3 分钟前
基于SpringBoot的“校园交友网站”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·毕业设计·交友
小码的头发丝、1 小时前
Django中ListView 和 DetailView类的区别
数据库·python·django
Karoku0661 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
周全全2 小时前
MySQL报错解决:The user specified as a definer (‘root‘@‘%‘) does not exist
android·数据库·mysql
白云如幻2 小时前
MySQL的分组函数
数据库·mysql
荒川之神2 小时前
ORACLE 闪回技术简介
数据库·oracle
时差9533 小时前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
让学习成为一种生活方式3 小时前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
秋意钟4 小时前
MySQL日期类型选择建议
数据库·mysql
Dxy12393102165 小时前
python下载pdf
数据库·python·pdf