From 969d1a824da83c7bbb4bde263e40cc22bdfe0c2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E6=99=97=E5=B8=8C?= <2095000342@qq.com> Date: Mon, 21 Oct 2024 10:21:35 +0000 Subject: [PATCH] 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 林晗希 <2095000342@qq.com> --- ...1 \346\223\215\344\275\234\351\242\230.md" | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 "\346\236\227\346\231\227\345\270\214/20241021 \346\223\215\344\275\234\351\242\230.md" diff --git "a/\346\236\227\346\231\227\345\270\214/20241021 \346\223\215\344\275\234\351\242\230.md" "b/\346\236\227\346\231\227\345\270\214/20241021 \346\223\215\344\275\234\351\242\230.md" new file mode 100644 index 0000000..594d560 --- /dev/null +++ "b/\346\236\227\346\231\227\345\270\214/20241021 \346\223\215\344\275\234\351\242\230.md" @@ -0,0 +1,57 @@ +```sql +-- 利用另外一个文件`initDb.sql`,完成以下题目: +-- 1.1. (10分) 对学生姓名创建普通索引(`idx_StudentName`) +CREATE INDEX idx_StudentName ON student(StudentName); +-- 1.2. (10分) 创建视图`V_StudentHobbyInfo`,其中包含姓名(`StudentName`),爱好(`Hobby`),特长(`Specility`)列,并分别取别名为`vw_StudentName`,`vw_Hoppy`,`vw_Speclitiy +CREATE VIEW V_StudentHobbyInfo AS SELECT s.StudentName vw_StudentName,si.Hobby vw_Hoppy, si.Speciality vw_Speclitiy FROM student s JOIN studentextinfo si ON s.StudentCode=si.StudentCode; + +SELECT * FROM V_StudentHobbyInfo; +-- 1.4. (5分) 查询学生`马又云`的生源地,要求显示:姓名(`StudentNameame`),生源地(`OriginPosition`) +SELECT s.StudentName 姓名 , si.OriginPosition 生源地 FROM student s JOIN studentextinfo si ON s.StudentCode=si.StudentCode WHERE s.StudentName='马又云'; +-- 1.5. (5分) 查询学生表(`StudentInfo`)中还未还书的读者的学号(`StudentCode`)和姓名(`StudentName`),以及借书时间(`BorrowTime`) +SELECT s.StudentCode 学号, s.StudentName 姓名,br.BorrowTime 借书时间 FROM student s JOIN borrowrecord br ON s.StudentCode=br.StudentCode WHERE br.ReturnTime IS null; +-- 1.6. (5分) 查询借阅过书籍《射雕英雄传》的学生,要求显示:学生姓名(`StudentName`),学院(`School`),图书名(`BookName`),借阅时间(`BorrowTime`) +WITH +a AS (SELECT bi.BookName,be.Barcode FROM bookinfo bi JOIN bookextinfo be ON bi.ISBN=be.ISBN), +b AS (SELECT s.StudentName,s.School,br.BorrowTime,br.Barcode FROM borrowrecord br JOIN student s ON br.StudentCode=s.StudentCode) +SELECT b.StudentName 学生姓名,b.School 学院,a.BookName 图书名,b.BorrowTime 借阅时间 FROM a JOIN b ON a.Barcode=B.Barcode WHERE a.BookName='射雕英雄传'; + +-- (30分)某医院病房计算机管理中心需要如下信息: +-- +-- ``` +-- 科室:科编号、科名、科地址、科电话、医生姓名 +-- 病房:病房号、床位号、所属科室名 +-- 医生:姓名、职称、所属科室名、年龄、工作证号 +-- 病人:病历号、姓名、性别、诊断、主治医生、病房号 +-- ``` +-- +-- 2.1. (10分)其中,一个科室有多个病房、多个医生;一个病房只能属于一个科室,一名医生只属于一个科室,但可负责多名病人的诊治,一个病人的主主治生只有一个。科编号是标识列,从1开始自增长,步进值为1,医生职称有:实习,初级,中级,高级。 +-- 请设计该表关系模式结构(数据库物理模型),要求: +-- +-- +-- a. 中文名和英文名称清晰(可借助有道翻译工具,不允许开网页) +-- b. 表关系准确,包括主键,外键,标识列 +-- c. 将完成的设计截图,并且保存物理模型文件,命名为恰当的名称 +-- d. 将截图和物理模型文件放在自己的文件夹中 +-- +-- 2.2. (10分)创建存储过程实现:传入病历号,查询其对应的主治医生及其所在的病房号、床位号。 +delimiter / +CREATE PROCEDURE p1 (IN iid INT) +BEGIN +SELECT i.illid 病历号, d.`name` 主治医生,r.rid 病房号,r.bid 床位号 FROM illman i JOIN room r ON i.irid=r.rid JOIN doctor d ON d.cardid=i.cardid WHERE illid=iid; + +END/ +delimiter; +CALL p1 (1); +-- 2.3. (10分)创建触发器实现:当医生离职时,检查其是否还有未完成医治的病人,如果还存在病人则不予离职,否则可以离职。 +CREATE TRIGGER a BEFORE DELETE ON doctor for EACH ROW +BEGIN +DECLARE bl INT; +SELECT COUNT(cardid) INTO bl FROM illman WHERE cardid=old.cardid; +IF bl>0 THEN +SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='还存在病人则不予离职'; +END if; +END; + +``` + -- Gitee