帮忙做个SQL题目

来源:百度知道 编辑:UC知道 时间:2024/07/02 10:06:02
USE master
GO
--检验数据库是否存在,如果为真,删除此数据库--
IF exists(SELECT * FROM sysdatabases WHERE name='Student')
DROP DATABASE Student
GO
CREATE DATABASE Student
GO

--建数据表--
USE Student
GO
CREATE TABLE Member --学生表
(
MID char(10) primary key, --学生号
MName CHAR(50) NOT NULL --姓名
)
GO
CREATE TABLE F --课程表
(
FID char(10) primary key, --课程号
FName CHAR(50) NOT NULL --课程名
)

GO
CREATE TABLE score --学生成绩表
(
SID int identity(1,1) primary key, --成绩记录号
FID char(10) foreign key(FID) references F(FID) , --课程号
MID char(10) foreign key(MID) references Member(MID) , --学生号
Score int NOT NULL --成绩
)
GO
--课程表中插入数据--
INSERT INTO F(FID,FName)VALUES('F001','语文')
INSERT INTO F(FID,FName)VALUES('F002','数学')
INSERT INTO F(FID,FName)VALUES('F003','英语'

第一题,用SQL 2005 做如下,如果是以前的版本,不支持PIVOT运算符,相对麻烦:
------------------------------------
select MName As 姓名,[语文],[数学],[英语],[历史]
from
(SELECT score.MID,Member.MName, F.FName,score.Score
FROM F
INNER JOIN score ON F.FID = score.FID
INNER JOIN Member ON score.MID = Member.MID) liming
PIVOT
( Sum(Score) FOR FName IN ("语文","数学","英语","历史") )
As pvt --任意名
Order By MID --可不排列
------------------------------------

第二题光求结果不要求特殊排列的话,相对简单
---------------------------------------------
SELECT Member.MName, F.FName,score.Score
FROM F
INNER JOIN score ON F.FID = score.FID
INNER JOIN Member ON score.MID = Member.MID
WHERE score.Score<70
---------------------------------------------

第三题也不难
--------------------------------------------
SELECT Member.MName, AVG(score.Score) as avgScore
FROM F
INNER JOIN score ON F.FID = score