实验平台:操作系统:WINDOWS 7数据库管理系统:MS SQL SERVER 2008一、设有某学校应用,含有数据库表如下:1)学生student(sno,sname,sage,ssex, mobilephone,dno)(学号,姓名,年龄,性别,手机号码,院系编号)Sno:定长普通编码字符型,长度为3Sname:变长普通编码字符型,长度20,非空Sage:小整型Ssex:定长普通编码字符型,长度为2,只能取‘男’或‘女’Mobilephone:定长普通编码字符型,长度为11,第一位为‘1’,第二位为‘3’或‘5’,后九位为0-9间任一数字。
Dno:定长普通编码字符型,长度为2其中:学号为主码,院系编号为参照院系表的院系编号2)课程course(cno,cname,cscore)(课程号,课程名,学分)Cno:定长普通编码字符型,长度为3Cname:变长普通编码字符型,长度30,唯一Cscore:小数型,小数点前2位,后1位其中,课程号为主码3)选课sc(sno,cno,grade)(学号,课程号,分数)Sno:定长普通编码字符型,长度为3Cno:定长普通编码字符型,长度为3Grade:小整形,在0-100之间其中,主码为(学号,课程号),学号为参照学生表的学号,课程号为参照课程表的课程号4)教师teacher(tno,tname,taddress,tsal,dno)(教师号,教师名,教师住址,工资,院系编号)Tno:定长普通编码字符型,长度为3,第一位为‘t’Tname:变长普通编码字符型,长度20Taddress:变长统一编码字符型,长度100Tsal:整型Dno:定长普通编码字符型,长度为2其中,教师号为主码,院系编号为参照院系表的院系编号5)上课tc(tno,cno,tctime,room)(教师号,课程号,上课时间,上课教室)Tno:定长普通编码字符型,长度为3Cno:定长普通编码字符型,长度为3Tctime:日期时间型Room:变长普通编码字符型,长度50其中,主码为(教师号,课程号),教师号为参照教师表的教师号,课程号为参照课程表的课程号6)院系dept(dno,dname,dphone)(院系编号,院系名称,院系电话)Dno:定长普通编码字符型,长度为2Dname:变长普通编码字符型,长度50Dphone:定长普通编码字符型,长度为12,前三位为‘027’,第四位为‘-’,第五位为1-9间数字,后七位为任意数字其中,院系编号为主码二、语句表示:1)学生student(sno,sname,sage,ssex, mobilephone,dno)(学号,姓名,年龄,性别,手机号码,院系编号)Sno:定长普通编码字符型,长度为3Sname:变长普通编码字符型,长度20,非空Sage:小整型Ssex:定长普通编码字符型,长度为2,只能取‘男’或‘女’Mobilephone:定长普通编码字符型,长度为11,第一位为‘1’,第二位为‘3’或‘5’,后九位为0-9间任一数字。
Dno:定长普通编码字符型,长度为2其中:学号为主码,院系编号为参照院系表的院系编号create table student(sno char(3),sname varchar(20) not null,sage smallint,ssex char(2),mobilephone char(11),dno char(2),primary key(sno),foreign key (dno) references dept(dno),check (ssex in ('男','女')),check (mobilephone like '1[35][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') )2)课程course(cno,cname,cscore)(课程号,课程名,学分)Cno:定长普通编码字符型,长度为3Cname:变长普通编码字符型,长度30,唯一Cscore:小数型,小数点前2位,后1位其中,课程号为主码create table course(cno char(3),cname varchar(30) unique,cscore decimal(3,1),primary key(cno))3)选课sc(sno,cno,grade)(学号,课程号,分数)Sno:定长普通编码字符型,长度为3Cno:定长普通编码字符型,长度为3Grade:小整形,在0-100之间其中,主码为(学号,课程号),学号为参照学生表的学号,课程号为参照课程表的课程号create table sc(sno char(3),cno char(3),grade smallint,primary key(sno,cno),foreign key (sno) reference student(sno) on delete cascade on update cascade, foreign key (cno) reference course(cno) on delete cascade on update cascade, check (grade between 0 and 100))4)教师teacher(tno,tname,taddress,tsal,dno)(教师号,教师名,教师住址,工资,院系编号)Tno:定长普通编码字符型,长度为3,第一位为‘t’Tname:变长普通编码字符型,长度20Taddress:变长统一编码字符型,长度100Tsal:整型Dno:定长普通编码字符型,长度为2其中,教师号为主码,院系编号为参照院系表的院系编号create table teacher(tno char(3),tname varchar(20),taddress nvarchar(50),tsal int,dno char(2),primary key(tno),foreign key (dno) references dept(dno),check (tno like 't%'))5)上课tc(tno,cno,tctime,room)(教师号,课程号,上课时间,上课教室)Tno:定长普通编码字符型,长度为3Cno:定长普通编码字符型,长度为3Tctime:日期时间型Room:变长普通编码字符型,长度50其中,主码为(教师号,课程号),教师号为参照教师表的教师号,课程号为参照课程表的课程号create table tc(tno char(3),cno char(3),tctime datetime,room varchar(50),primary key(tno,cno),foreign key (tno) references teacher(tno) on delete cascade on update cascade, foreign key (cno) references course(cno) on delete cascade on update cascade )6)院系dept(dno,dname,dphone)(院系编号,院系名称,院系电话)Dno:定长普通编码字符型,长度为2Dname:变长普通编码字符型,长度50Dphone:定长普通编码字符型,长度为12,前三位为‘027’,第四位为‘-’,第五位为1-9间数字,后七位为任意数字其中,院系编号为主码create table sc(dno char(3),dname varchar(50),dphone char(12),primary key(dno),check (dphone like '027-[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'))在实现过程之前,我将数据表粘出来,这样更利于大家对比观察Course表:Dept表:Sc表:Student表:Tc表:Teacher表:三、实现过程1.建立数据库(以个人人名汉语拼音缩写)2.建立相应数据库表3.应用DTS工具将院系.txt、学生.txt、课程.txt、教师和“选修、上课.xls”中数据依次导入相应表中。
(注意,请大家及时将你的数据库文件备份好,第二次数据库上机可能要用到)4.完成以下查询建立的表1)查询所有学生的学号,姓名,性别;执行:SELECT sno,sname,ssexFROM student;显示2)查询所有教师信息;执行:SELECT*FROM teacher;运行:3)查询选修了“001”号课程的学生姓名和性别;执行:SELECT student.sno,ssexFROM student,scWHERE student.sno=sc.sno AND o='001';执行:结果为空,没有选修001课程的学生。
课程号只有c01,c02,c03,c04,c05,没有0014)查询选修了“操作系统”课程的学生信息;执行:SELECT student.*FROM student,sc,courseWHERE student.sno=sc.sno AND o=o AND ame='操作系统';显示:5)查询“数据结构”课程不及格的学生姓名和性别;执行:SELECT sname,ssexFROM student,course,scWHERE student.sno=o AND o=oAND ame='数据结构'AND sc.grade<=60;显示:显示结果为空,表明数据结构这门课全都过了。
6)查询“数据结构”课程的最低分数和最高分数;执行:SELECT MAX(grade)highest_grade,MIN(grade)lowest_gradeFROM sc,courseWHERE o=o AND cname='数据结构';显示:7)查询每门课程的选修人数;执行:SELECT cname,COUNT(sno)quantityFROM course,scWHERE o=oGROUP BY cname;显示:8)查询年龄在18到20之间男生的“数据库”课程成绩;执行:SELECT sname,gradeFROM sc,student,courseWHERE student.sno=sc.sno ANDo=o ANDame='数据库'ANDssex='男'ANDsage BETWEEN 18 AND 20;显示:我顺变将该学生的名字打了出来,是为了更清楚一些。