武汉大学数据库例题及解答.docx

上传人:b****5 文档编号:5785051 上传时间:2023-01-01 格式:DOCX 页数:34 大小:116.47KB
下载 相关 举报
武汉大学数据库例题及解答.docx_第1页
第1页 / 共34页
武汉大学数据库例题及解答.docx_第2页
第2页 / 共34页
武汉大学数据库例题及解答.docx_第3页
第3页 / 共34页
武汉大学数据库例题及解答.docx_第4页
第4页 / 共34页
武汉大学数据库例题及解答.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

武汉大学数据库例题及解答.docx

《武汉大学数据库例题及解答.docx》由会员分享,可在线阅读,更多相关《武汉大学数据库例题及解答.docx(34页珍藏版)》请在冰豆网上搜索。

武汉大学数据库例题及解答.docx

武汉大学数据库例题及解答

【例4.3】创建大学教学管理数据库,数据库名为JXGL,其主数据文件逻辑名称为JXGL_data,数据文件的操作系统文件名称为JXGL.mdf,数据文件初始大小为5MB,最大值为200MB,以5%的增量增加。

日志逻辑文件名称为JXGL_log,日志的操作系统文件名称为JXGL.ldf,日志文件初始大小为5MB,可按2MB增量增加,最大值为50MB。

CREATEDATABASEJXGL

ON

(NAME=JXGL_data,//默认为主数据文件

FILENAME='''+@data_path+'JXGL.mdf'',

SIZE=5,

MAXSIZE=200,

FILEGROWTH=5%)

LOGON

(NAME=JXGL_log,

FILENAME='''+@data_path+'JXGL.ldf'',

SIZE=5MB,

MAXSIZE=50MB,

FILEGROWTH=2MB)

【例】创建test数据库,包含一个主文件组和两个次文件组。

CREATEDATABASEtest

ON

PRIMARY/*定义在主文件组上的文件*/

(NAME=pri_file1,

FILENAME='C:

\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\pri_file1.mdf',

SIZE=10,MAXSIZE=50,FILEGROWTH=15%),

(NAME=pri_file2,

FILENAME='C:

\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\pri_file2.ndf',

SIZE=10,MAXSIZE=50,FILEGROWTH=15%),

FILEGROUPGrp1/*定义在次文件组Grp1上的文件*/

(NAME=Grp1_file1,

FILENAME='C:

\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\Grp1_file1.ndf',

SIZE=10,MAXSIZE=50,FILEGROWTH=5),

FILEGROUPGrp2/*定义在次文件组Grp2上的文件*/

(NAME=Grp2_file1,

FILENAME='C:

\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\Grp2_file1.ndf',

SIZE=10,MAXSIZE=50,FILEGROWTH=5),

LOGON/*定义事务日志文件*/

(NAME='test_log',

FILENAME='C:

\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\test_log.ldf',

SIZE=5,MAXSIZE=25,FILEGROWTH=5)

GO

例:

在原有数据库的基础上增加一个文件组date1,添加一个新文件并加入到文件组date1中

ALTERDATABASEstuDB

ADDFILEGROUPdate1

GO

ALTERDATABASEstuDB

ADDFILE

