您好,欢迎访问三七文档
创建数据库SqlServerDb2OracleMysql创建表--创建数据库--createDATABASESC_Information;USESC_Information;/*转到对应的数据库*//*创建学生信息数据库表*/CREATETABLEstudent(snoCHAR(10)NOTNULL,/*学号*/snameVARCHAR(100),/*姓名*/ageINT,/*年龄*/birthdaydatetime,/*出身日期*/classCHAR(10),/*所属班级*/PRIMARYKEY(sno));/*创建课程信息表*/CREATETABLEcourse(cnoCHAR(4)NOTNULLPRIMARYKEY,/*课程号*/cnameVARCHAR(30)/*课程名*/);/*选课信息表*/CREATETABLEsc(snoCHAR(10),/*学号*/cnoCHAR(4),/*课程编号*/scoreINT/*学习成绩*/);学生信息表S:Student序号名称代码类型备注1.学号sno,char()主键2.姓名snamevarchar(100)3.年龄ageint4.出生日期birthdaydateyyyy-mm-dd5.所属班级classchar(10)课程信息表C:course序号名称代码类型备注1.课程编号cno主键2.课程名称cname3.选课信息表SC序号名称代码类型备注1.学号sno2.课程编号cno3.学习成绩score通过学号和课程编号,建立联合唯一索引:idx_sc/*创建唯一索引在学生选课信息表*/CREATEUNIQUEINDEXidx_scONsc(sno,cno);1.使用标准SQL嵌套语句查询选修课程名称为“java编程”的学员学号和姓名selectsno,snamefromstudentwheresnoin(selectsnofromscwherecno=(selectcnofromcoursewherecname='java编程'));2.使用标准SQL嵌套语句查询选修课程编号为“C2”的学员姓名和所属班级selectsname,classfromstudentwheresnoin(selectsnofromscwherecno='C2');3.使用标准SQL嵌套语句查询不选修课程编号为“C5”的学员姓名和所属班级selectsname,classfromstudentwheresnonotin(selectsnofromscwherecno='C5');4.使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属班级--实现代码:SELECTSN,SDFROMSWHERE[S#]IN(SELECT[S#]FROMSCRIGHTJOINCONSC.[C#]=C.[C#]GROUPBY[S#]HAVINGCOUNT(*)=COUNT([S#]))5.查询选修了课程的学员人数SELECT学员人数=COUNT(DISTINCT[S#])FROMSC6.查询选修课程超过5门的学员学号和所属班级--实现代码:SELECTSN,SDFROMSWHERE[S#]IN(SELECT[S#]FROMSCGROUPBY[S#]HAVINGCOUNT(DISTINCT[C#])5)7.计算每一门课程的平均成绩,显示课程号,课程名,平均成绩。selectcourse.cname,sc.cno,avg(sc.score)fromsc,coursewherecourse.cno=sc.cnogroupbysc.cno;8.查询没有成绩的学生。selectsname,classfromstudentwheresnoin(selectsnofromscwherescoreisNULL);9.查询班级为“G2”,名字以“王”开始的同学的个人信息(sno,sname,age,class,)。selectsno,sname,age,classfromstudentwhereclass='G2'andsnamelike'王%';10.删除重复:(姓名,年龄,所属班级完全相同)deletefromdupeswhereidnotin(selectmin(id)fromdupesgroupbyname)11.获取前10行记录。DB2select*fromempfetchfirst5rowsonlyselect*fromemplimit5oracleselect*fromempwhererownum=5sqlserverselecttop5*fromemp12.根据学生所属班级升序排序,同班级学生按照总分倒叙排列。select*fromstudentorderbyclass,(selectsum(score)fromscwheresc.sno=student.sno)desc;13.查询佣金比WARD低的雇员姓名,和佣金selectsname,classfromstudentwheresnoin(selectstudent.snofromstudent,scs1wherestudent.sno=s1.snoand(selectsum(score)fromscwheresc.sno=student.sno)(selectsum(score)fromstudentsss,scs2wheres2.sno=sss.snoandsss.sname='WARD'));14.查询没有被任何人选修的课程号。selectcnofromcoursewherecnonotin(selectc,nofromsc)15.将表中的数据全部保存到测试表Student2中INSERT...SELECTinsertintoStudent2select*fromstudent;16.创建视图:将所有成绩不为空的学生信息保存到视图V中,视图结构如下:姓名科目成绩张三语文80张三数学90张三物理85李四语文85李四物理82李四英语90李四政治70王五英语90createviewV(sname,cname,score)asselectstudent.sname,course.cname,sc.scorefromstudent,course,scwherestudent.sno=sc.snoandsc.cno=course.cnoandscoreisNOTNULL;17.从视图中查询如下结果:根据平均分进行评级,avg60不及格,60=avg85及格,avg=85优秀姓名总分平均分评级张三38577及格李四45090优秀王五21543不及格1selectename,sal,2casewhensal=2000then'UNDERPAID'3whensal=4000then'OVERPAID'4else'OK'5endasstatus6fromempselectsname,avgcasewhenavg60then‘不及格’whenavg85then‘及格‘whenavg=85then‘优秀‘endasstatusfrom(selectsname,avg(score)asavgfromvgroupbysname)asv1;18.行列转换根据视图,查询如下结果:姓名数学物理英语语文政治李四082908570王五009000张三9085080019.现在有一个成绩修正表:new_score根据new_score表中数据,修改sc中对应的学生成绩snocnoscore00121880013289………updatescsetscore=(selectscorefromnew_scorewheresc.sno=new_score.snoandsc.cno=new_score.cno)wheresnoin(selectsnofromnew_score)andcnoin(selectcnofromnew_scorewheresno=sc.sno);20.查询出所有本月过生日的所有同学信息(sno,sname,age,birthday,class)。select*fromstudentwhereMONTH(birthday)=MONTH(now());
本文标题:数据库测试题
链接地址:https://www.777doc.com/doc-2428684 .html