diff --git "a/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/222134_23\347\272\2471\347\217\255_\345\274\240\344\270\211/25\345\217\267\345\274\240\344\270\211\347\232\204\346\223\215\344\275\234\351\242\230.sql" "b/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/222134_23\347\272\2471\347\217\255_\345\274\240\344\270\211/25\345\217\267\345\274\240\344\270\211\347\232\204\346\223\215\344\275\234\351\242\230.sql" new file mode 100644 index 0000000000000000000000000000000000000000..7e675799787e96f69355751145263a4f1b67c0b0 --- /dev/null +++ "b/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/222134_23\347\272\2471\347\217\255_\345\274\240\344\270\211/25\345\217\267\345\274\240\344\270\211\347\232\204\346\223\215\344\275\234\351\242\230.sql" @@ -0,0 +1,180 @@ + + + +drop database if exists LibraryDb; +create database LibraryDb; + +use LibraryDb; +/* + 学生表 +*/ +CREATE TABLE Student ( + StudentCode varchar(8) primary key, -- 学号 + StudentName varchar(20) NOT NULL, -- 姓名 + Gender int DEFAULT NULL, -- 性别 + Birthday date DEFAULT NULL, -- 出生年月 + School varchar(20) DEFAULT NULL, -- 学院 + Major varchar(20) DEFAULT NULL -- 专业 +); + + +/* + 学生扩展信息表 +*/ +CREATE TABLE StudentExtInfo( + StudentCode varchar(8) primary key , -- 学号 + Hobby varchar(120) DEFAULT NULL, -- 爱好 + Speciality varchar(120) DEFAULT NULL, -- 特长 + OriginPosition varchar(16) DEFAULT NULL, -- 生源地 + Prize int DEFAULT NULL -- 荣誉数 +); + + + +/* + 图书信息表 +*/ +CREATE TABLE BookInfo ( + ISBN varchar(13) primary key, -- ISBN + BookName varchar(32) DEFAULT NULL, -- 图书名 + Author varchar(32) DEFAULT NULL, -- 作者 + Publishing varchar(32) DEFAULT NULL, -- 出版社 + PublishedTime date DEFAULT NULL, -- 出版时间 + Introduce varchar(200) DEFAULT NULL, -- 书籍简介 + Catery varchar(8) DEFAULT NULL, -- 书籍分类 + Price decimal(10,2) DEFAULT NULL -- 书籍价格 +); + + + +/* + 图书类别表 +*/ +CREATE TABLE BookExtInfo( + Barcode varchar(9) primary key, -- barcode + ISBN varchar(13) , -- ISBN + BookStatus bit default null -- 状态 +); + + +/* + 学生借阅信息 +*/ +CREATE TABLE BorrowRecord( + Id int primary key , -- 借阅id + StudentCode varchar(8) , -- 学号 + Barcode varchar(9) , -- barcode + BorrowTime datetime DEFAULT NULL, -- 借书时间 + ReturnTime datetime DEFAULT NULL -- 还书时间 +); + + +insert into Student values('16100101','马诗',1,'1998-03-16','理学院','统计'); +insert into Student values('16130201','博文',0,'1998-04-24','信息学院','计算机科学与技术'); +insert into Student values('16130203','魏波',1,'1998-10-29','信息学院','计算机科学与技术'); +insert into Student values('16130205','黄弘',1,'1998-08-06','信息学院','数据科学与大数据技术'); +insert into Student values('17100104','易高明',0,'1999-05-29','理学院','信息与计算科学'); +insert into Student values('17100105','万承承',0,'1999-09-11','理学院','信息与计算科学'); +insert into Student values('17110101','黄弘',0,'2000-07-25','文法学院','法学'); +insert into Student values('17130202','邹睿睿',1,'1998-06-29','信息学院','计算机科学与技术'); +insert into Student values('17130204','马又云',1,'1999-03-27','信息学院','数据科学与大数据技术'); +insert into Student values('18100103','邓承明',1,'2000-07-25','理学院','信息与计算科学'); + + +insert into StudentExtInfo values('16100101','听音乐','艺术特长','北京',2); +insert into StudentExtInfo values('16130201','看小说',null,'湖南',3); +insert into StudentExtInfo values('16130203','硬笔书法','艺术特长','新疆',1); +insert into StudentExtInfo values('16130205','听音乐','艺术特长','北京',2); +insert into StudentExtInfo values('17100104','打篮球',null,'北京',3); +insert into StudentExtInfo values('17100105','编程','科技特长','北京',2); +insert into StudentExtInfo values('17110101','打篮球','科技特长','河北',2); +insert into StudentExtInfo values('17130202','编程','科技特长','天津',3); +insert into StudentExtInfo values('17130204','看电影',null,'北京',1); +insert into StudentExtInfo values('18100103',null,null,'河南',null); + + +insert into BookInfo values('7040409659','大学计算机','李凤霞','高等教育出版社','2014-10-21','教育部大学计算机课程改革项目规划教材','TP',28); +insert into BookInfo values('7301046065','刑法学','高明轩','北京大学出版社','2000-10-21','刑法_法学高等学校中国教材','O',69); +insert into BookInfo values('7806553312','射雕英雄传','金庸','广州出版社','2018-10-21','金庸作品集','I',67.9); +insert into BookInfo values('9788020002207','红楼梦','曹雪芹','人民文学出版社','2008-10-21','学术研究或个人阅读都非常合适','I',31.25); +insert into BookInfo values('9787113254100','Python语言及其应用','赵广辉','中国铁道出版社','2019-10-21','本书介绍Python语言的基础知识及其在各个领域的具体应用','TP',62.2); +insert into BookInfo values('9787115266156','管理信息系统实用教程(第2版)','王若宾','人民邮电出版社','2012-10-21','普通高等教育\十一五\国家级规划教材','TP',36); +insert into BookInfo values('9787115356840','管理信息系统实用教程(第3版)','王若宾','人民邮电出版社','2015-10-21','普通高等教育\十一五\国家级规划教材','TP',45); +insert into BookInfo values('9787302252955','人工智能:一种现代的方法(第3版)','黄今夏','清华大学出版社','2011-10-21','《人工智能:一种现代的方法(第3版)》为大学计算机教育著名教材系列之一','TP',132.6); +insert into BookInfo values('9787513030953','信息论','田甜','知识产权出版社','2015-10-21','文理科公选课指定教材','TP',126); +insert into BookInfo values('9787569302585','计算统计(第2版)','冯新奇','西安交通大学出版社','2018-10-21','本书涵盖了计算统计的所有核心内容','TP',67.5); +insert into BookInfo values('9789113268712','新编数据库技术','王若宾','中国铁道出版社','2018-10-21','本书重构了课程内容结构','TP',38.5); + + +insert into BookExtInfo values('O924.01','7301046065',0); +insert into BookExtInfo values('O924.02','7301046065',1); +insert into BookExtInfo values('O924.03','7301046065',1); +insert into BookExtInfo values('I13.212','9788020002207',1); +insert into BookExtInfo values('I13.213','9788020002207',1); +insert into BookExtInfo values('I247.56','7806553312',1); +insert into BookExtInfo values('I247.59','7806553312',0); +insert into BookExtInfo values('TP122.32','9787569302585',1); +insert into BookExtInfo values('TP122.33','9787569302585',1); +insert into BookExtInfo values('TP311.11','9787113254100',1); +insert into BookExtInfo values('TP311.12','9787113254100',0); +insert into BookExtInfo values('TP311.13','9787115356840',1); + + +insert into BorrowRecord values(1,'16130203','I247.56','2019-04-09','2019-04-13'); +insert into BorrowRecord values(2,'17130204','I247.56','2019-04-15','2019-04-17'); +insert into BorrowRecord values(3,'16130205','I247.59','2019-04-17','2019-04-20'); +insert into BorrowRecord values(4,'16100101','I247.56','2019-04-17','2019-04-18'); +insert into BorrowRecord values(5,'17100105','TP311.11','2019-04-29',null); +insert into BorrowRecord values(6,'16130201','I247.59','2019-05-01','2019-05-20'); +insert into BorrowRecord values(7,'17130202','TP311.12','2019-05-03',null); +insert into BorrowRecord values(8,'18100103','I13.212','2019-05-04','2019-05-15'); +insert into BorrowRecord values(9,'18100103','I13.213','2019-05-20','2019-05-30'); +insert into BorrowRecord values(10,'17110101','O924.01','2019-05-25',null); + + +select * from Student; +select * from StudentExtInfo; +select * from BookInfo; +select * from BookExtInfo; +select * from BorrowRecord; + + +-- 1. 利用另外一个文件`initDb.sql`,完成以下题目: +-- +-- 1.1. (10分) 对学生姓名创建普通索引(`idx_StudentName`) + +create index + + + +-- 1.2. (10分) 创建视图`V_StudentHobbyInfo`,其中包含姓名(`StudentName`),爱好(`Hobby`),特长(`Specility`)列,并分别取别名为`vw_StudentName`,`vw_Hoppy`,`vw_Speclitiy + + + +-- 1.4. (5分) 查询学生`马又云`的生源地,要求显示:姓名(`StudentNameame`),生源地(`OriginPosition`) +-- 1.5. (5分) 查询学生表(`StudentInfo`)中还未还书的读者的学号(`StudentCode`)和姓名(`StudentName`),以及借书时间(`BorrowTime`) +-- 1.6. (5分) 查询借阅过书籍《射雕英雄传》的学生,要求显示:学生姓名(`StudentName`),学院(`School`),图书名(`BookName`),借阅时间(`BorrowTime`) +-- +-- +-- 2. (30分)某医院病房计算机管理中心需要如下信息: +-- +-- ``` +-- 科室:科编号、科名、科地址、科电话、医生姓名 +-- 病房:病房号、床位号、所属科室名 +-- 医生:姓名、职称、所属科室名、年龄、工作证号 +-- 病人:病历号、姓名、性别、诊断、主治医生、病房号 +-- ``` +-- + + +-- 2.1. (10分)其中,一个科室有多个病房、多个医生;一个病房只能属于一个科室,一名医生只属于一个科室,但可负责多名病人的诊治,一个病人的主主治生只有一个。科编号是标识列,从1开始自增长,步进值为1,医生职称有:实习,初级,中级,高级。 +-- 请设计该表关系模式结构(数据库物理模型),要求: +-- +-- +-- a. 中文名和英文名称清晰(可借助有道翻译工具,不允许开网页) +-- b. 表关系准确,包括主键,外键,标识列 +-- c. 将完成的设计截图,并且保存物理模型文件,命名为恰当的名称 +-- d. 将截图和物理模型文件放在自己的文件夹中 +-- +-- 2.2. (10分)创建存储过程实现:传入病历号,查询其对应的主治医生及其所在的病房号、床位号。 +-- 2.3. (10分)创建触发器实现:当医生离职时,检查其是否还有未完成医治的病人,如果还存在病人则不予离职,否则可以离职。 \ No newline at end of file diff --git "a/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/222134_23\347\272\2471\347\217\255_\345\274\240\344\270\211/initDb.sql" "b/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/222134_23\347\272\2471\347\217\255_\345\274\240\344\270\211/initDb.sql" new file mode 100644 index 0000000000000000000000000000000000000000..a60454297bf786e2beb156182e3610f9d3391721 --- /dev/null +++ "b/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/222134_23\347\272\2471\347\217\255_\345\274\240\344\270\211/initDb.sql" @@ -0,0 +1,137 @@ + +drop database if exists LibraryDb; +create database LibraryDb; + +use LibraryDb; +/* + 学生表 +*/ +CREATE TABLE Student ( + StudentCode varchar(8) primary key, -- 学号 + StudentName varchar(20) NOT NULL, -- 姓名 + Gender int DEFAULT NULL, -- 性别 + Birthday date DEFAULT NULL, -- 出生年月 + School varchar(20) DEFAULT NULL, -- 学院 + Major varchar(20) DEFAULT NULL -- 专业 +); + + +/* + 学生扩展信息表 +*/ +CREATE TABLE StudentExtInfo( + StudentCode varchar(8) primary key , -- 学号 + Hobby varchar(120) DEFAULT NULL, -- 爱好 + Speciality varchar(120) DEFAULT NULL, -- 特长 + OriginPosition varchar(16) DEFAULT NULL, -- 生源地 + Prize int DEFAULT NULL -- 荣誉数 +); + + + +/* + 图书信息表 +*/ +CREATE TABLE BookInfo ( + ISBN varchar(13) primary key, -- ISBN + BookName varchar(32) DEFAULT NULL, -- 图书名 + Author varchar(32) DEFAULT NULL, -- 作者 + Publishing varchar(32) DEFAULT NULL, -- 出版社 + PublishedTime date DEFAULT NULL, -- 出版时间 + Introduce varchar(200) DEFAULT NULL, -- 书籍简介 + Catery varchar(8) DEFAULT NULL, -- 书籍分类 + Price decimal(10,2) DEFAULT NULL -- 书籍价格 +); + + + +/* + 图书类别表 +*/ +CREATE TABLE BookExtInfo( + Barcode varchar(9) primary key, -- barcode + ISBN varchar(13) , -- ISBN + BookStatus bit default null -- 状态 +); + + +/* + 学生借阅信息 +*/ +CREATE TABLE BorrowRecord( + Id int primary key , -- 借阅id + StudentCode varchar(8) , -- 学号 + Barcode varchar(9) , -- barcode + BorrowTime datetime DEFAULT NULL, -- 借书时间 + ReturnTime datetime DEFAULT NULL -- 还书时间 +); + + +insert into Student values('16100101','马诗',1,'1998-03-16','理学院','统计'); +insert into Student values('16130201','博文',0,'1998-04-24','信息学院','计算机科学与技术'); +insert into Student values('16130203','魏波',1,'1998-10-29','信息学院','计算机科学与技术'); +insert into Student values('16130205','黄弘',1,'1998-08-06','信息学院','数据科学与大数据技术'); +insert into Student values('17100104','易高明',0,'1999-05-29','理学院','信息与计算科学'); +insert into Student values('17100105','万承承',0,'1999-09-11','理学院','信息与计算科学'); +insert into Student values('17110101','黄弘',0,'2000-07-25','文法学院','法学'); +insert into Student values('17130202','邹睿睿',1,'1998-06-29','信息学院','计算机科学与技术'); +insert into Student values('17130204','马又云',1,'1999-03-27','信息学院','数据科学与大数据技术'); +insert into Student values('18100103','邓承明',1,'2000-07-25','理学院','信息与计算科学'); + + +insert into StudentExtInfo values('16100101','听音乐','艺术特长','北京',2); +insert into StudentExtInfo values('16130201','看小说',null,'湖南',3); +insert into StudentExtInfo values('16130203','硬笔书法','艺术特长','新疆',1); +insert into StudentExtInfo values('16130205','听音乐','艺术特长','北京',2); +insert into StudentExtInfo values('17100104','打篮球',null,'北京',3); +insert into StudentExtInfo values('17100105','编程','科技特长','北京',2); +insert into StudentExtInfo values('17110101','打篮球','科技特长','河北',2); +insert into StudentExtInfo values('17130202','编程','科技特长','天津',3); +insert into StudentExtInfo values('17130204','看电影',null,'北京',1); +insert into StudentExtInfo values('18100103',null,null,'河南',null); + + +insert into BookInfo values('7040409659','大学计算机','李凤霞','高等教育出版社','2014-10-21','教育部大学计算机课程改革项目规划教材','TP',28); +insert into BookInfo values('7301046065','刑法学','高明轩','北京大学出版社','2000-10-21','刑法_法学高等学校中国教材','O',69); +insert into BookInfo values('7806553312','射雕英雄传','金庸','广州出版社','2018-10-21','金庸作品集','I',67.9); +insert into BookInfo values('9788020002207','红楼梦','曹雪芹','人民文学出版社','2008-10-21','学术研究或个人阅读都非常合适','I',31.25); +insert into BookInfo values('9787113254100','Python语言及其应用','赵广辉','中国铁道出版社','2019-10-21','本书介绍Python语言的基础知识及其在各个领域的具体应用','TP',62.2); +insert into BookInfo values('9787115266156','管理信息系统实用教程(第2版)','王若宾','人民邮电出版社','2012-10-21','普通高等教育\十一五\国家级规划教材','TP',36); +insert into BookInfo values('9787115356840','管理信息系统实用教程(第3版)','王若宾','人民邮电出版社','2015-10-21','普通高等教育\十一五\国家级规划教材','TP',45); +insert into BookInfo values('9787302252955','人工智能:一种现代的方法(第3版)','黄今夏','清华大学出版社','2011-10-21','《人工智能:一种现代的方法(第3版)》为大学计算机教育著名教材系列之一','TP',132.6); +insert into BookInfo values('9787513030953','信息论','田甜','知识产权出版社','2015-10-21','文理科公选课指定教材','TP',126); +insert into BookInfo values('9787569302585','计算统计(第2版)','冯新奇','西安交通大学出版社','2018-10-21','本书涵盖了计算统计的所有核心内容','TP',67.5); +insert into BookInfo values('9789113268712','新编数据库技术','王若宾','中国铁道出版社','2018-10-21','本书重构了课程内容结构','TP',38.5); + + +insert into BookExtInfo values('O924.01','7301046065',0); +insert into BookExtInfo values('O924.02','7301046065',1); +insert into BookExtInfo values('O924.03','7301046065',1); +insert into BookExtInfo values('I13.212','9788020002207',1); +insert into BookExtInfo values('I13.213','9788020002207',1); +insert into BookExtInfo values('I247.56','7806553312',1); +insert into BookExtInfo values('I247.59','7806553312',0); +insert into BookExtInfo values('TP122.32','9787569302585',1); +insert into BookExtInfo values('TP122.33','9787569302585',1); +insert into BookExtInfo values('TP311.11','9787113254100',1); +insert into BookExtInfo values('TP311.12','9787113254100',0); +insert into BookExtInfo values('TP311.13','9787115356840',1); + + +insert into BorrowRecord values(1,'16130203','I247.56','2019-04-09','2019-04-13'); +insert into BorrowRecord values(2,'17130204','I247.56','2019-04-15','2019-04-17'); +insert into BorrowRecord values(3,'16130205','I247.59','2019-04-17','2019-04-20'); +insert into BorrowRecord values(4,'16100101','I247.56','2019-04-17','2019-04-18'); +insert into BorrowRecord values(5,'17100105','TP311.11','2019-04-29',null); +insert into BorrowRecord values(6,'16130201','I247.59','2019-05-01','2019-05-20'); +insert into BorrowRecord values(7,'17130202','TP311.12','2019-05-03',null); +insert into BorrowRecord values(8,'18100103','I13.212','2019-05-04','2019-05-15'); +insert into BorrowRecord values(9,'18100103','I13.213','2019-05-20','2019-05-30'); +insert into BorrowRecord values(10,'17110101','O924.01','2019-05-25',null); + + +select * from Student; +select * from StudentExtInfo; +select * from BookInfo; +select * from BookExtInfo; +select * from BorrowRecord; \ No newline at end of file diff --git "a/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/222134_23\347\272\2471\347\217\255_\345\274\240\344\270\211/\347\254\224\350\257\225_\347\224\265\345\255\220\347\255\224\351\242\230\345\215\241_\351\200\211\346\213\251\351\242\230.xlsx" "b/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/222134_23\347\272\2471\347\217\255_\345\274\240\344\270\211/\347\254\224\350\257\225_\347\224\265\345\255\220\347\255\224\351\242\230\345\215\241_\351\200\211\346\213\251\351\242\230.xlsx" new file mode 100644 index 0000000000000000000000000000000000000000..a3968f156f7edda9409c9ff6e2f3c9ae21a461be Binary files /dev/null and "b/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/222134_23\347\272\2471\347\217\255_\345\274\240\344\270\211/\347\254\224\350\257\225_\347\224\265\345\255\220\347\255\224\351\242\230\345\215\241_\351\200\211\346\213\251\351\242\230.xlsx" differ diff --git "a/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/initDb.sql" "b/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/initDb.sql" new file mode 100644 index 0000000000000000000000000000000000000000..a60454297bf786e2beb156182e3610f9d3391721 --- /dev/null +++ "b/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/initDb.sql" @@ -0,0 +1,137 @@ + +drop database if exists LibraryDb; +create database LibraryDb; + +use LibraryDb; +/* + 学生表 +*/ +CREATE TABLE Student ( + StudentCode varchar(8) primary key, -- 学号 + StudentName varchar(20) NOT NULL, -- 姓名 + Gender int DEFAULT NULL, -- 性别 + Birthday date DEFAULT NULL, -- 出生年月 + School varchar(20) DEFAULT NULL, -- 学院 + Major varchar(20) DEFAULT NULL -- 专业 +); + + +/* + 学生扩展信息表 +*/ +CREATE TABLE StudentExtInfo( + StudentCode varchar(8) primary key , -- 学号 + Hobby varchar(120) DEFAULT NULL, -- 爱好 + Speciality varchar(120) DEFAULT NULL, -- 特长 + OriginPosition varchar(16) DEFAULT NULL, -- 生源地 + Prize int DEFAULT NULL -- 荣誉数 +); + + + +/* + 图书信息表 +*/ +CREATE TABLE BookInfo ( + ISBN varchar(13) primary key, -- ISBN + BookName varchar(32) DEFAULT NULL, -- 图书名 + Author varchar(32) DEFAULT NULL, -- 作者 + Publishing varchar(32) DEFAULT NULL, -- 出版社 + PublishedTime date DEFAULT NULL, -- 出版时间 + Introduce varchar(200) DEFAULT NULL, -- 书籍简介 + Catery varchar(8) DEFAULT NULL, -- 书籍分类 + Price decimal(10,2) DEFAULT NULL -- 书籍价格 +); + + + +/* + 图书类别表 +*/ +CREATE TABLE BookExtInfo( + Barcode varchar(9) primary key, -- barcode + ISBN varchar(13) , -- ISBN + BookStatus bit default null -- 状态 +); + + +/* + 学生借阅信息 +*/ +CREATE TABLE BorrowRecord( + Id int primary key , -- 借阅id + StudentCode varchar(8) , -- 学号 + Barcode varchar(9) , -- barcode + BorrowTime datetime DEFAULT NULL, -- 借书时间 + ReturnTime datetime DEFAULT NULL -- 还书时间 +); + + +insert into Student values('16100101','马诗',1,'1998-03-16','理学院','统计'); +insert into Student values('16130201','博文',0,'1998-04-24','信息学院','计算机科学与技术'); +insert into Student values('16130203','魏波',1,'1998-10-29','信息学院','计算机科学与技术'); +insert into Student values('16130205','黄弘',1,'1998-08-06','信息学院','数据科学与大数据技术'); +insert into Student values('17100104','易高明',0,'1999-05-29','理学院','信息与计算科学'); +insert into Student values('17100105','万承承',0,'1999-09-11','理学院','信息与计算科学'); +insert into Student values('17110101','黄弘',0,'2000-07-25','文法学院','法学'); +insert into Student values('17130202','邹睿睿',1,'1998-06-29','信息学院','计算机科学与技术'); +insert into Student values('17130204','马又云',1,'1999-03-27','信息学院','数据科学与大数据技术'); +insert into Student values('18100103','邓承明',1,'2000-07-25','理学院','信息与计算科学'); + + +insert into StudentExtInfo values('16100101','听音乐','艺术特长','北京',2); +insert into StudentExtInfo values('16130201','看小说',null,'湖南',3); +insert into StudentExtInfo values('16130203','硬笔书法','艺术特长','新疆',1); +insert into StudentExtInfo values('16130205','听音乐','艺术特长','北京',2); +insert into StudentExtInfo values('17100104','打篮球',null,'北京',3); +insert into StudentExtInfo values('17100105','编程','科技特长','北京',2); +insert into StudentExtInfo values('17110101','打篮球','科技特长','河北',2); +insert into StudentExtInfo values('17130202','编程','科技特长','天津',3); +insert into StudentExtInfo values('17130204','看电影',null,'北京',1); +insert into StudentExtInfo values('18100103',null,null,'河南',null); + + +insert into BookInfo values('7040409659','大学计算机','李凤霞','高等教育出版社','2014-10-21','教育部大学计算机课程改革项目规划教材','TP',28); +insert into BookInfo values('7301046065','刑法学','高明轩','北京大学出版社','2000-10-21','刑法_法学高等学校中国教材','O',69); +insert into BookInfo values('7806553312','射雕英雄传','金庸','广州出版社','2018-10-21','金庸作品集','I',67.9); +insert into BookInfo values('9788020002207','红楼梦','曹雪芹','人民文学出版社','2008-10-21','学术研究或个人阅读都非常合适','I',31.25); +insert into BookInfo values('9787113254100','Python语言及其应用','赵广辉','中国铁道出版社','2019-10-21','本书介绍Python语言的基础知识及其在各个领域的具体应用','TP',62.2); +insert into BookInfo values('9787115266156','管理信息系统实用教程(第2版)','王若宾','人民邮电出版社','2012-10-21','普通高等教育\十一五\国家级规划教材','TP',36); +insert into BookInfo values('9787115356840','管理信息系统实用教程(第3版)','王若宾','人民邮电出版社','2015-10-21','普通高等教育\十一五\国家级规划教材','TP',45); +insert into BookInfo values('9787302252955','人工智能:一种现代的方法(第3版)','黄今夏','清华大学出版社','2011-10-21','《人工智能:一种现代的方法(第3版)》为大学计算机教育著名教材系列之一','TP',132.6); +insert into BookInfo values('9787513030953','信息论','田甜','知识产权出版社','2015-10-21','文理科公选课指定教材','TP',126); +insert into BookInfo values('9787569302585','计算统计(第2版)','冯新奇','西安交通大学出版社','2018-10-21','本书涵盖了计算统计的所有核心内容','TP',67.5); +insert into BookInfo values('9789113268712','新编数据库技术','王若宾','中国铁道出版社','2018-10-21','本书重构了课程内容结构','TP',38.5); + + +insert into BookExtInfo values('O924.01','7301046065',0); +insert into BookExtInfo values('O924.02','7301046065',1); +insert into BookExtInfo values('O924.03','7301046065',1); +insert into BookExtInfo values('I13.212','9788020002207',1); +insert into BookExtInfo values('I13.213','9788020002207',1); +insert into BookExtInfo values('I247.56','7806553312',1); +insert into BookExtInfo values('I247.59','7806553312',0); +insert into BookExtInfo values('TP122.32','9787569302585',1); +insert into BookExtInfo values('TP122.33','9787569302585',1); +insert into BookExtInfo values('TP311.11','9787113254100',1); +insert into BookExtInfo values('TP311.12','9787113254100',0); +insert into BookExtInfo values('TP311.13','9787115356840',1); + + +insert into BorrowRecord values(1,'16130203','I247.56','2019-04-09','2019-04-13'); +insert into BorrowRecord values(2,'17130204','I247.56','2019-04-15','2019-04-17'); +insert into BorrowRecord values(3,'16130205','I247.59','2019-04-17','2019-04-20'); +insert into BorrowRecord values(4,'16100101','I247.56','2019-04-17','2019-04-18'); +insert into BorrowRecord values(5,'17100105','TP311.11','2019-04-29',null); +insert into BorrowRecord values(6,'16130201','I247.59','2019-05-01','2019-05-20'); +insert into BorrowRecord values(7,'17130202','TP311.12','2019-05-03',null); +insert into BorrowRecord values(8,'18100103','I13.212','2019-05-04','2019-05-15'); +insert into BorrowRecord values(9,'18100103','I13.213','2019-05-20','2019-05-30'); +insert into BorrowRecord values(10,'17110101','O924.01','2019-05-25',null); + + +select * from Student; +select * from StudentExtInfo; +select * from BookInfo; +select * from BookExtInfo; +select * from BorrowRecord; \ No newline at end of file diff --git "a/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/\344\270\200\343\200\201\345\215\225\351\241\271\351\200\211\346\213\251\351\242\230.md" "b/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/\344\270\200\343\200\201\345\215\225\351\241\271\351\200\211\346\213\251\351\242\230.md" new file mode 100644 index 0000000000000000000000000000000000000000..5d1fceb864c21ecd28ba9dc1265f0e09d06254cf --- /dev/null +++ "b/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/\344\270\200\343\200\201\345\215\225\351\241\271\351\200\211\346\213\251\351\242\230.md" @@ -0,0 +1,408 @@ +# 一、单项选择题 + +1. 不属于数据库三大范式的作用的是( ) + +``` +A.减少数据冗余 +B.使表结构清晰 +C.增加数据冗余 +D.提高查询和存储效率 +``` + + + +2. 关于数据库的设计范式,以下错误的是( ) + +``` +A.第一范式的目标是确保每列的原子性 +B.第二范式要求每个表描述多个事情 +C.如果一个关系满足的2NF,并且除了主键以外其它的列都不传递依赖于主键列,则满足第三范式 +D.三大范式通常用来规范数据表的设计 +``` + + + +3. 将实体-联系模型转换为关系模型时,如果实体之间是多对多的关系,则在关系模型中的实现方式是( ) + +``` +A.建立新的属性 +B.建立新的关系 +C.增加新的关键字 +D.建立新的实体 +``` + +4. 一名学生可以使用多台计算机,每台计算机只能由一名学生使用,则实体学生和计算机间的联系是( ) + +``` +A.一对一 +B.多对一 +C.一对多 +D.多对多 +``` + + + +5. 用来表示数据库实体之间关系的图形叫? + +``` +A.E-P图 +B.E-R图 +C.U-R图 +D.E-U图 +``` + +6. 在RBAC系统中,如果希望限制某些用户只能在其所属部门内访问资源,应该如何设计? + +``` +A.为每个用户单独分配权限,不考虑部门因素 +B.创建一个全局角色,包含所有部门的权限 +C.为每个部门创建一个单独的角色,并分配相应的权限 +D.使用会话管理来控制访问 +``` + +7. 在RBAC中,如果用户需要获得新的权限,应该如何操作? + +``` +A.直接修改用户的权限设置 +B.修改角色的权限,然后将用户添加到该角色 +C.删除用户的旧角色并重新分配新角色 +D.以上都可以,视情况而定 +``` + +8. RBAC相较于传统的访问控制方法,其主要优点是什么? + +``` +A.管理复杂 +B.灵活性差 +C.权限分配清晰,易于管理 +D.不支持细粒度控制 +``` + +9. RBAC在用户与权限管理中的核心作用是什么? + +``` +A.直接关联用户和权限 +B.通过角色间接关联用户和权限 +C.提供强制访问控制 +D.确保数据加密 +``` + +10. RBAC指的是什么? + +``` +A.基于权限的访问控制 +B.基于用户的访问控制 +C.基于角色的访问控制 +D.基于资源的访问控制 +``` + +11. 以下哪项不是SKU设计时应考虑的因素? + +``` +A.商品的颜色 +B.商品的尺寸 +C.商品的制造商 +D.商品的库存数量 +``` + +12. 在设计商品数据库时,哪个概念用于表示一类商品的基本属性,如品牌、型号等,而不涉及具体的规格或库存? + +``` +A.Product ID +B.Variant ID +C.SKU +D.SPU +``` + +13. 在电商系统的商品管理中,用于唯一标识不同颜色、尺寸等属性的商品实例的是 + +``` +A.UPC(通用产品代码) +B.EAN(欧洲商品编号) +C.SKU(库存量单元) +D.SPU(标准化产品单元) +``` + +14. 设计电商产品的数据库时,关于SKU和SPU的描述,下列哪一项是正确的? + +``` +A.SKU是商品聚合信息的最大单位 +B.SPU是库存量单元,具体表示某商品的不同规格和数量的库存 +C.SKU用于描述具有特定规格、颜色和库存量的商品实例,而SPU则代表一个标准化的产品单元 +D. SPU和SKU在数据库设计中没有明确的区分,可以互换使用 +``` + +15. 下列对于为什么使用视图的描述,不正确的是( ) + +``` +A.所有视图都可以实现对数据的增、删、改、查操作 +B.简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道它的基本查询细节 +C.使用表的组成部分而不是整个表 +D.保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限 +``` + +16. 关于视图创建和使用的一些最常见的规则和限制。下列说法中错误的是( ) + +``` +A.与表一样,视图必须唯一命名 +B.对于可以创建的视图数目没有限制 +C.视图是一种数据库对象,是从数据库的表或其他视图中导出的基表 +D.视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图 +``` + +17. 下面创建视图正确的是( ) + +``` +A.CREATE VIEW +B.CREATE VIEW stu_info +C.CREATE VIEW stu_info AS +D.CREATE VIEW stu_info AS 查询语句 +``` + +18. 通常,下列操作中,不能更新视图是( ) + +``` +A.INSERT +B.UPDATE +C.DELETE +D.SELECT +``` + +19. 什么是视图( ) + +``` +A.一张图片 +B.一张表 +C.数据库中所有的表 +D.虚拟的表 +``` + +20. 为什么要使用存储过程,下列描述错误的是( ) + +``` +A.通过把处理封装在容易使用的单元中,简化复杂的操作 +B.由于不要求反复建立一系列处理步骤,这保证了数据的完整性 +C.减少网络传输 +D.提高性能。因为使用存储过程比使用单独的SQL语句要快 +``` + +21. DELIMITER的作用是什么( ) + +``` +A.区分普通代码和存储过程 +B.有无都一样 +C.成对出现 +D.只出现在代码开头 +``` + +22. 要删除存储过程 stu_result ,正确的语法是 + +``` +A.DELETE PROCEDURE stu_result +B.DROP stu_result; +C.DROP PROCEDURE stu_result; +D.DROP stu_result PROCEDURE ; +``` + +23. 存储过程中传出参数正确的定义方法是( ) + +``` +A.OUT s_max INT +B.IN s_max INT +C.OUT INT s_max +D.以上多不正确 +``` + +24.要检查存储过程stu_lessage的语句,下列正确的是( ) + +``` +A.SHOW CREATE PROCEDURE stu_lessage; +B.SHOW PROCEDURE stu_lessage; +C.SHOW stu_lessage; +D.SHOW CREATE PROCEDURE +``` + +25. 什么是游标 + +``` +A.简单的SELECT语句 +B.游标主要用于交互式应用 +C.MySQL游标只能用于存储过程(和函数) +D.一个存储在mysql服务器上数据库查询,它不是一条select 语句,而是被语句检索出来的结果集 +``` + +26. 创建使用游标正确的是( ) + +``` +A.DELIMITER // + CREATE PROCEDURE stu_age() + BEGIN + DECLARE age_s CURSOR + FOR SELECT age FROM students; + END // + DELIMITER; + +B.CREATE PROCEDURE stu_age() + BEGIN + DECLARE age_s CURSOR + FOR SELECT age FROM students; + END + +C.DELIMITER // + BEGIN + DECLARE age_s CURSOR + FOR SELECT age FROM students; + END // + DELIMITER + +D.DELIMITER // + CREATE PROCEDURE stu_age() + BEGIN + DECLARE age_s + FOR SELECT age FROM students; + END // + DELIMITER; +``` + +27. 打开游标age_s的语法是( ) + +``` +A.OPEN age_s; +B.CLOSE age_s +C.OPEN CURSOR age_s; +D.OPEN age_s CURSOR; +``` + +28. 游标中的FETCH有什么作用( ) + +``` +A.指定检索什么数据(所需的列),检索出来的数据存储在什么地方 +B.循环检索数据,从第一行到最后一行 +C.调用存储过程 +D.对取出的数据进行某种实际的处理 +``` + +29. 什么是触发器 + +``` +A.某个表发生更改时自动处理就是触发器 +B.使用insert语句 +C.使用update语句 +D.使用delete语句 +``` + +30. 下列哪个选项,不是在创建触发器时,需要给出的条件( ) + +``` +A.触发器的执行权限 +B.触发器关联的表 +C.触发器应该响应的活动(DELETE、INSERT或UPDATE) +D.触发器何时执行(处理之前或之后) +``` + +31. 删除触发器的语法正确的是( ) + +``` +A.Delete trigger 触发器名; +B.Alter trigger 触发器名; +C.Delete trigger 触发器名; +D.Drop trigger 触发器名; +``` + +32. 哪个语句不能当触发器的的条件( ) + +``` +A.Select +B.Update +C.Insert +D.Delete +``` + +33. 下面插入触发器正确的是( ) + +``` +A.CREATE TRIGGER AFTER INSERT ON students + FOR EACH ROW INSERT INTO stucreatetime(create_time) VALUES(NOW()); + +B.CREATE TRIGGER trigger_stu AFTER INSERT ON students + FOR EACH ROW INSERT INTO stucreatetime(create_time) VALUES(NOW()); + +C.CREATE trigger_stu AFTER INSERT ON students + FOR EACH ROW INSERT INTO stucreatetime(create_time) VALUES(NOW()); + +D.CREATE TRIGGER trigger_stu INSERT ON students + FOR EACH ROW INSERT INTO stucreatetime(create_time) VALUES(NOW()); +``` + +34. 事务处理的作用( ) + +``` +A.可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。 +B.批量执行SQL语句 +C.任何地方都可使用 +D.进行逻辑处理 +``` + +35. 在使用事务和事务处理时,回滚用什么命令( ) + +``` +A.transaction +B.rollback +C.commit +D.savepoint +``` + +36. 提交事务的命令是什么( ) + +``` +A.transaction +B.rollback +C.commit +D.return +``` + +37. 在MySQL中,以下哪个命令用于删除索引?( ) + +``` +A.DROP INDEX 索引名 ON 表名; +B.ALTER TABLE 表名 DROP INDEX 索引名; +C.DELETE INDEX 索引名 FROM 表名; +D.REMOVE INDEX 索引名 FROM 表名; +``` + +38. 以下哪种情况最不适合使用索引?( ) + +``` +A.经常在WHERE子句中出现的列 +B.只有很少不同值的列(如性别列) +C.经常进行排序操作的列 +D.包含许多不同值的列 +``` + +39. 在MySQL中,使用哪种关键字可以为表创建索引?( ) + +``` +A.CREATE PROCEDURE +B.CREATE TRIGGER +C.CREATE INDEX +D.CREATE FUNCTION +``` + +40. 关于MySQL索引的描述,以下哪项是不正确的?( ) + +``` +A.索引可以加速查询速度 +B.索引会占用额外的存储空间 +C.索引可以创建在多个列上,称为复合索引 +D.索引可以随意添加,对性能只有正面影响 +``` + +41. 以下哪个SQL语句用于查看表上的所有索引?( ) + +``` +A.SHOW TABLES; +B.SHOW COLUMNS FROM 表名; +C.SHOW INDEX FROM 表名; +D.DESCRIBE 表名; +``` + diff --git "a/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/\344\272\214\343\200\201\346\223\215\344\275\234\351\242\230.md" "b/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/\344\272\214\343\200\201\346\223\215\344\275\234\351\242\230.md" new file mode 100644 index 0000000000000000000000000000000000000000..82dcf9feda25e10db5182b6fd166523ca18fac8b --- /dev/null +++ "b/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/\344\272\214\343\200\201\346\223\215\344\275\234\351\242\230.md" @@ -0,0 +1,30 @@ +二、综合题(第1大题40分,第2大题30分,共70分) + + +1. 利用另外一个文件`initDb.sql`,完成以下题目: + + 1.1. (10分) 对学生姓名创建普通索引(`idx_StudentName`) + 1.2. (10分) 创建视图`V_StudentHobbyInfo`,其中包含姓名(`StudentName`),爱好(`Hobby`),特长(`Specility`)列,并分别取别名为`vw_StudentName`,`vw_Hoppy`,`vw_Speclitiy + 1.4. (5分) 查询学生`马又云`的生源地,要求显示:姓名(`StudentNameame`),生源地(`OriginPosition`) + 1.5. (5分) 查询学生表(`StudentInfo`)中还未还书的读者的学号(`StudentCode`)和姓名(`StudentName`),以及借书时间(`BorrowTime`) + 1.6. (5分) 查询借阅过书籍《射雕英雄传》的学生,要求显示:学生姓名(`StudentName`),学院(`School`),图书名(`BookName`),借阅时间(`BorrowTime`) + + +2. (30分)某医院病房计算机管理中心需要如下信息: + + ``` + 科室:科编号、科名、科地址、科电话、医生姓名 + 病房:病房号、床位号、所属科室名 + 医生:姓名、职称、所属科室名、年龄、工作证号 + 病人:病历号、姓名、性别、诊断、主治医生、病房号 + ``` + 2.1. (10分)其中,一个科室有多个病房、多个医生;一个病房只能属于一个科室,一名医生只属于一个科室,但可负责多名病人的诊治,一个病人的主主治生只有一个。科编号是标识列,从1开始自增长,步进值为1,医生职称有:实习,初级,中级,高级。 + 请设计该表关系模式结构(数据库物理模型),要求: + + a. 中文名和英文名称清晰(可借助有道翻译工具,不允许开网页) + b. 表关系准确,包括主键,外键,标识列 + c. 将完成的设计截图,并且保存物理模型文件,命名为恰当的名称 + d. 将截图和物理模型文件放在自己的文件夹中 + + 2.2. (10分)创建存储过程实现:传入病历号,查询其对应的主治医生及其所在的病房号、床位号。 + 2.3. (10分)创建触发器实现:当医生离职时,检查其是否还有未完成医治的病人,如果还存在病人则不予离职,否则可以离职。 diff --git "a/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/\347\273\274\345\220\210\351\242\230\346\274\224\347\244\272.md" "b/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/\347\273\274\345\220\210\351\242\230\346\274\224\347\244\272.md" new file mode 100644 index 0000000000000000000000000000000000000000..82dcf9feda25e10db5182b6fd166523ca18fac8b --- /dev/null +++ "b/\345\210\230\346\226\207\350\276\211/\345\205\266\344\273\226\346\226\207\344\273\266/\347\273\274\345\220\210\347\273\203\344\271\240/\347\273\274\345\220\210\351\242\230\346\274\224\347\244\272.md" @@ -0,0 +1,30 @@ +二、综合题(第1大题40分,第2大题30分,共70分) + + +1. 利用另外一个文件`initDb.sql`,完成以下题目: + + 1.1. (10分) 对学生姓名创建普通索引(`idx_StudentName`) + 1.2. (10分) 创建视图`V_StudentHobbyInfo`,其中包含姓名(`StudentName`),爱好(`Hobby`),特长(`Specility`)列,并分别取别名为`vw_StudentName`,`vw_Hoppy`,`vw_Speclitiy + 1.4. (5分) 查询学生`马又云`的生源地,要求显示:姓名(`StudentNameame`),生源地(`OriginPosition`) + 1.5. (5分) 查询学生表(`StudentInfo`)中还未还书的读者的学号(`StudentCode`)和姓名(`StudentName`),以及借书时间(`BorrowTime`) + 1.6. (5分) 查询借阅过书籍《射雕英雄传》的学生,要求显示:学生姓名(`StudentName`),学院(`School`),图书名(`BookName`),借阅时间(`BorrowTime`) + + +2. (30分)某医院病房计算机管理中心需要如下信息: + + ``` + 科室:科编号、科名、科地址、科电话、医生姓名 + 病房:病房号、床位号、所属科室名 + 医生:姓名、职称、所属科室名、年龄、工作证号 + 病人:病历号、姓名、性别、诊断、主治医生、病房号 + ``` + 2.1. (10分)其中,一个科室有多个病房、多个医生;一个病房只能属于一个科室,一名医生只属于一个科室,但可负责多名病人的诊治,一个病人的主主治生只有一个。科编号是标识列,从1开始自增长,步进值为1,医生职称有:实习,初级,中级,高级。 + 请设计该表关系模式结构(数据库物理模型),要求: + + a. 中文名和英文名称清晰(可借助有道翻译工具,不允许开网页) + b. 表关系准确,包括主键,外键,标识列 + c. 将完成的设计截图,并且保存物理模型文件,命名为恰当的名称 + d. 将截图和物理模型文件放在自己的文件夹中 + + 2.2. (10分)创建存储过程实现:传入病历号,查询其对应的主治医生及其所在的病房号、床位号。 + 2.3. (10分)创建触发器实现:当医生离职时,检查其是否还有未完成医治的病人,如果还存在病人则不予离职,否则可以离职。 diff --git "a/\345\210\230\346\226\207\350\276\211/\347\273\274\345\220\210\347\273\203\344\271\240-2024-10-21.md" "b/\345\210\230\346\226\207\350\276\211/\347\273\274\345\220\210\347\273\203\344\271\240-2024-10-21.md" new file mode 100644 index 0000000000000000000000000000000000000000..7ea613dee803fa8670925f5cbc8d5556584ede4a --- /dev/null +++ "b/\345\210\230\346\226\207\350\276\211/\347\273\274\345\220\210\347\273\203\344\271\240-2024-10-21.md" @@ -0,0 +1,386 @@ +# 综合练习 + +## 1.分析 + +### 需求 + +```sql +综合题(第1大题40分,第2大题30分,共70分) + + +1. 利用另外一个文件`initDb.sql`,完成以下题目: + + 1.1. (10分) 对学生姓名创建普通索引(`idx_StudentName`) + 1.2. (10分) 创建视图`V_StudentHobbyInfo`,其中包含姓名(`StudentName`),爱好(`Hobby`),特长(`Specility`)列,并分别取别名为`vw_StudentName`,`vw_Hoppy`,`vw_Speclitiy + 1.4. (5分) 查询学生`马又云`的生源地,要求显示:姓名(`StudentNameame`),生源地(`OriginPosition`) + 1.5. (5分) 查询学生表(`StudentInfo`)中还未还书的读者的学号(`StudentCode`)和姓名(`StudentName`),以及借书时间(`BorrowTime`) + 1.6. (5分) 查询借阅过书籍《射雕英雄传》的学生,要求显示:学生姓名(`StudentName`),学院(`School`),图书名(`BookName`),借阅时间(`BorrowTime`) + +2. (30分)某医院病房计算机管理中心需要如下信息: + 科室:科编号、科名、科地址、科电话、医生姓名 + 病房:病房号、床位号、所属科室名 + 医生:姓名、职称、所属科室名、年龄、工作证号 + 病人:病历号、姓名、性别、诊断、主治医生、病房号 + + 2.1. (10分)其中,一个科室有多个病房、多个医生;一个病房只能属于一个科室,一名医生只属于一个科室,但可负责多名病人的诊治,一个病人的主主治生只有一个。科编号是标识列,从1开始自增长,步进值为1,医生职称有:实习,初级,中级,高级。 + 请设计该表关系模式结构(数据库物理模型),要求: + + + a. 中文名和英文名称清晰(可借助有道翻译工具,不允许开网页) + b. 表关系准确,包括主键,外键,标识列 + c. 将完成的设计截图,并且保存物理模型文件,命名为恰当的名称 + d. 将截图和物理模型文件放在自己的文件夹中 + + 2.2. (10分)创建存储过程实现:传入病历号,查询其对应的主治医生及其所在的病房号、床位号。 + 2.3. (10分)创建触发器实现:当医生离职时,检查其是否还有未完成医治的病人,如果还存在病人则不予离职,否则可以离职。 +``` + + +### 数据来源 + +```sql +-- `initDb.sql`内容 +drop database if exists LibraryDb; +create database if not exists LibraryDb; +use LibraryDb; + +/* + 学生表 +*/ +CREATE TABLE Student ( + StudentCode varchar(8) primary key, -- 学号 + StudentName varchar(20) NOT NULL, -- 姓名 + Gender int DEFAULT NULL, -- 性别 + Birthday date DEFAULT NULL, -- 出生年月 + School varchar(20) DEFAULT NULL, -- 学院 + Major varchar(20) DEFAULT NULL -- 专业 +); + + +/* + 学生扩展信息表 +*/ +CREATE TABLE StudentExtInfo( + StudentCode varchar(8) primary key , -- 学号 + Hobby varchar(120) DEFAULT NULL, -- 爱好 + Speciality varchar(120) DEFAULT NULL, -- 特长 + OriginPosition varchar(16) DEFAULT NULL, -- 生源地 + Prize int DEFAULT NULL -- 荣誉数 +); + + + +/* + 图书信息表 +*/ +CREATE TABLE BookInfo ( + ISBN varchar(13) primary key, -- ISBN + BookName varchar(32) DEFAULT NULL, -- 图书名 + Author varchar(32) DEFAULT NULL, -- 作者 + Publishing varchar(32) DEFAULT NULL, -- 出版社 + PublishedTime date DEFAULT NULL, -- 出版时间 + Introduce varchar(200) DEFAULT NULL, -- 书籍简介 + Catery varchar(8) DEFAULT NULL, -- 书籍分类 + Price decimal(10,2) DEFAULT NULL -- 书籍价格 +); + + + +/* + 图书类别表 +*/ +CREATE TABLE BookExtInfo( + Barcode varchar(9) primary key, -- barcode + ISBN varchar(13) , -- ISBN + BookStatus bit default null -- 状态 +); + + +/* + 学生借阅信息 +*/ +CREATE TABLE BorrowRecord( + Id int primary key , -- 借阅id + StudentCode varchar(8) , -- 学号 + Barcode varchar(9) , -- barcode + BorrowTime datetime DEFAULT NULL, -- 借书时间 + ReturnTime datetime DEFAULT NULL -- 还书时间 +); + + +insert into Student values('16100101','马诗',1,'1998-03-16','理学院','统计'); +insert into Student values('16130201','博文',0,'1998-04-24','信息学院','计算机科学与技术'); +insert into Student values('16130203','魏波',1,'1998-10-29','信息学院','计算机科学与技术'); +insert into Student values('16130205','黄弘',1,'1998-08-06','信息学院','数据科学与大数据技术'); +insert into Student values('17100104','易高明',0,'1999-05-29','理学院','信息与计算科学'); +insert into Student values('17100105','万承承',0,'1999-09-11','理学院','信息与计算科学'); +insert into Student values('17110101','黄弘',0,'2000-07-25','文法学院','法学'); +insert into Student values('17130202','邹睿睿',1,'1998-06-29','信息学院','计算机科学与技术'); +insert into Student values('17130204','马又云',1,'1999-03-27','信息学院','数据科学与大数据技术'); +insert into Student values('18100103','邓承明',1,'2000-07-25','理学院','信息与计算科学'); + + +insert into StudentExtInfo values('16100101','听音乐','艺术特长','北京',2); +insert into StudentExtInfo values('16130201','看小说',null,'湖南',3); +insert into StudentExtInfo values('16130203','硬笔书法','艺术特长','新疆',1); +insert into StudentExtInfo values('16130205','听音乐','艺术特长','北京',2); +insert into StudentExtInfo values('17100104','打篮球',null,'北京',3); +insert into StudentExtInfo values('17100105','编程','科技特长','北京',2); +insert into StudentExtInfo values('17110101','打篮球','科技特长','河北',2); +insert into StudentExtInfo values('17130202','编程','科技特长','天津',3); +insert into StudentExtInfo values('17130204','看电影',null,'北京',1); +insert into StudentExtInfo values('18100103',null,null,'河南',null); + + +insert into BookInfo values('7040409659','大学计算机','李凤霞','高等教育出版社','2014-10-21','教育部大学计算机课程改革项目规划教材','TP',28); +insert into BookInfo values('7301046065','刑法学','高明轩','北京大学出版社','2000-10-21','刑法_法学高等学校中国教材','O',69); +insert into BookInfo values('7806553312','射雕英雄传','金庸','广州出版社','2018-10-21','金庸作品集','I',67.9); +insert into BookInfo values('9788020002207','红楼梦','曹雪芹','人民文学出版社','2008-10-21','学术研究或个人阅读都非常合适','I',31.25); +insert into BookInfo values('9787113254100','Python语言及其应用','赵广辉','中国铁道出版社','2019-10-21','本书介绍Python语言的基础知识及其在各个领域的具体应用','TP',62.2); +insert into BookInfo values('9787115266156','管理信息系统实用教程(第2版)','王若宾','人民邮电出版社','2012-10-21','普通高等教育\十一五\国家级规划教材','TP',36); +insert into BookInfo values('9787115356840','管理信息系统实用教程(第3版)','王若宾','人民邮电出版社','2015-10-21','普通高等教育\十一五\国家级规划教材','TP',45); +insert into BookInfo values('9787302252955','人工智能:一种现代的方法(第3版)','黄今夏','清华大学出版社','2011-10-21','《人工智能:一种现代的方法(第3版)》为大学计算机教育著名教材系列之一','TP',132.6); +insert into BookInfo values('9787513030953','信息论','田甜','知识产权出版社','2015-10-21','文理科公选课指定教材','TP',126); +insert into BookInfo values('9787569302585','计算统计(第2版)','冯新奇','西安交通大学出版社','2018-10-21','本书涵盖了计算统计的所有核心内容','TP',67.5); +insert into BookInfo values('9789113268712','新编数据库技术','王若宾','中国铁道出版社','2018-10-21','本书重构了课程内容结构','TP',38.5); + + +insert into BookExtInfo values('O924.01','7301046065',0); +insert into BookExtInfo values('O924.02','7301046065',1); +insert into BookExtInfo values('O924.03','7301046065',1); +insert into BookExtInfo values('I13.212','9788020002207',1); +insert into BookExtInfo values('I13.213','9788020002207',1); +insert into BookExtInfo values('I247.56','7806553312',1); +insert into BookExtInfo values('I247.59','7806553312',0); +insert into BookExtInfo values('TP122.32','9787569302585',1); +insert into BookExtInfo values('TP122.33','9787569302585',1); +insert into BookExtInfo values('TP311.11','9787113254100',1); +insert into BookExtInfo values('TP311.12','9787113254100',0); +insert into BookExtInfo values('TP311.13','9787115356840',1); + + +insert into BorrowRecord values(1,'16130203','I247.56','2019-04-09','2019-04-13'); +insert into BorrowRecord values(2,'17130204','I247.56','2019-04-15','2019-04-17'); +insert into BorrowRecord values(3,'16130205','I247.59','2019-04-17','2019-04-20'); +insert into BorrowRecord values(4,'16100101','I247.56','2019-04-17','2019-04-18'); +insert into BorrowRecord values(5,'17100105','TP311.11','2019-04-29',null); +insert into BorrowRecord values(6,'16130201','I247.59','2019-05-01','2019-05-20'); +insert into BorrowRecord values(7,'17130202','TP311.12','2019-05-03',null); +insert into BorrowRecord values(8,'18100103','I13.212','2019-05-04','2019-05-15'); +insert into BorrowRecord values(9,'18100103','I13.213','2019-05-20','2019-05-30'); +insert into BorrowRecord values(10,'17110101','O924.01','2019-05-25',null); + + +select * from Student; +select * from StudentExtInfo; +select * from BookInfo; +select * from BookExtInfo; +select * from BorrowRecord; +``` + +## 2.SQL + +### 任务I + +```sql +综合题(第1大题40分,第2大题30分,共70分) + + +1. 利用另外一个文件`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 st.StudentName vw_StudentName,stu.Hobby vw_Hoppy,stu.Speciality vw_Speclitiy FROM student st,studentextinfo stu WHERE st.StudentCode = stu.StudentCode; + +1.4. (5分) 查询学生`马又云`的生源地,要求显示:姓名(`StudentNameame`),生源地(`OriginPosition`) +SELECT st.StudentName 姓名,stu.OriginPosition 生源地 FROM student st,studentextinfo stu WHERE st.StudentCode = stu.StudentCode AND st.StudentName = '马又云'; + +1.5. (5分) 查询学生表(`StudentInfo`)中还未还书的读者的学号(`StudentCode`)和姓名(`StudentName`),以及借书时间(`BorrowTime`) + +SELECT st.StudentCode,st.StudentName,BorrowTime FROM student st,borrowrecord bor WHERE st.StudentCode = bor.StudentCode AND st.StudentCode NOT IN (SELECT st.StudentCode FROM student st,borrowrecord bor WHERE st.StudentCode = bor.StudentCode AND ReturnTime = ReturnTime); +1.6. (5分) 查询借阅过书籍《射雕英雄传》的学生,要求显示:学生姓名(`StudentName`),学院(`School`),图书名(`BookName`),借阅时间(`BorrowTime`) + +SELECT StudentName 学生姓名,School 学院,(SELECT BookName FROM bookinfo boo WHERE boo.ISBN = book.ISBN) 图书名,BorrowTime 借阅时间 FROM student st,borrowrecord bor,bookextinfo book WHERE st.StudentCode = bor.StudentCode AND book.Barcode = bor.Barcode AND (SELECT BookName FROM bookinfo boo WHERE boo.ISBN = book.ISBN) = '射雕英雄传'; +``` + +### 任务II + +#### 需求 + +``` +2. (30分)某医院病房计算机管理中心需要如下信息: + 科室:科编号、科名、科地址、科电话、医生姓名 + 病房:病房号、床位号、所属科室名 + 医生:姓名、职称、所属科室名、年龄、工作证号 + 病人:病历号、姓名、性别、诊断、主治医生、病房号 + + 2.1. (10分)其中,一个科室有多个病房、多个医生;一个病房只能属于一个科室,一名医生只属于一个科室,但可负责多名病人的诊治,一个病人的主主治生只有一个。科编号是标识列,从1开始自增长,步进值为1,医生职称有:实习,初级,中级,高级。 + 请设计该表关系模式结构(数据库物理模型),要求: + + + a. 中文名和英文名称清晰(可借助有道翻译工具,不允许开网页) + b. 表关系准确,包括主键,外键,标识列 + c. 将完成的设计截图,并且保存物理模型文件,命名为恰当的名称 + d. 将截图和物理模型文件放在自己的文件夹中 + + 2.2. (10分)创建存储过程实现:传入病历号,查询其对应的主治医生及其所在的病房号、床位号。 + 2.3. (10分)创建触发器实现:当医生离职时,检查其是否还有未完成医治的病人,如果还存在病人则不予离职,否则可以离职。 +``` + +#### 模型 + +##### C-D![c-d_2024-10-21_13-17-56](https://gitee.com/yuwuchuji_0/open-source-image-library/raw/master/image/upgit_20241021_1729488085.png) + +##### L-D![l-d_2024-10-21_13-18-45](https://gitee.com/yuwuchuji_0/open-source-image-library/raw/master/image/upgit_20241021_1729488095.png) + +##### P-D![p-d_2024-10-21_13-19-54](https://gitee.com/yuwuchuji_0/open-source-image-library/raw/master/image/upgit_20241021_1729488101.png) + +#### SQL + +```sql +-- 创建数据库 +DROP DATABASE IF EXISTS practice_db; +create database if not exists practice_db; +use practice_db; + +drop table if exists Department; + +drop table if exists doctor; + +drop table if exists job; + +drop table if exists patient; + +drop table if exists ward; + +/*==============================================================*/ +/* Table: Department */ +/*==============================================================*/ +create table Department +( + depa_id int not null auto_increment, + depa_name varchar(255), + depa_address varchar(255), + depa_phone bigint, + primary key (depa_id) +); + +/*==============================================================*/ +/* Table: doctor */ +/*==============================================================*/ +create table doctor +( + doc_id int not null auto_increment, + doc_name varchar(255) not null, + depa_id int not null, + job_id int not null, + doc_age int, + doc_Badge int, + primary key (doc_name) +); + +/*==============================================================*/ +/* Table: job */ +/*==============================================================*/ +create table job +( + job_id int not null auto_increment, + job_name varchar(255), + primary key (job_id) +); + +/*==============================================================*/ +/* Table: patient */ +/*==============================================================*/ +create table patient +( + pati_id int not null auto_increment, + doc_name varchar(255) not null, + ward_id int not null, + pati_name varchar(255), + pati_sex int, + pati_ruslut varchar(255), + primary key (pati_id) +); + +/*==============================================================*/ +/* Table: ward */ +/*==============================================================*/ +create table ward +( + ward_id int not null auto_increment, + depa_id int not null, + ward_bed_id int, + primary key (ward_id) +); + +alter table doctor add constraint FK_doc_depa foreign key (depa_id) + references Department (depa_id) on delete restrict on update restrict; + +alter table doctor add constraint FK_job_doc foreign key (job_id) + references job (job_id) on delete restrict on update restrict; + +alter table patient add constraint FK_doc_pati foreign key (doc_name) + references doctor (doc_name) on delete restrict on update restrict; + +alter table patient add constraint FK_word_pati foreign key (ward_id) + references ward (ward_id) on delete restrict on update restrict; + +alter table ward add constraint FK_ward_depa foreign key (depa_id) + references Department (depa_id) on delete restrict on update restrict; + +``` + + + +```sql +2.2. (10分)创建存储过程实现:传入病历号,查询其对应的主治医生及其所在的病房号、床位号。 +DELIMITER // + +CREATE PROCEDURE mess_doc_oati(IN pati_id_in INT) +BEGIN + SELECT + p.pati_name AS PatientName, + d.doc_name AS DoctorName, + w.ward_id AS WardID, + w.ward_bed_id AS BedID + FROM + patient p + JOIN + doctor d ON p.doc_name = d.doc_name + JOIN + ward w ON p.ward_id = w.ward_id + WHERE + p.pati_id = pati_id_in; +END // + +DELIMITER ; + 2.3. (10分)创建触发器实现:当医生离职时,检查其是否还有未完成医治的病人,如果还存在病人则不予离职,否则可以离职。 + + DELIMITER // + +CREATE TRIGGER IF NOT EXISTS leave_Doctor +BEFORE DELETE ON doctor FOR EACH ROW +BEGIN + DECLARE patient_doc VARCHAR(255); + + -- 检查该医生是否有未完成医治的病人 + SELECT COUNT(pati_id) INTO patient_doc FROM patient WHERE doc_name = OLD.doc_name; + + -- 如果有病人则阻止删除 + IF patient_doc > 0 THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = '该医生还有未完成医治的病人,不能离职。'; + END IF; +END // + +DELIMITER ; +``` + +## 3.末尾 + + + +一切为了更好的就业---Lyy \ No newline at end of file diff --git "a/\345\210\230\346\226\207\350\276\211/\350\247\206\345\233\276(\346\233\264\346\255\243)-2024-09-23.md" "b/\345\210\230\346\226\207\350\276\211/\350\247\206\345\233\276(\346\233\264\346\255\243)-2024-09-23.md" index c775a3ea81acfb43962418b55b71f3c446f6d7df..fcef66b52f85f484a6bf6ab11067bd7926e6060b 100644 --- "a/\345\210\230\346\226\207\350\276\211/\350\247\206\345\233\276(\346\233\264\346\255\243)-2024-09-23.md" +++ "b/\345\210\230\346\226\207\350\276\211/\350\247\206\345\233\276(\346\233\264\346\255\243)-2024-09-23.md" @@ -1,44 +1,162 @@ +# 视图 + +## 1.分析 + +### 需求 + +```sql -- 视图课堂练习 --- 1. 创建一个视图,显示所有部门的名称以及属于该部门的员工姓名 (*) -select dname,ename from dept d left join emp e on e.deptno=d.deptno; --- 2. 创建一个视图,显示员工姓名、职位、薪水和佣金。 -create view v_emp as -select ename,job,sal,comm from emp; --- 3. 创建一个视图,显示所有薪水大于 20000 的员工姓名、职位和薪水。 -select ename,job,sal from emp where sal > 20000; --- 4. 创建按部门分类的员工数量视图 (**) -select deptno,count(1) from emp group by deptno; -select d.dname 部门,count(e.empno) 员工数量 from emp e right join dept d on e.deptno =d.deptno group by d.deptno; --- 5. 创建一个视图,显示员工姓名、薪水及其所属的薪资等级。 -select ename 员工姓名, sal 薪水, grade 薪资等级 from emp e join salgrade s on e.sal between s.losal and hisal; --- 6. 创建一个视图,显示每个经理及其直接下属员工的姓名。 -select manager.ename,employee.ename from emp manager join emp employee on manager.empno=employee.mgr where manager.job = '经理'; --- 7. 创建一个视图,显示每个部门的名称及其平均薪水。 (*) -select d.deptno,avg(e.sal) from dept d left join emp e on d.deptno = e.deptno group by d.deptno; --- 8. 创建一个视图,显示在 2001 年以后入职的员工姓名和入职日期。 -create or replace view v_t as -select ename,hiredate from emp where hiredate>='2001-01-01'; --- 9. 删除一个已创建的视图。 -drop view v_t; --- 10. 修改第一个视图的名称 -rename table v_t to v_t1; --- 11. 修改第二个视图,显示员工姓名、职位、部门。 -create or replace view v_emp as -select ename,job,dname from emp e,dept d where e.deptno=d.deptno; + +创建一个视图,显示所有部门的名称以及属于该部门的员工姓名 +创建一个视图,显示员工姓名、职位、薪水和佣金。 +创建一个视图,显示所有薪水大于 20000 的员工姓名、职位和薪水。 +创建按部门分类的员工数量视图 +创建一个视图,显示员工姓名、薪水及其所属的薪资等级。 +创建一个视图,显示每个经理及其直接下属员工的姓名。 +创建一个视图,显示每个部门的名称及其平均薪水。 +创建一个视图,显示在 2001 年以后入职的员工姓名和入职日期。 +删除一个已创建的视图。 +修改第一个视图的名称 +修改第二个视图,显示员工姓名、职位、部门。 + +-- 作业 +-- 1:查询部门平均薪水最高的部门名称 +-- 2:查询员工比所属领导薪资高的部门名、员工名、员工领导编号 +-- 3:查询工资等级为4级,2000年以后入职的工作地点为上海的员工编号、姓名和工资 +``` + +### 数据来源 + +``` +-- 准备数据 +create database if not exists db_view; +use db_view; + +# 部门表 +create table dept( + deptno int primary key, + dname varchar(20), + loc varchar(20) +); +insert into dept values(10, '教研部','北京'), +(20, '学工部','上海'), +(30, '销售部','广州'), +(40, '财务部','武汉'); + +# 员工表 +create table emp( + empno int primary key, + ename varchar(20), + job varchar(20), + mgr int, + hiredate date, + sal numeric(8,2), + comm numeric(8, 2), + deptno int, +-- FOREIGN KEY (mgr) REFERENCES emp(empno), + FOREIGN KEY (deptno) REFERENCES dept(deptno) ON DELETE SET NULL ON UPDATE CASCADE +); +insert into emp values +(1001, '甘宁', '文员', 1013, '2000-12-17', 8000.00, null, 20), +(1002, '黛绮丝', '销售员', 1006, '2001-02-20', 16000.00, 3000.00, 30), +(1003, '殷天正', '销售员', 1006, '2001-02-22', 12500.00, 5000.00, 30), +(1004, '刘备', '经理', 1009, '2001-4-02', 29750.00, null, 20), +(1005, '谢逊', '销售员', 1006, '2001-9-28', 12500.00, 14000.00, 30), +(1006, '关羽', '经理', 1009, '2001-05-01', 28500.00, null, 30), +(1007, '张飞', '经理', 1009, '2001-09-01', 24500.00, null, 10), +(1008, '诸葛亮', '分析师', 1004, '2007-04-19', 30000.00, null, 20), +(1009, '曾阿牛', '董事长', null, '2001-11-17', 50000.00, null, 10), +(1010, '韦一笑', '销售员', 1006, '2001-09-08', 15000.00, 0.00, 30), +(1011, '周泰', '文员', 1008, '2007-05-23', 11000.00, null, 20), +(1012, '程普', '文员', 1006, '2001-12-03', 9500.00, null, 30), +(1013, '庞统', '分析师', 1004, '2001-12-03', 30000.00, null, 20), +(1014, '黄盖', '文员', 1007, '2002-01-23', 13000.00, null, 10); + +# 工资等级表 +create table salgrade( + grade int primary key, + losal int, + hisal int +); +insert into salgrade values +(1, 7000, 12000), +(2, 12010, 14000), +(3, 14010, 20000), +(4, 20010, 30000), +(5, 30010, 99990); +``` + +## 2.SQL + +### 任务I + +```sql +-- 视图课堂练习 + +1.创建一个视图,显示所有部门的名称以及属于该部门的员工姓名 +create view v_name as select dname,ename from dept d left join emp e on e.deptno=d.deptno; +2.创建一个视图,显示员工姓名、职位、薪水和佣金。 +create view v_emp as select ename,job,sal,comm from emp; +3.创建一个视图,显示所有薪水大于 20000 的员工姓名、职位和薪水。 +create view v_sal_20000 as select ename,job,sal from emp where sal > 20000; +4.创建按部门分类的员工数量视图 +create view v_na_num as select deptno,count(1) from emp group by deptno; select d.dname 部门,count(e.empno) 员工数量 from emp e right join dept d on e.deptno =d.deptno group by d.deptno; +5.创建一个视图,显示员工姓名、薪水及其所属的薪资等级。 +create view v_na_sa as select ename 员工姓名, sal 薪水, grade 薪资等级 from emp e join salgrade s on e.sal between s.losal and hisal; +6.创建一个视图,显示每个经理及其直接下属员工的姓名。 +create view v_mgr as select manager.ename,employee.ename from emp manager join emp employee on manager.empno=employee.mgr where manager.job = '经理'; +7.创建一个视图,显示每个部门的名称及其平均薪水。 +create view v_sal as select d.deptno,avg(e.sal) from dept d left join emp e on d.deptno = e.deptno group by d.deptno; +8.创建一个视图,显示在 2001 年以后入职的员工姓名和入职日期。 +create view v_2001 as create or replace view v_t as select ename,hiredate from emp where hiredate>='2001-01-01'; +9.删除一个已创建的视图。 +drop view v_name; +10.修改第一个视图的名称 +rename table v_name to v_t1; +11.修改第二个视图,显示员工姓名、职位、部门。 +create or replace view v_emp as select ename,job,dname from emp e,dept d where e.deptno=d.deptno; show full tables where table_type ='VIEW'; +``` +### 任务II +```sql -- 作业 -- 1:查询部门平均薪水最高的部门名称 -# 按部门分组查平均薪水 +SELECT dn.dname FROM dept dn +JOIN (SELECT deptno, AVG(sal) AS avg_sal FROM emp GROUP BY deptno ORDER BY avg_sal DESC LIMIT 1) em ON dn.deptno = em.deptno; +-- 2:查询员工比所属领导薪资高的部门名、员工名、员工领导编号 +SELECT dn.dname, em.ename, em.mgr FROM emp em +JOIN dept dn ON em.deptno = dn.deptno WHERE em.sal > (SELECT sal FROM emp WHERE empno = em.mgr); +-- 3:查询工资等级为4级,2000年以后入职的工作地点为上海的员工编号、姓名和工资 +SELECT em.empno, em.ename, em.sal FROM emp em +JOIN dept de ON em.deptno = de.deptno +JOIN salgrade sa ON em.sal BETWEEN sa.losal AND sa.hisal +WHERE sa.grade = 4 AND YEAR(em.hiredate) > 2000 AND de.loc = '上海'; +``` + +### 扩展其它写法 + +```sql +## -- 作业 + +-- 1:查询部门平均薪水最高的部门名称 + +### 按部门分组查平均薪水 + select deptno,avg(sal) avgsal from emp group by deptno; -# 查询最大平均薪水 + +### 查询最大平均薪水 + select max(avgsal) from (select deptno,avg(sal) avgsal from emp group by deptno) a; -# 查询最大平均薪水对应的部门编号 + +### 查询最大平均薪水对应的部门编号 + select deptno from emp group by deptno having avg(sal) = (select max(avgsal) from (select deptno,avg(sal) avgsal from emp group by deptno) a) -# 子查询写法 +### 子查询写法 + select * from dept where deptno = ( select deptno from emp group by deptno having floor(avg(sal)) = (select floor(max(avgsal)) from (select deptno,avg(sal) avgsal from emp group by deptno) a)) @@ -57,4 +175,44 @@ select * from emp e,dept d, salgrade s where e.deptno=d.deptno and e.sal between select * from emp e join dept d on e.deptno=d.deptno join salgrade s on e.sal between s.losal and s.hisal - where grade=4 and hiredate>'2000-12-31' and loc='上海'; \ No newline at end of file + where grade=4 and hiredate>'2000-12-31' and loc='上海'; +``` + + + +## 3.末尾 + +### 视图创建 + +``` +create view [视图] as [select 语句]; +``` + +## 视图修改 + +#### 名称 + +``` +rename table [视图名称] to [新名称]; +``` + +#### 结构 + +``` +create or replace view as [select 语句]; +after table [视图] as [select 语句]; +``` + +#### 数据 + + 含组合分类(group by),集合(union),聚合函数,常量...不可更改 + +#### 删除 + +``` +drop view 视图; +``` + + + +一切为了更好的就业---Lyy \ No newline at end of file diff --git "a/\345\210\230\346\226\207\350\276\211/\350\247\206\345\233\276-2024-09-20.md" "b/\345\210\230\346\226\207\350\276\211/\350\247\206\345\233\276-2024-09-20.md" index e21e472a8ac6bc8637eaf6358f60918b0781c198..6becb893dd64ecd6b581a6f826221722e191422a 100644 --- "a/\345\210\230\346\226\207\350\276\211/\350\247\206\345\233\276-2024-09-20.md" +++ "b/\345\210\230\346\226\207\350\276\211/\350\247\206\345\233\276-2024-09-20.md" @@ -1,10 +1,33 @@ -# 视图 +# 视图 -## 1.解析 +## 1.分析 -### 需求表代码 +### 需求 ```sql +-- 视图课堂练习 + +创建一个视图,显示所有部门的名称以及属于该部门的员工姓名 +创建一个视图,显示员工姓名、职位、薪水和佣金。 +创建一个视图,显示所有薪水大于 20000 的员工姓名、职位和薪水。 +创建按部门分类的员工数量视图 +创建一个视图,显示员工姓名、薪水及其所属的薪资等级。 +创建一个视图,显示每个经理及其直接下属员工的姓名。 +创建一个视图,显示每个部门的名称及其平均薪水。 +创建一个视图,显示在 2001 年以后入职的员工姓名和入职日期。 +删除一个已创建的视图。 +修改第一个视图的名称 +修改第二个视图,显示员工姓名、职位、部门。 + +-- 作业 +-- 1:查询部门平均薪水最高的部门名称 +-- 2:查询员工比所属领导薪资高的部门名、员工名、员工领导编号 +-- 3:查询工资等级为4级,2000年以后入职的工作地点为上海的员工编号、姓名和工资 +``` + +### 数据来源 + +``` -- 准备数据 create database if not exists db_view; use db_view; @@ -63,84 +86,89 @@ insert into salgrade values (5, 30010, 99990); ``` -### 要求 +## 2.SQL +### 任务I + +```sql -- 视图课堂练习 -1. 创建一个视图,显示所有部门的名称以及属于该部门的员工姓名 -2. 创建一个视图,显示员工姓名、职位、薪水和佣金。 -3. 创建一个视图,显示所有薪水大于 20000 的员工姓名、职位和薪水。 -4. 创建按部门分类的员工数量视图 -5. 创建一个视图,显示员工姓名、薪水及其所属的薪资等级。 -6. 创建一个视图,显示每个经理及其直接下属员工的姓名。 -7. 创建一个视图,显示每个部门的名称及其平均薪水。 -8. 创建一个视图,显示在 2001 年以后入职的员工姓名和入职日期。 -9. 删除一个已创建的视图。 -10. 修改第一个视图的名称 -11. 修改第二个视图,显示员工姓名、职位、部门。 --- 作业 +1.创建一个视图,显示所有部门的名称以及属于该部门的员工姓名 +create view v_name as select dname,ename from dept d left join emp e on e.deptno=d.deptno; +2.创建一个视图,显示员工姓名、职位、薪水和佣金。 +create view v_emp as select ename,job,sal,comm from emp; +3.创建一个视图,显示所有薪水大于 20000 的员工姓名、职位和薪水。 +create view v_sal_20000 as select ename,job,sal from emp where sal > 20000; +4.创建按部门分类的员工数量视图 +create view v_na_num as select deptno,count(1) from emp group by deptno; select d.dname 部门,count(e.empno) 员工数量 from emp e right join dept d on e.deptno =d.deptno group by d.deptno; +5.创建一个视图,显示员工姓名、薪水及其所属的薪资等级。 +create view v_na_sa as select ename 员工姓名, sal 薪水, grade 薪资等级 from emp e join salgrade s on e.sal between s.losal and hisal; +6.创建一个视图,显示每个经理及其直接下属员工的姓名。 +create view v_mgr as select manager.ename,employee.ename from emp manager join emp employee on manager.empno=employee.mgr where manager.job = '经理'; +7.创建一个视图,显示每个部门的名称及其平均薪水。 +create view v_sal as select d.deptno,avg(e.sal) from dept d left join emp e on d.deptno = e.deptno group by d.deptno; +8.创建一个视图,显示在 2001 年以后入职的员工姓名和入职日期。 +create view v_2001 as create or replace view v_t as select ename,hiredate from emp where hiredate>='2001-01-01'; +9.删除一个已创建的视图。 +drop view v_name; +10.修改第一个视图的名称 +rename table v_name to v_t1; +11.修改第二个视图,显示员工姓名、职位、部门。 +create or replace view v_emp as select ename,job,dname from emp e,dept d where e.deptno=d.deptno; + +show full tables where table_type ='VIEW'; +``` -## 2.代码 +### 任务II +```sql -- 作业 -- 1:查询部门平均薪水最高的部门名称 - -```sql SELECT dn.dname FROM dept dn JOIN (SELECT deptno, AVG(sal) AS avg_sal FROM emp GROUP BY deptno ORDER BY avg_sal DESC LIMIT 1) em ON dn.deptno = em.deptno; -``` - -- 2:查询员工比所属领导薪资高的部门名、员工名、员工领导编号 - -```sql SELECT dn.dname, em.ename, em.mgr FROM emp em JOIN dept dn ON em.deptno = dn.deptno WHERE em.sal > (SELECT sal FROM emp WHERE empno = em.mgr); -``` - -- 3:查询工资等级为4级,2000年以后入职的工作地点为上海的员工编号、姓名和工资 - -```sql SELECT em.empno, em.ename, em.sal FROM emp em JOIN dept de ON em.deptno = de.deptno JOIN salgrade sa ON em.sal BETWEEN sa.losal AND sa.hisal WHERE sa.grade = 4 AND YEAR(em.hiredate) > 2000 AND de.loc = '上海'; ``` - - ## 3.末尾 ### 视图创建 -```sql +``` create view [视图] as [select 语句]; ``` -### 视图修改 +## 视图修改 -名称 +#### 名称 -```sql +``` rename table [视图名称] to [新名称]; ``` -结构 +#### 结构 -```sql -create or replace view as [select 语句]; ``` - -```sql +create or replace view as [select 语句]; after table [视图] as [select 语句]; ``` -数据 +#### 数据 -​ 含组合分类(group by),集合(union),聚合函数,常量...不可更改 + 含组合分类(group by),集合(union),聚合函数,常量...不可更改 -删除 +#### 删除 -```sql +``` drop view 视图; ``` + + +一切为了更好的就业---Lyy \ No newline at end of file