题目1
1、学校图书馆借书信息管理系统建立三个表:
学生信息表:student
字段名称 stuID stuName major 图书表:book
字段名称 BID title author 借书信息表:borrow
字段名称 borrowID stuID BID T_time B_time char(10) char(10) char(10) datetime datetime 数据类型 说明 借书编号,主键 学生编号,外键 图书编号,外键 借书日期 还书日期 char(10) char(50) char(20) 数据类型 说明 图书编号,主键 书名 作者 char(10) Varchar(10) Varchar(50) 数据类型 说明 学生编号,主键 学生名称 专业 请编写SQL语句完成以下的功能:
1) 查询“计算机”专业学生在“2007-12-15”至“2008-1-8”时间段内借书的学生编号、
学生名称、图书编号、图书名称、借出日期;参考查询结果如下图所示:
2) 查询所有借过图书的学生编号、学生名称、专业;参考查询结果如下图所示:
3) 查询借过作者为“安意如”的图书的学生姓名、图书名称、借出日期、归还日期;
参考查询结果如下图所示:
4) 查询目前借书但未归还图书的学生名称及未还图书数量;参考查询结果如下图所
示:
附加:建表语句:
USE master GO /*$$$$$$$$$$$$$建库$$$$$$$$$$$$$$$$$$$$$$$$*/ --检验数据库是否存在,如果为真,删除此数据库-- IF exists(SELECT * FROM sysdatabases WHERE name='BOOK') DROP DATABASE BOOK GO CREATE DATABASE BOOK GO --建数据表-- USE BOOK GO CREATE TABLE student --学生信息表 ( stuID CHAR(10) primary key, --学生编号 stuName CHAR(10) NOT NULL , --学生名称 major CHAR(50) NOT NULL --专业 ) GO CREATE TABLE book --图书表 ( BID CHAR(10) primary key, --图书编号 title CHAR(50) NOT NULL, --书名 author CHAR(20) NOT NULL, --作者 ) GO CREATE TABLE borrow --借书表 ( borrowID CHAR(10) primary key, --借书编号 stuID CHAR(10) foreign key(stuID) references student(stuID), --学生编号 BID CHAR(10) foreign key(BID) references book(BID),--图书编号 T_time datetime NOT NULL, --借出日期 B_time datetime --归还日期 ) GO --学生信息表中插入数据-- INSERT INTO student(stuID,stuName,major)VALUES('1001','林林','计算机') INSERT INTO student(stuID,stuName,major)VALUES('1002','白杨','计算机') INSERT INTO student(stuID,stuName,major)VALUES('1003','虎子','英语') INSERT INTO student(stuID,stuName,major)VALUES('1004','北漂的雪','工商管理') INSERT INTO student(stuID,stuName,major)VALUES('1005','五月','数学') --图书信息表中插入数据-- INSERT INTO book(BID,title,author)VALUES('B001','人生若只如初见','安意如') INSERT INTO book(BID,title,author)VALUES('B002','入学那天遇见你','晴空') INSERT INTO book(BID,title,author)VALUES('B003','感谢折磨你的人','如娜') INSERT INTO book(BID,title,author)VALUES('B004','我不是教你诈','刘庸') INSERT INTO book(BID,title,author)VALUES('B005','英语四级','白雪') --借书信息表中插入数据-- INSERT borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T001','1001','B001','2007-12-26',null) INSERT borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T002','1004','B003','2008-1-5',null) INTO INTO INSERT INTO borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T003','1005','B001','2007-10-8','2007-12-25') INSERT INTO borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T004','1005','B002','2007-12-16','2008-1-7') INSERT INTO borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T005','1002','B004','2007-12-22',null) INSERT borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T006','1005','B005','2008-1-6',null) INSERT borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T007','1002','B001','2007-9-11',null) INSERT borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T008','1005','B004','2007-12-10',null) INSERT INTO INTO INTO INTO borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T009','1004','B005','2007-10-16','2007-12-18') INSERT INTO borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T010','1002','B002','2007-9-15','2008-1-5') INSERT INTO borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T011','1004','B003','2007-12-28',null) INSERT borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T012','1002','B003','2007-12-30',null)
标准答案: -- 1)查询“计算机”专业学生在“2007-12-15”至“2008-1-8”时间段内借书的学生编号、学生名称、图书编号、图书名称、借出日期— select 学生编号=stuID,学生名称=(select stuName from student where stuID=borrow.stuID),图书编号=BID,图书名称=(select title from book where BID=borrow.BID),借出日期=T_time from borrow where stuID in (select stuID from student where major='计算机') and INTO T_time>'2007-12-15' and T_time<'2008-1-8' -- 2)查询所有借过图书的学生编号、学生名称、专业-- select 学生编号=stuID,学生名称=stuName,专业=major from student where stuID in (select stuID from borrow) -- 3)查询借过作者为“安意如”的图书的学生姓名、图书名称、借出日期-- select 学生名称=(select stuName from student where stuID=borrow.stuID),图书名称=(select title from book where BID=borrow.BID),借出日期=T_time,归还日期=B_time from borrow where BID in (select BID from book where author='安意如') -- 4)查询目前借书但未归还图书的学生名称及未还图书数量-- select 学生名称=(select stuName from student where stuID=borrow.stuID),借书数量=count(*) from borrow where B_time is null group by stuID
题目2
程序员工资表:ProWage
字段名称 ID PName Wage int Char(10) int 数据类型 说明 自动编号,主键 程序员姓名 工资 创建一个存储过程,对程序员的工资进行分析,月薪1500到10000不等,如果有百分之五十的人薪水不到2000元,给所有人加薪,每次加100,再进行分析,直到有一半以上的人大于2000元为止,存储过程执行完后,最终加了多少钱?
例如:如果有百分之五十的人薪水不到2000,给所有人加薪,每次加100元,直到有一半以上的人工资大于2000元,调用存储过程后的结果如图: