1、) ON PRIMARYGOALTER TABLE dbo.SC WITH CHECK ADD CONSTRAINT FK_SC_Courses FOREIGN KEY(CNO)REFERENCES dbo.Courses (CNO)ALTER TABLE dbo.SC CHECK CONSTRAINT FK_SC_CoursesALTER TABLE dbo.SC WITH CHECK ADD CONSTRAINT FK_SC_Students FOREIGN KEY(SNO)REFERENCES dbo.Students (SNO)ALTER TABLE dbo.SC CHECK CONS
2、TRAINT FK_SC_Students2完成如下的查询要求及更新的要求。(1)查询身高大于1.80m的男生的学号和姓名;select SNO,SNAME from Students where HEIGHT1.8(2)查询计算机系秋季所开课程的课程号和学分数;select CNO,CREDIT from Courses where SEMESTER=秋季(3)查询选修计算机系秋季所开课程的男生的姓名、课程号、学分数、成绩;select s.SNAME,SC.CNO,c.CREDIT,SC.GRADE from students sinner join SC on sc.SNO=s.SNOi
3、nner join Courses c on sc.CNO=c.CNOwhere s.DEPARTMENT=计算机系 and s.SEX=男 and c.SEMESTER=(4)查询至少选修一门电机系课程的女生的姓名(假设电机系课程的课程号以EE开头);select distinct s.sname from Students s,sc where s.sno=sc.sno and s.sex=女 and o like EE%(5)查询每位学生已选修课程的门数和总平均成绩;select count(c.CNO) as 课程门数,avg(SC.GRADE) as 总平均成绩from studen
4、ts sgroup by s.SNO(6)查询每门课程选课的学生人数,最高成绩,最低成绩和平均成绩;select cname,count(cno),max(grade),min(grade),avg(grade)from students natural join sc natural join coursesgroup by chane;(7)查询所有课程的成绩都在80分以上的学生的姓名、学号、且按学号升序排列;select sname,sno from students natural join (select sno.min(grade)as mini from sc group by
5、sno)where mini80 order by(sno);(8)查询缺成绩的学生的姓名,缺成绩的课程号及其学分数;select sname,o,creditfrom students,courses,scwhere students.sno=sc.sno and o=o and grade is null;(9)查询有一门以上(含一门)三个学分以上课程的成绩低于70分的学生的姓名;select sname from students,courses,scwhere students.sno=sc.sno and o=sc.cho and credit=3 and grade70;(10)查
6、询1984年1986年出生的学生的姓名,总平均成绩及已修学分数。select smane,avg(grade),sun(credit)where bdate between 1984-00-00 and 1987-00-00group by sname;(11) 在STUDENT和SC关系中,删去SNO以01开关的所有记录。delete sc where SNO like %01%delete Students where SNO like (12)在关系中增加以下记录:0408130 向阳男1986-12-111.75insert into students values(0409101,何
7、平1987-03-02,1.62,0408130向阳1986-12-11,1.75,(13)将课程CS-221的学分数增为,讲课时数增为update courses set credit=3 where cno=GS-221update courses set credit=60 where cno=3补充题:(1) 统计各系的男生和女生的人数。select department,sum(case wgen sex= then 1 else 0 end),count(sno) from students group by department order by department;(2) 列
8、出学习过编译原理,数据库或体系结构课程,且这些课程的成绩之一在90分以上的学生的名字。select snamewhere cname=编译原理 or cname=数据库体系结构 and grade90;(3) 列出未修选电子技术课程,但选修了数字电路或数字逻辑课程的学生数。select count(distinci sc.sno) from courses,sc.sno not in(select sc.sno from o=o and cname=电子技术and o in (select cno from courses where cname=数字逻辑数字电路(4) 按课程排序列出所有学生
9、的成绩,尚无学生选修的课程,也需要列出,相关的学生成绩用NULL表示。select distinct o,ame,sno,grade from courses left join sc on (o-o)group by o,ame,sno,gradeorder by o,ame,sno,grade;(5) 列出平均成绩最高的学生名字和成绩。(SELECT句中不得使用TOP n子句)select sname,rfrom(select sname,avg(grade)as from students,sc where students.sno=sc.sno group by sname,stude
10、nts.sno order by r desc)where rownum=1;4选做题:对每门课增加“先修课程”的属性,用来表示某一门课程的先修课程,每门课程应可记录多于一门的先修课程。要求:1) 修改表结构的定义,应尽量避免数据冗余,建立必要的主键,外键。2) 设计并插入必要的测试数据,完成以下查询:列出有资格选修数据库课程的所有学生。(该学生已经选修过数据库课程的所有先修课,并达到合格成绩。注意:须设计每个查询的测试数据,并在查询之前用INSERT语句插入表中。实验二:数据库的安全和完整性约束实验要求:1采用实验一的建库脚本和数据插入脚本创建Student数据库,并完成以下操作:1)新增表
11、Credits(SNO,SumCredit,NoPass),表示每学生已通过选修课程的合计学分数,以及不及格的课程数。create table Credits(SNO varchar(100),SumCredit int,NoPass int)2)创建视图Student_Grade(Sname,Cname,Grade),表示学生选修课程及成绩的详细信息。create view Student_Gradeas select s.SNAME,c.CNAME,SC.GRADE from students s2. 在数据库中创建以下触发器:1) Upd_Credit当在SC表中插入一条选课成绩,自动触
12、发Upd_Credit,完成在Credits表中修改该学生的合计学分数和不及格的课程数。create trigger Upd_Credit on SC for insert declare SNO varchar(100),CNO varchar(100),GRADE int ,NoPass int ,CREDIT int select SNO=SNO,CNO=CNO,GRADE=GRADE,NoPass=(case when GRADE34) CAL_GPA (SNO,GPA output)根据SNO参数, 输出并显示该学生的GPA值。计算方法如下:GRADE(G) GRADEPOINT(G
13、P)G=85 485=75 375=60 260G 1GPA= (GP*CREDIT)/ CREDIT)create procedure CAL_GPAGPA decimal outputdeclare SUM_CREDIT int,AVG_GRADE int,All_CREDIT intselect AVG_GRADE=avg(case when SC.GRADE=85 then 4 when 85SC.GRADE and SC.GRADE=75 then 3 when 75=60 then 2 when 60SC.GRADE then 1 end) from Students sselec
14、t GPA=(AVG_GRADE*SUM_CREDIT)/All_CREDIT3选做题: 使用其它程序设计语言编程,连接数据库并提交SQL语句,显示查询结果。 要求:实现上题中的第3)小题要求,设计一个图形界面来输入查询的参数SNO,及显示查询的结果。(如采用VC+,VB等)实验四:事务的管理(选作)1 采用实验一的建库脚本和数据插入脚本创建Student数据库。2 测试事务隔离级别,要求: 分别设置不同的隔离级别,包括:SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;SET TRANSACTION ISOLATION LEVEL READ COMMITTED;SET TRANSACTION ISOLATION LEVEL READ ONLY;两个并发事务交错执行的程序,能分别显示每种隔离级别下,是否出现丢失更新,脏读,读值不可复现以及幻象四种情况。3备份与恢复 备份数据库BACKUP DATABASE testTO disk = c:test 删除sc表DROP TABLE SC 恢复到删除之前答: USE masterRESTORE DATABASE test_wtFROM disk = test_wt
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1