本文用3个题目,从建立数据库到创建存储过程,详细讲解数据库的功能。这个问题面试的时候也是经常会用到的,比如写sql语句。
题目1
学校 图书馆借书信息管理 系统建立三个表:学生信息表:student
字段名称 | 数据类型 | 说明 |
stuID | char(10) | 学生编号,主键 |
stuName | Varchar(10) | 学生名称 |
major | Varchar(50) | 专业 |
字段名称 | 数据类型 | 说明 |
stuID | char(10) | 学生编号,主键 |
stuName | Varchar(10) | 学生名称 |
major | Varchar(50) | 专业 |
字段名称 | 数据类型 | 说明 |
borrowID | char(10) | 借书编号,主键 |
stuID | char(10) | 学生编号,外键 |
BID | char(10) | 图书编号,外键 |
T_time | datetime | 借书日期 |
B_time | datetime | 还书日期 |
1) 查询“计算机”专业学生在“2007-12-15”至“2008-1-8”时间段内借书的学生编号、学生名称、图书编号、图书名称、借出日期;参考查询结果如下图所示:
![\](http://www.2cto.com/uploadfile/Collfiles/20140902/201409020918293.png)
2) 查询所有借过图书的学生编号、学生名称、专业;参考查询结果如下图所示:
![\](http://www.2cto.com/uploadfile/Collfiles/20140902/201409020918304.png)
3) 查询借过作者为“安意如”的图书的学生姓名、图书名称、借出日期、归还日期;参考查询结果如下图所示:
![\](http://www.2cto.com/uploadfile/Collfiles/20140902/201409020918305.png)
4) 查询目前借书但未归还图书的学生名称及未还图书数量;参考查询结果如下图所示:
![\](http://www.2cto.com/uploadfile/Collfiles/20140902/201409020918306.png)
附加:建表语句:
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'
)
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
INTO
borrow(borrowID,stuID,BID,T_time,B_time)
VALUES
(
'T001'
,
'1001'
,
'B001'
,
'2007-12-26'
,
null
)
INSERT
INTO
borrow(borrowID,stuID,BID,T_time,B_time)
VALUES
(
'T002'
,
'1004'
,
'B003'
,
'2008-1-5'
,
null
)
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
INTO
borrow(borrowID,stuID,BID,T_time,B_time)
VALUES
(
'T006'
,
'1005'
,
'B005'
,
'2008-1-6'
,
null
)
INSERT
INTO
borrow(borrowID,stuID,BID,T_time,B_time)
VALUES
(
'T007'
,
'1002'
,
'B001'
,
'2007-9-11'
,
null
)
INSERT
INTO
borrow(borrowID,stuID,BID,T_time,B_time)
VALUES
(
'T008'
,
'1005'
,
'B004'
,
'2007-12-10'
,
null
)
INSERT
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
INTO
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
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
Member.MName
AS
姓名,
英语 =
SUM
(
CASE
F.FName
WHEN
'语文'
THEN
Score.Score
END
),
数学 =
SUM
(
CASE
F.FName
WHEN
'数学'
THEN
Score.Score
END
),
语文 =
SUM
(
CASE
F.FName
WHEN
'英语'
THEN
Score.Score
END
),
历史 =
SUM
(
CASE
F.FName
WHEN
'历史'
THEN
Score.Score
END
)
FROM
Score, Member,F
WHERE
F.FID = Score.FID
AND
Member.MID =Score.MID
GROUP
BY
Member.MName
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
procedure
P_stu
GO
create
procedure
P_stu
@num
int
As
print
'参加'
+
convert
(
varchar
(5),@num)+
'门课考试的学生姓名及学号:'
select
姓名=(
select
MName
from
Member
where
MID=Score.MID),
学号=MID
from
Score
group
by
MID
having
count
(*)=@num
--调用存储过程--
exec
P_stu @num=2