综合题一、1.使用Transact—SQL语言创建教学管理数据库,创建两个表学生信息(学号,姓名,性别,籍贯,班级编号)和成绩表(学号,课程编号,成绩,是否重修)。其中,学生信息表中学号为主键,其他信息都不允许为空。通过学号与成绩表形成一个一对多的关系,成绩表中的成绩的默认值为0,但必须在0~100之间。注:将学号设置为主键,主键名为pk_xh;为成绩添加默认值约束,约束名为df_xb,其值为“0”;为成绩添加check约束,约束名为诚恳ck_xb,在0~100之间。CREATEDATABASE教学管理use教学管理gocreatetable学生信息(学号varchar(20)NOTNULLPRIMARYKEY,姓名varchar(20)NOTNULL,性别varchar(10)NOTNULL,籍贯varchar(20)NOTNULL,班级编号varchar(20)NOTNULL)gocreatetable成绩表(学号varchar(20)NOTNULLFOREIGNKEYREFERENCES学生信息(学号),课程编号varchar(20)NOTNULL,成绩numeric(5,2)DEFAULT(0)CHECK(成绩)=0and成绩=100),是否重修varchar(8)NOTNULL)go2.写出实现各查询功能的SELECT语句。(1)统计班级编号为1002的学生人数。(2)查询课程编号为“003”的课程成绩高于该门课程平均分的学生信息。(3)在“学生信息”表中找出姓“王”的学生信息。(4)将“成绩”表中的课程编号为“001”的成绩增加10分。(5)列出每个同学的学号、姓名及选修课程的平均成绩情况,没有选修的同学也列出。3.创建一个名为stud_view2的视图,该视图可以用来查看每个学生的选修课程的门数和平均成绩。createviewstud_view2asselectcount(*)as课程门数,avg(grade)as平均成绩from成绩表groupby学号select*fromstud_view24.(1)在“教学管理”数据库中创建一个带参数的存储过程proc_score。该存储过程的作用是:当输入某门课程的课程名称时,检索该门课程成绩,并将查询结果以“学号”,“姓名”,“课程名称”,“成绩等级”输出(成绩划分成四个等级:高于或等于85分者为优秀,高于或等于75分者为良好,高于或等于60分者为及格,低于60分者为不及格)。(2)执行存储过程proc_score,查询“003”课程的成绩信息。二、假设现有数据库“学生信息”,其中包含“学生”、“课程”、“学期成绩”三个表。表结构如下:“学生”表结构字段名数据类型长度是否为空约束学号int4否主键姓名char10否唯一约束性别char2是默认约束专业char20是班级char12是备注text是“课程”表结构课程(课号,课名,学分,先修课)“学期成绩”表结构选课(学号,课号,成绩)根据各题功能要求写出相应的T-SQL语句。1.写出在“学生信息”数据库中创建“学生”表的T-SQL语句,并在建表的同时创建所需约束。约束要求如下:将学号设置为主键,主键名为pk_xh;为姓名设置唯一约束,约束名为uk_xm;为性别添加默认约束,约束名为df_xb,其值为“男”。USE学生信息GOCREATETABLE学生(学号INTCONSTRAINTpk_xhPRIMARYKEY,姓名CHAR(10)NOTNULLCONSTRAINTuk_xmUNIQUE,性别CHAR(2)NULLCONSTRAINTdf_xbDEFAULT'男',专业CHAR(20)NULL,班级CHAR(12)NULL,备注TEXTNULL)2.写出实现各查询功能的SELECT语句。(1)计算机专业不及格学生的学号和姓名。(2)选修了数据库课程的学生的学号、姓名和成绩,查询结果按分数的降序排列。(3)在“课程”表中找出“课程名”中包含“计算机”三个字的课程。(4)将“课程”表中的课程编号为“001”的学分增加1学分;(5)列出每个同学的学号、姓名及选修课程的平均成绩情况,没有选修的同学也列出。3.创建一个名为stud_view2的视图,该视图可以用来查看每个学生的选修课程的门数和平均成绩。4.(1)在“学生信息”数据库中创建一个带参数的存储过程proc_score。该存储过程的作用是:当输入某门课程的课程名称时,检索该门课程成绩,并将查询结果以“学号”,“姓名”,“课程名称”,“成绩等级”输出(成绩划分成四个等级:高于或等于85分者为优秀,高于或等于75分者为良好,高于或等于60分者为及格,低于60分者为不及格)。CREATEPROC[EDURE]proc_score@KCMCCHAR(20)ASSELECT学生.学号,姓名,课程名称,成绩等级=CASEWHEN成绩=85THEN'优秀'WHEN成绩=75THEN'良好'WHEN成绩=60THEN'及格'WHEN成绩60THEN'不及格'(或:ELSE'不及格')ENDFROM学生JOIN学期成绩ON学生.学号=学期成绩.学号JOIN课程注册ON课程注册.课程代码=学期成绩.课程代码WHERE课程名称=@KCMCGO(2)执行存储过程proc_score,查询“计算机网络”课程的成绩信息。EXECproc_score‘计算机网络’5.定义一事务tran_stu,在学生“学期成绩”表中,为所有成绩高于50分的同学的成绩增加10分,并提交事务。三、假设现有数据库“学生信息”,其中包含“学生”、“课程注册”、“学期成绩”三个表。表结构如下:“学生”表结构:字段名数据类型长度是否为空约束学号int4否主键姓名char10否唯一约束性别char2是默认约束专业char20是班级char12是备注text是“课程注册”表结构:字段名数据类型长度是否为空约束┋┋┋┋┋┋┋┋┋┋┋┋┋┋┋装┋┋┋┋┋┋┋┋┋订┋┋┋┋┋┋┋┋┋┋线┋┋┋┋┋┋┋┋┋┋┋┋┋┋┋┋┋┋┋┋课程代码char4否主键课程名称char20否“学期成绩”表结构:字段名数据类型长度是否为空约束学号int4否外键课程代码char4否外键成绩float8是根据各题功能要求写出相应的T-SQL语句。1.写出在“学生信息”数据库中创建“学生”表的T-SQL语句,并在建表的同时创建所需约束。约束要求如下:将学号设置为主键,主键名为pk_xh;为姓名设置唯一约束,约束名为uk_xm;为性别添加默认约束,约束名为df_xb,其值为“男”。USE学生信息GOCREATETABLE学生(学号INTCONSTRAINTpk_xhPRIMARYKEY,姓名CHAR(10)NOTNULLCONSTRAINTuk_xmUNIQUE,性别CHAR(2)NULLCONSTRAINTdf_xbDEFAULT'男',专业CHAR(20)NULL,班级CHAR(12)NULL,备注TEXTNULL)2.完成以下查询。(1)统计学生表中各班级的学生人数。SELECT班级,COUNT(*)AS人数FROM学生GROUPBY班级(2)查询“软件工程”课程成绩高于该门课程平均分的学生信息。SELECT学号,课程名称,成绩FROM学期成绩JOIN课程注册ON学期成绩.课程代码=课程注册.课程代码WHERE课程名称='软件工程'AND成绩(SELECTAVG(成绩)FROM学期成绩JOIN课程注册ON学期成绩.课程代码=课程注册.课程代码WHERE课程名称='软件工程')(3)查询男同学选修的课程号。(4)查询至少选修课程号为“C01”和“C02”的学生学号。将所有学生的“01”课程的成绩增加10分。3.在“学生信息”数据库中创建一个带参数的存储过程st_xsxx。该存储过程的作用是:当输入某门课程的课程名称时,检索该门课程成绩,并将查询结果以“学号”,“姓名”,“课程名称”,“成绩等级”输出(成绩划分成四个等级:高于或等于85分者为优秀,高于或等于75分者为良好,高于或等于60分者为及格,低于60分者为不及格)。CREATEPROC[EDURE]st_xsxx(1分)@KCMCCHAR(20)(1分)ASSELECT学生.学号,姓名,课程名称,成绩等级=CASEWHEN成绩=85THEN'优秀'WHEN成绩=75THEN'良好'WHEN成绩=60THEN'及格'WHEN成绩60THEN'不及格'(或:ELSE'不及格')ENDFROM学生JOIN学期成绩ON学生.学号=学期成绩.学号JOIN课程注册ON课程注册.课程代码=学期成绩.课程代码WHERE课程名称=@KCMC(1分)GO四、现有关系数据库如下:数据库名:教师数据库教师表(编号char(6),姓名,性别,民族,职称,身份证号)课程表(课号char(6),名称)任课表(ID,教师编号,课号,课时数)用SQL语言实现下列功能的sql语句代码:1.写出创建数据库代码,创建教师表代码;要求使用:编号(主键)、默认(民族“汉”)、民族和姓名(非空)、身份证号(唯一)、性别(检查约束:只能是男或女)。createdatabase[教师数据库]--(2分)use[教师数据库]gocreatetable教师表--(6分)([编号]char(6)primarykey,[姓名]nchar(4)notnull,[性别]nchar(1)check([性别]in('男','女')),[民族]nchar(8)default'汉族'notnull,[职称]nchar(12),[身份证号]char(18)unique)createtable课程表--(2分)([课号]char(6)primarykey,[名称]char(40)notnull)createtable任课表--(4分)(IDIDENTITY(1,1),[教师编号]char(6)references学生表(学号),[课号]char(6)references课程表(课号),[课时数]integercheck([课时数]between0and200))2.写出下列课程记录添加到课程表的代码课号课程名称100001SQLServer数据库100002数据结构100003VB程序设计修改:把课号为100003的课程名称改为“VisualBasic程序设计”;删除:课号为100003的课程信息insert课程表values('100001','SQLServer数据库')insert课程表values('100002','数据结构')insert课程表values('100003','VB程序设计')update课程表set名称='VisualBasic程序设计'where课号='100003'delete课程表where课号='100003'3.创建视图:任课表(教师编号,姓名,课号,课程名称,课时数);createview[任课表视图]asselect教师编号,姓名,课号,课程名称,课时数from教师表,任课表where教师表.编号=任课表.教师编号4.查询:所有教“SQLServer数据库”这门课程的老师姓名;createfunction[某门课任课教师](@课程名varchar(15))returnstableasreturn(select课程名称,课时数,教师姓名=姓名from任课表视图where课程名=@课程名)goselect*from[某门课任课教师]('SQLServer数据库')5.查询:最大课时数、最低课时数、平均课时的;createprocedure[统计课时数]asselect最大课时数=max(课时),最小课时数=min(课时),平均课时数=avg(课时)from任课表go6.检索有一门或一门以上课程课时数大于90的所有教师的信息,包括编号、姓名;select编号,姓名from教师表where编号in(selectdistinct教师编号from任课表where课时数=90)7.修改教师表结构:教师表的职称列上,