大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
本文用3个题目,从建立数据库到创建存储过程,详细讲解数据库的功能。这个问题面试的时候也是经常会用到的,比如写sql语句。
题目1
学校
图书馆借书信息管理
系统建立三个表:
学生信息表:student
|
字段名称 |
数据类型 |
说明 |
|
stuID |
char(10) |
学生编号,主键 |
|
stuName |
Varchar(10) |
学生名称 |
|
major |
Varchar(50) |
专业 |
图书表:book
|
字段名称 |
数据类型 |
说明 |
|
stuID |
char(10) |
学生编号,主键 |
|
stuName |
Varchar(10) |
学生名称 |
|
major |
Varchar(50) |
专业 |
借书信息表: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) 查询目前借书但未归还图书的学生名称及未还图书数量;参考查询结果如下图所示:

附加:建表语句:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
USE master
GO
/*$$$$$$$$$$$$$建库$$$$$$$$$$$$$$$$$$$$$$$$*/
--检验数据库是否存在,如果为真,删除此数据库--
IF exists(SELECT* FROM sysdatabases WHERE name='BOOK')
DROPDATABASEBOOK
GO
CREATE DATABASEBOOK
GO
--建数据表--
USE BOOK
GO
CREATE TABLEstudent --学生信息表
(
stuID CHAR(10) primarykey, --学生编号
stuName CHAR(10) NOTNULL, --学生名称
major CHAR(50) NOTNULL --专业
)
GO
CREATE TABLEbook --图书表
(
BID CHAR(10) primarykey, --图书编号
title CHAR(50) NOTNULL, --书名
author CHAR(20) NOTNULL, --作者
)
GO
CREATE TABLEborrow --借书表
(
borrowID CHAR(10) primarykey, --借书编号
stuID CHAR(10) foreignkey(stuID) referencesstudent(stuID), --学生编号
BID CHAR(10) foreignkey(BID) referencesbook(BID),--图书编号
T_time datetime NOTNULL, --借出日期
B_time datetime --归还日期
)
GO
--学生信息表中插入数据--
INSERT INTOstudent(stuID,stuName,major)VALUES('1001','林林','计算机')
INSERT INTOstudent(stuID,stuName,major)VALUES('1002','白杨','计算机')
INSERT INTOstudent(stuID,stuName,major)VALUES('1003','虎子','英语')
INSERT INTOstudent(stuID,stuName,major)VALUES('1004','北漂的雪','工商管理')
INSERT INTOstudent(stuID,stuName,major)VALUES('1005','五月','数学')
--图书信息表中插入数据--
INSERT INTObook(BID,title,author)VALUES('B001','人生若只如初见','安意如')
INSERT INTObook(BID,title,author)VALUES('B002','入学那天遇见你','晴空')
INSERT INTObook(BID,title,author)VALUES('B003','感谢折磨你的人','如娜')
INSERT INTObook(BID,title,author)VALUES('B004','我不是教你诈','刘庸')
INSERT INTObook(BID,title,author)VALUES('B005','英语四级','白雪')
--借书信息表中插入数据--
INSERT INTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T001','1001','B001','2007-12-26',null)
INSERT INTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T002','1004','B003','2008-1-5',null)
INSERT INTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T003','1005','B001','2007-10-8','2007-12-25')
INSERT INTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T004','1005','B002','2007-12-16','2008-1-7')
INSERT INTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T005','1002','B004','2007-12-22',null)
INSERT INTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T006','1005','B005','2008-1-6',null)
INSERT INTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T007','1002','B001','2007-9-11',null)
INSERT INTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T008','1005','B004','2007-12-10',null)
INSERT INTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T009','1004','B005','2007-10-16','2007-12-18')
INSERT INTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T010','1002','B002','2007-9-15','2008-1-5')
INSERT INTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T011','1004','B003','2007-12-28',null)
INSERT INTOborrow(borrowID,stuID,BID,T_time,B_time)VALUES('T012','1002','B003','2007-12-30',null)
|
标准答案: — 1)查询“计算机”专业学生在“2007-12-15”至“2008-1-8”时间段内借书的学生编号、学生名称、图书编号、图书名称、借出日期—
select 学生编号=stuID,
学生名称=(selectstuName from student wherestuID=borrow.stuID),
图书编号=BID,
图书名称=(selecttitle from book whereBID=borrow.BID),
借出日期=T_time
from borrow wherestuID in(selectstuID from student wheremajor='计算机')
and T_time>'2007-12-15' andT_time<'2008-1-8'
2)查询所有借过图书的学生编号、学生名称、专业--
select 学生编号=stuID,
学生名称=stuName,
专业=major fromstudent where stuID in(selectstuID from borrow)
3)查询借过作者为“安意如”的图书的学生姓名、图书名称、借出日期--
select 学生名称=(selectstuName fromstudent wherestuID=borrow.stuID),
图书名称=(selecttitle from book whereBID=borrow.BID),
借出日期=T_time,
归还日期=B_time fromborrow whereBID in (selectBID frombook whereauthor='安意如')
4)查询目前借书但未归还图书的学生名称及未还图书数量--
SELECT Member.MName AS姓名,
英语 = SUM(CASEF.FName WHEN '语文'THENScore.Score END),
数学 = SUM(CASEF.FName WHEN '数学'THENScore.Score END),
语文 = SUM(CASEF.FName WHEN '英语'THENScore.Score END),
历史 = SUM(CASEF.FName WHEN '历史'THENScore.Score END)
FROM Score, Member,F
WHERE F.FID = Score.FID AND Member.MID =Score.MID GROUP BYMember.MName
2)查询四门课中成绩低于70分的学生及相对应课程名和成绩–
select 姓名=(select MName from Member where MID=Score.MID), 课程名=(select FName from F where FID=Score.FID), 成绩=Score from Score where Score<70
3)统计各个学生四课程的平均分,且按平均分数由高到底排序--
select 姓名=(select MName from Member where MID=Score.MID), 平均分=Avg(Score) from Score group by MID order by 平均分 desc
4)创建存储过程--
if exists (select* from sysobjects where name='P_stu')
drop procedureP_stu
GO
create procedureP_stu
@num int
As
print'参加'+convert(varchar(5),@num)+'门课考试的学生姓名及学号:'
select 姓名=(selectMName fromMember whereMID=Score.MID),
学号=MID fromScore group byMID havingcount(*)=@num
--调用存储过程--
exec P_stu @num=2
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/185618.html原文链接:https://javaforall.net
