IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】
SQL存储过程实例练习和答案
题目1
1、学校图书馆借书信息管理系统建立三个表:
学生信息表:student
字段名称 | 数据类型 | 说明 |
stuID | char(10) | 学生编号,主键 |
stuName | Varchar(10) | 学生名称 |
major | Varchar(50) | 专业 |
图书表:book
字段名称 | 数据类型 | 说明 |
BID | char(10) | 图书编号,主键 |
title | char(50) | 书名 |
author | char(20) | 作者 |
借书信息表:borrow
字段名称 | 数据类型 | 说明 |
borrowID | char(10) | 借书编号,主键 |
stuID | char(10) | 学生编号,外键 |
BID | char(10) | 图书编号,外键 |
T_time | datetime | 借书日期 |
B_time | datetime | 还书日期 |
请编写SQL语句完成以下的功能:
1)查询“计算机”专业学生在“2007-12-15”至“2008-1-8”时间段内借书的学生编号、学生名称、图书编号、图书名称、借出日期;参考查询结果如下图所示:
2)查询所有借过图书的学生编号、学生名称、专业;参考查询结果如下图所示:
3)查询借过作者为“安意如”的图书的学生姓名、图书名称、借出日期、归还日期;参考查询结果如下图所示:
4)查询目前借书但未归还图书的学生名称及未还图书数量;参考查询结果如下图所示:
附加:建表语句:
USEmaster GO /*$$$$$$$$$$$$$建库$$$$$$$$$$$$$$$$$$$$$$$$*/ --检验数据库是否存在,如果为真,删除此数据库-- IFexists(SELECT*FROMsysdatabasesWHEREname='BOOK') DROPDATABASEBOOK GO CREATEDATABASEBOOK GO --建数据表-- USEBOOK GO CREATETABLEstudent--学生信息表 ( stuIDCHAR(10)primarykey,--学生编号 stuNameCHAR(10)NOTNULL,--学生名称 majorCHAR(50)NOTNULL--专业 ) GO CREATETABLEbook--图书表 ( BIDCHAR(10)primarykey,--图书编号 titleCHAR(50)NOTNULL,--书名 authorCHAR(20)NOTNULL,--作者 ) GO CREATETABLEborrow--借书表 ( borrowIDCHAR(10)primarykey,--借书编号 stuIDCHAR(10)foreignkey(stuID)referencesstudent(stuID),--学生编号 BIDCHAR(10)foreignkey(BID)referencesbook(BID),--图书编号 T_timedatetimeNOTNULL,--借出日期 B_timedatetime--归还日期 ) GO --学生信息表中插入数据-- INSERTINTOstudent(stuID,stuName,major)VALUES('1001','林林','计算机') INSERTINTOstudent(stuID,stuName,major)VALUES('1002','白杨','计算机') INSERTINTOstudent(stuID,stuName,major)VALUES('1003','虎子','英语') INSERTINTOstudent(stuID,stuName,major)VALUES('1004','北漂的雪','工商管理') INSERTINTOstudent(stuID,stuName,major)VALUES('1005','五月','数学') --图书信息表中插入数据-- INSERTINTObook(BID,title,author)VALUES('B001','人生若只如初见','安意如') INSERTINTObook(BID,title,author)VALUES('B002','入学那天遇见你','晴空') INSERTINTObook(BID,title,author)VALUES('B003','感谢折磨你的人','如娜') INSERTINTObook(BID,title,author)VALUES('B004','我不是教你诈','刘庸') INSERTINTObook(BID,title,author)VALUES('B005','英语四级','白雪') --借书信息表中插入数据-- INSERTINTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T001','1001','B001','2007-12-26',null) INSERTINTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T002','1004','B003','2008-1-5',null) INSERTINTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T003','1005','B001','2007-10-8','2007-12-25') INSERTINTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T004','1005','B002','2007-12-16','2008-1-7') INSERTINTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T005','1002','B004','2007-12-22',null) INSERTINTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T006','1005','B005','2008-1-6',null) INSERTINTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T007','1002','B001','2007-9-11',null) INSERTINTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T008','1005','B004','2007-12-10',null) INSERTINTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T009','1004','B005','2007-10-16','2007-12-18') INSERTINTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T010','1002','B002','2007-9-15','2008-1-5') INSERTINTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T011','1004','B003','2007-12-28',null) INSERTINTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T012','1002','B003','2007-12-30',null) |
标准答案:
--1)查询“计算机”专业学生在“2007-12-15”至“2008-1-8”时间段内借书的学生编号、学生名称、图书编号、图书名称、借出日期— select学生编号=stuID,学生名称=(selectstuNamefromstudentwherestuID=,图书编号=BID,图书名称=(selecttitlefrombookwhereBID=,借出日期=T_timefromborrowwherestuIDin(selectstuIDfromstudentwheremajor='计算机')andT_time>'2007-12-15'andT_time<'2008-1-8' --2)查询所有借过图书的学生编号、学生名称、专业-- select学生编号=stuID,学生名称=stuName,专业=majorfromstudentwherestuIDin(selectstuIDfromborrow) --3)查询借过作者为“安意如”的图书的学生姓名、图书名称、借出日期-- select学生名称=(selectstuNamefromstudentwherestuID=,图书名称=(selecttitlefrombookwhereBID=,借出日期=T_time,归还日期=B_timefromborrowwhereBIDin(selectBIDfrombookwhereauthor='安意如') --4)查询目前借书但未归还图书的学生名称及未还图书数量-- select学生名称=(selectstuNamefromstudentwherestuID=,借书数量=count(*)fromborrowwhereB_timeisnullgroupbystuID |
题目2
程序员工资表:ProWage
字段名称 | 数据类型 | 说明 |
ID | int | 自动编号,主键 |
PName | Char(10) | 程序员姓名 |
Wage | int | 工资 |
创建一个存储过程,对程序员的工资进行分析,月薪1500到10000不等,如果有百分之五十的人薪水不到2000元,给所有人加薪,每次加100,再进行分析,直到有一半以上的人大于2000元为止,存储过程执行完后,最终加了多少钱?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论