(NAME='stuDB_data1',--主数据文件的逻辑名

FILENAME='D:

\project\stuDB_data1.ndf',--主数据文件的物理名

SIZE=5mb,--主数据文件初始大小

MAXSIZE=100mb,--主数据文件增长的最大值

FILEGROWTH=15%--主数据文件的增长率

TOFILEGROUPdate1

GO

【例】删除已经创建的“学生管理数据库”。

DROPDATABASE学生管理数据库

GO

例:

在xsgl数据库中创建kc表。

USExsgl

GO

CREATETABLEkc

课程号char(4)PRIMARYKEY,

课程名char(16)notnull,

学分smallint,

学时数smallint

GO

【例】在xs表的“专业”列和“姓名”列上创建名为“IX_zyxm”的非聚集、复合索引。

运行如下命令。

CREATENONCLUSTEREDINDEXIX_zyxmON

xs(专业,姓名)

GO

--查看和维护索引信息

EXECsp_helpindex<表名>

--删除索引

DROPINDEX索引名[,...]ON表名

【例】向xs表中添加如表4-1所示字段

USExsgl

GO

ALTERTABLExs

ADD电话CHAR(8)NULL

ADD电子邮件CHAR(40)NULL

GO

【例】将xs表中的电子邮件字段的列长改为20。

ALTERTABLExs

ALTERCOLUMN电子邮件CHAR(20)NULL

【例】在SC表中增加完整性约束定义,使grade在0-100之间。

ALTERTABLESC

ADDCONSTRAINTgrade_CHKCHECK(grade

BETWEEN0AND100)

【例】将xs表中的电话列删除。

ALTERTABLExsDROPCOLUMN电话

【例】查询所有女生的信息并将结果保存在名为“女生表”的数据表中。

USExsgl

GO

SELECT*INTO女生表

FROMxs

WHERE性别='女'

【例】查询所有男生的信息并将结果存入临时表中。

USExsgl

SELECT*

INTO#TEMPDB

FROMxs

WHERE性别='男'

要查看临时表的内容可用下面的语句:

SELECT*FROM#TEMPDB

【例】查询所有学生的学号,姓名及年龄。

USExsgl

GO

SELECT学号,姓名,年龄=DATEDIFF(YY,出生时间,GETDATE())

FROMxs

GO

【例】查询xs表中前5条记录

USExsgl

GO

SELECTTOP5*

FROMxs

GO

【例】在cj表中求每门课程成绩大于90分的人数,

并显示统计的明细。

USExsgl

GO

SELECT*

FROMcj

WHERE成绩>=90

ORDERBY课程号

COMPUTECOUNT(学号)BY课程号

GO

【例】用命令方式通过视图修改王丹同学的“计算机基础”

课成绩,将成绩改为91分,并查看修改结果。

具体操作命令如下。

UPDATE电子商务专业学生成绩视图

SET成绩=91

WHERE姓名='王丹'AND课程名='计算机基础'

GO

SELECT*FROM电子商务专业学生成绩视图

WHERE姓名='王丹'AND课程名='计算机基础'

GO

例5.1图1.11所示的大学教学管理数据库中的专业关系SS,可用如下的表定义语句定义:

CREATETABLESS

(SCODE#CHAR(5)PRIMARYKEY,

SSNAMEVARCHAR(30)NOTNULL);

例5.2图1.11所示的大学教学管理数据库中的学生关系表S,可用如下的表定义语句定义:

CREATETABLES

(S#CHAR(9)PRIMARYKEY,

SNAMECHAR(10)NOTNULL,

SSEXCHAR

(2)

CHECK(SSEXIN(′男′,′女′)),

SBIRTHINDATENOTNULL,

PLACEOFBCHAR(16),

SCODE#CHAR(5)NOTNULL,

CLASSCHAR(5)NOTNULL);

例:

教学管理数据库系统中的学习关系SC。

CREATETABLESC

(S#CHAR(9),

C#CHAR(7),

GRADEINT,

PRIMARYKEY(S#,C#));

例5.7给专业表SS增加一个新属性NOUSE_COLUMN,设其数据类型为NUMERIC(8,1)。

语句应为:

ALTERTABLESSADDNOUSE_COLUMN

NUMERIC(8,1);

例5.8删除专业表SS中增加的属性NOUSE_COLUMN的两种删除语句形式分别为:

ALTERTABLESSDROPNOUSE_COLUMNCASCADE;

ALTERTABLESSDROPNOUSE_COLUMNRESTRICT;

例5.9将专业表SS中的专业名称SSNAME(30)修改为SSNAME(40)(即长度增加10)的列修改语句:

ALTERTABLESSMODIFYSSNAMEVARCHAR(40);

例:

给学习关系SC中插入王丽丽同学(学号为

200401003)学习计算机网络课(课程号为

C403001)的成绩(89分)。

INSERTINTOSC(S#,C#,GRADE)

VALUES(’200401003’,’C403001’,89);

例5.12写出将学生关系S中的学生名字“王丽丽”(学号为200401003)改为“王黎丽”的数据修改语句。

UPDATES

SETSNAME='王黎丽'

WHERES#='200401003';

例5.13写出将所有女同学的专业改为S0404的数据修改语句。

UPDATES

SETSCODE#='S0404'

WHERESSEX='女';

例5.14从学生关系S中删除学号为200403001的学生的信息。

DELETEFROMS

WHERES#='200403001';

例5.15删除专业关系中的全部信息。

DELETEFROMSS;

例5.19查询所有学生所学课程的最高分数、最低分

数和平均分数。

SELECTMAX(GRADE)AS最高分数,

MIN(GRADE)AS最低分数,

AVG(GRADE)AS平均分数

FROMSC;

例5.20写出查询所有学习了计算机网络课(课程号为

C403001)的学生的学号和成绩的查询语句。

学习关系模式:

SC(S#,C#,GRADE)

SELECTS#,GRADE

FROMSC

WHEREC#=´C403001´;

例5.21查询选修了计算机网络课(课程号为C403001)或信

息安全技术课(课程号为C403002)的学生的学号。

SELECTS#

FROMSC

WHEREC#=´C403001´ORC#=´C403002´;

例5.22查询年龄在21岁至28岁之间学生的基本信息。

SELECT*

FROMS

WHEREYEAR(GETDATE())-YEAR(SBIRTHIN)

BETWEEN21AND28;

例5.23查询各个同学所学课程的平均分数。

SELECTS#,AVG(GRADE)AS平均分数

FROMSC

GROUPBYS#;

例5.24查询每个专业男、女生的人数。

SELECTSCODE#AS专业代码,SSEXAS性别,

COUNT(*)AS人数

FROMS

GROUPBYSCODE#,SSEX;

例5.25查询学生总数超过300人的专业及其具体的总

人数。

SELECTSCODE#,COUNT(*)

FROMS

GROUPBYSCODE#

HAVINGCOUNT(*)>300;

例5.26按学号递增的顺序(查询)显示学生的基本信

息。

SELECT*

FROMS

ORDERBYS#ASC;

例5.27按学号递增、课程成绩递减的顺序(查询)显

示学生的课程成绩。

SELECTS#,C#,GRADE

FROMSC

ORDERBYS#ASC,GRADEDESC;

例查询选修了3号课程的学生的学号及其成绩,查询结果

按分数降序排列。

SELECTSno,Grade

FROMSC

WHERECno='3'

ORDERBYGradeDESC;

例5.28查询学生关系S中姓李的学生的学号和姓名。

SELECTS#,SNAME

FROMS

WHERESNAMELIKE'李%';

例5.29查询出生日期在1982年1月1日到1982年12月31日之间的所有学生的学号、姓名和出生日期,并按日期的递增顺序排列。

SELECTS#,SNAME,SBIRTHIN

FROMS

WHERESBIRTHIN

BETWEEN'1982-1-1'AND‘1982-12-31'

ORDERBYSBIRTHIN;

例5.30查询所有学生当前的年龄,并按年龄递增顺序排列。

SELECTS#,SNAME,

year(getdate())-year(SBIRTHIN)ASAGE

FROMS

ORDERBYAGE;

例5.31:

统计各教研室开设课程的门数。

分析课程关系模式及其当前值可知,各门课程号的第1位由字符C开头,第2至第4位为教研室编号,第5至第7位是该教研室所开课程的序号。

所以仅由课程关系就可以统计出各教研室所开设课程的门数,其查询语句如下:

SELECTsubstring(c#,2,3)AS教研室,

count(c#)AS开课门数

FROMC

GROUPBYsubstring(c#,2,3);

例5.32查询所有学习了数据结构课(课程号为C401001)的学生的学号和姓名。

S(S#,SNAME,SSEX,SBIRTHIN,PLACEOFB,SCODE#,CLASS)

SC(S#,C#E,DRADE)

SELECTS.S#,SNAME

FROMS,SC

WHERES.S#=SC.S#ANDC#='C401001';

例5.33查询选修了“信息安全技术”课程的学生的学

号与姓名。

S(S#,SNAME,SSEX,SBIRTHIN,PLACEOFB,SCODE#,CLASS)

SC(S#,C#E,DRADE)

C(C#,CNAME,CLASSH)

SELECTS.S#,SNAME

FROMS,SC,C

WHERES.S#=SC.S#ANDSC.C#=C.C#

ANDCNAME='信息安全技术';

例查询每一门课的间接先修课。

SELECTFIRST.Cno,SECOND.Cpno

FROMCourseFIRST,CourseSECOND

WHEREFIRST.Cpno=SECOND.Cno;

例查询每个学生基本情况及其选修课程的情况。

SELECTStudent.*,SC.Cno,Grade

FROMStudent,SC

WHEREStudent.Sno=SC.Sno(*);

SELECTStudent.*,SC.Cno,Grade

FROMStudent,SC

WHEREStudent.Sno=SC.Sno;

例5.34查询张华同学(学号为200401001)的那个班的女同学的基本信息。

SELECT*

FROMS

WHERECLASS=(SELECTCLASS

FROMS

WHERES#='200401001')

ANDSSEX='女';

例5.35检索考试成绩比该课程平均成绩低的学生的成绩。

SELECTS#,C#,GRADE

FROMSC

WHEREGRADE<(SELECTAVG(GRADE)

FROMSCASX

WHEREX.C#=SC.C#);

例5.36查询所有学习了数据结构课(课程号为C401001)的学生的学号和姓名。

SELECTS.S#,SNAME

FROMS

WHERES#IN(SELECTS#

FROMSC

WHEREC#='C401001');

例5.37利用嵌套查询实现例5.33,也即查询选修了“信息安全技术”课程的学生的学号与姓名。

SELECTS.S#,SNAME

FROMS

WHERES#IN(SELECTS#

FROMSC

WHEREC#IN(SELECTC#

FROMC

WHERECNAME='信息安全技术'));

例5.38查询所有学习了数据结构课(课程号为C401001)的学生的学号和姓名。

SELECTS.S#,SNAME

FROMS

WHERES#=ANY(SELECTS#

FROMSC

WHEREC#='C401001');

其中,“=ANY”的作用相当于IN。

例5.39查询考试成绩大于网络工程专业(专业代码为S0403)所有学生的课程成绩的学生的基本信息。

SELECTS.S#,SNAME,SSEX,SBIRTHIN,

PLACEOFB,SCODE#,CLASS

FROMS,SC

WHERES.S#=SC.S#ANDGRADE>ALL

(SELECTGRADE

FROMS,SC

WHERES.S#=SC.S#

ANDSCODE#='S0403');

例查询其他系中比IS系任一个学生年龄小的学生(其中

某一个)名单。

SELECTSname

FROMStudent

WHERESage

(SELECTSage

FROMStudent

WHERESdept=‘IS’)

ANDSdept〈〉’IS’;

例5.40查询所有学习了数据结构课(课程号为C401001)的学生的学号和姓名。

SELECTS.S#,SNAME

FROMS

WHEREEXISTS(SELECT*

FROMSC

WHERESC.S#=S.S#

ANDC#='C401001');

直观的意义为:

查询的是那些,在学习关系中存在所学课程为数据结构的学生的学号和姓名。

例5.41查询没有学习数据结构课(课程号为C401001)的学生的学号和姓名。

SELECTS.S#,SNAME

FROMS

WHERENOTEXISTS

(SELECT*

FROMSC

WHERESC.S#=S.S#

ANDC#=´C401001´);

例查询与“刘晨”在同一个系学习的学生的学号、姓名和所属系。

SELECTSno,Sname,Sdept

FROMStudentS1

WHEREEXISTS

(SELECT*

FROMStudentS2

WHERES2.Sdept=S1.SdeptAND

S2.Sname=‘刘晨’);

例5.42合并学生关系和专业关系中的专业代码。

SELECTSCODE#

FROMS

UNIONSELECTSCODE#

FROMSS;

例5.43查询有成绩的学生的学号。

SELECTS#

FROMS

INTERSECTSELECTS#

FROMSC

[WHEREGRADEISNOTNULL];

例5.44查询没有成绩的学生的学号。

SELECTS#

FROMS

MINUSSELECTS#

FROMSC

[WHEREGRADEISNOTNULL];

例查询选修了课程1的学生集合与选修了课程2的

学生集合的交集。

SELECTSno

FROMSC

WHERECno=‘1’

INTERSECT

SELECTSno

FROMSC

WHERECno=‘2’;

例5.45写出教学安排视图:

TA(C#,CNAME,CLASSH,TNAME,TRSECTION)

的创建语句。

课程关系模式:

C(C#,CNAME,CLASSH)

教师关系模式:

T(T#,TNAME,TSEX,TBIRTHIN,TITLEOF,TRSECTION,TEL)

讲授关系模式:

TEACH(T#,C#)

例5.45写出教学安排视图:

TA(C#,CNAME,CLASSH,TNAME,TRSECTION)

的创建语句。

CREATEVIEWTA

ASSELECTC#,CNAME,CLASSH,TNAME,TRSECTION

FROMC,TEACH,T

WHEREC.C#=TEACH.C#ANDTEACH.T#=T.T#;

其中,只有视图名TA,没有<视图列名表>选项说明视图TA的列名表与SELECT语句中的列名表相同。

例5.45写出查询每个学生平均成绩的视图

A_GRADE(S#,AVG_GRADE)

的创建语句。

学生关系模式:

S(S#,SNAME,SSEX,SBIRTHIN,…,CLASS)

学习关系模式:

SC(S#,C#,GRADE)

例5.45写出查询每个学生平均成绩的视图

A_GRADE(S#,AVG_GRADE)

的创建语句。

CREATEVIEWA_GRADE(S#,AVG_GRADE)

ASSELECTS.S#,AVG(GRADE)

FROMS,SC

WHERES.S#=SC.S#ANDGRADEISNOTNULL;

GROUPBYS.S#;

例5.46利用视图A_GRADE查询学生所学课程的平均成绩。

SELECT*

FROMA_GRADE;

如果用查询语句实现查询学生所学课程的平均成绩,其查询语句应为:

SELECTS.S#,AVG(GRADE)

FROMS,SC

WHERES.S#=SC.S#ANDGRADEISNOTNULL;

GROUPBYS.S#;

例5.47设在教学管理数据库系统中,要建立某些临时表来辅助有关管理过程。

若其中有一个临时表用于暂存选修了“信息安全技术”课程的学生的学号、姓名、专业名称和班级,表的其格式为:

S_C(S#,SNAME,SSNAME,CLASS)

例5.47(续)将从有关表中查询出的有关数据组成的记录插入该表的插入语句:

INSERTINTOS_C(S#,SNAME,SSNAME,CLASS)

SELECTS.S#,SNAME,SSNAME,CLASS

FROMS,SS

WHERES.SCODE#=SS.SCODEANDS#IN

(SELECTS#{↑学习了信息安全技术课程的学生的学号}

FROMSC

WHEREC#IN

(SELECTC#{↑信息安全技术课程的课程号}

FR

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1