东南大学大二下学期数据库大题Word格式文档下载.docx
- 文档编号:17083800
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:23
- 大小:84.96KB
东南大学大二下学期数据库大题Word格式文档下载.docx
《东南大学大二下学期数据库大题Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《东南大学大二下学期数据库大题Word格式文档下载.docx(23页珍藏版)》请在冰豆网上搜索。
男'
'
女'
)),
ageintCHECK(age>
18),
deptvarchar2(18)notnull);
2.课程关系course(cno,cname,tname,credit)
课程表结构
cno
课程号
cname
课程名
tname
教师名
credit
学分
number
CREATETABLEcourse(
cnochar(8)PRIMARYKEY,
cnamevarchar2(20)UNIQUE,
tnamevarchar2(20)NOTNULL,
creditnumber);
3.选课关系sc(sno,cno,grade)
选课信息表结构
Sno
外键约束(参照student表中的学号)
char,长度为8
外键约束(参照course表中的课程号)
grade
成绩
int
主键为(sno,cno)属性的组合键。
CREATETABLEsc(
Snochar(8)REFERENCESstudent(sno),
cnochar(8)REFERENCEScourse(cno),
gradeint,
primarykey(sno,cno));
步骤四:
修改基本表
1.对表增加一列在学生表中增加一个属性列,birthday(生日),数据类型是date;
ALTERTABLEstudentADDbirthdaydate;
2.改变列的类型将学生表中sex类型改为varchar2(3);
ALTERTABLEstudentMODIFYsexvarchar2(3);
3.在选课信息表sc中添加一个名为chk_grade的约束,从而保证学生成绩的取值总是在0到100之间,即gradebetween0and100;
altertablescaddconstraintchk_gradecheck(gradebetween0and100);
4.删除约束chk_grade;
altertablescdropconstraintchk_grade;
5.删除学生表中birthday属性列;
ALTERTABLEstudentDROPcolumnbirthday;
6.删除选课信息表sc表;
Droptablesc;
上机实验2(参考答案)
创建表teacher,表的结构和要求如下:
教师表结构
Tno
教师编号
Char,长度为7
Tname
教师姓名
Char,长度为10
Tsex
教师性别
取值只允许为男或女
Tage
教师年龄
无
Tdept
教师系别
Tsal
教师薪水
createtableteacher
(tnochar(7)primarykey,
tnamechar(10)unique,
tsexchar
(2)check(tsex='
ortsex='
),
tageint,
tdeptvarchar(20),
tsalnumbernotnull);
向教师表中插入以下数据。
0001
张三
女
20
计科系
2300
0002
王五
男
21
信管系
1800
0003
李四
日语系
3000
insertintoteachervalues('
0001'
张三'
20,'
计科系'
2300);
0002'
王五'
21,'
信管系'
1800);
0003'
李四'
null,null,'
日语系'
3000);
步骤五:
将‘信管系’系更名为‘信息管理’。
Updateteacher
Settdept=’信息管理系’
Wheretdept=’信管系’;
步骤六:
将王五老师的年龄更改为25。
Settage=25
Wheretname=’王五’;
步骤七:
给所有的教师工资涨200元。
Settsal=tsal+200;
步骤八:
删除教师表中所有计科系的老师纪录。
Deletefromteacherwheretdept=’计科系’;
步骤九:
删除教师表中的全部数据。
Deletefromteacher;
上机实验3(参考答案)
启动oracle服务,以system身份登录,密码:
sys;
创建表emp,表的结构和要求如下:
员工信息表结构
Eno
员工编号
主键
Ename
员工姓名
非空notnull
Sex
员工性别
Char,长度为4
Age
员工年龄
年龄要求大于18岁
Job
员工工作
Sal
基本工资
Number
Dept
隶属部门
createtableemp(
enochar(7)primarykey,
enamechar(10)notnull,
sexchar(4)check(sexin('
ageintcheck(age>
jobvarchar2(20),
salnumber,
deptvarchar2(20));
向emp表中插入以下数据
销售
880
市场部
26
会计
1600
财务部
22
1000
0004
赵六
19
0005
张七
23
测试
1400
技术部
0006
赵八
30
研发
2000
insertintoempvalues('
销售'
880,'
市场部'
);
26,'
会计'
1600,'
财务部'
22,'
1000,'
0004'
赵六'
19,null,2300,'
0005'
张七'
23,'
测试'
1400,'
技术部'
0006'
赵八'
30,'
研发'
2000,'
查询表,实现以下操作
1)查询所有员工的姓名、性别和工资。
selectename,sex,salfromemp;
2)查询员工表中所有的部门名称。
(要求去掉重复的值)
selectdistinctdeptfromemp;
3)查询技术部员工的姓名和出生年份。
selectename,2008-agefromempwheredept='
;
4)查询工资超过1200元的员工的姓名和年龄。
selectename,agefromempwheresal>
1200;
5)查询年龄不在20到25岁之间的员工的姓名和工资。
selectename,salfromempwhereagenotbetween20and25
6)查询财务部、技术部的员工的姓名和性别。
selectename,sexfromempwheredeptin('
7)查询所有姓张的员工的姓名、年龄和工作。
selectename,age,jobfromempwhereenamelike'
张%'
8)查询工作为空的员工姓名和年龄。
selectename,agefromempwherejobisnull;
9)查询市场部里年龄小于25岁的男员工的姓名。
selectenamefromempwheredept='
andsex='
andage<
25
10)查询年龄超过25岁或者工资超过2000元的员工的姓名、年龄和工资。
selectename,age,salfromempwhereage>
25orsal>
2000;
上机实验4(参考答案)
使用spool命令:
性别只能取男或女
年龄在15和30岁之间
ageintCHECK(agebetween15and30),
deptvarchar2(18));
gradesmallint,
插入数据
insertintostudent(sno,sname,sex,age,dept)
values('
05880101'
周一'
17,'
计算机系'
05880102'
吴二'
信息系'
insertintostudent
values('
05880103'
19,'
insertintostudent
05880104'
05880105'
数学系'
05880106'
05880107'
陈七'
05880108'
刘八'
insertintocourse
c1'
database'
张老师'
4);
c2'
java'
王老师'
c3'
maths'
李老师'
3);
c4'
english'
赵老师'
5);
c5'
japanese'
陈老师'
insertintosc
75);
60);
80);
89);
61);
72);
65);
66);
74);
完成下列查询
(1)查询选修了‘c2’号课程的学生的学号及其成绩,查询结果按成绩降序排列。
Selectsno,gradeFromscWherecno='
orderbygradedesc;
(2)查询选修了c1课程的最高成绩和最低成绩。
Selectmax(grade),min(grade)Fromscwherecno=’c1’;
(3)查询男同学的总人数。
Selectcount(sno)fromstudentwheresex=’男’;
(4)查询每名学生的学号,选课门数和这名同学的平均成绩。
Selectsno,count(cno),avg(grade)FromscGroupbysno;
(5)查询平均成绩大于67分的女学生的学号及平均成绩。
Selectstudent.sno,avg(grade)Fromsc,studentwheresex=’女’andsc.sno=student.snoGroupbystudent.snoHavingavg(grade)>
67;
(6)查询选修了java课程的学生学号及其成绩,查询结果按成绩降序排列,如果成绩相同则按学号升序排列。
。
Selectsno,gradeFromcourse,scWhereo=oAndcname='
orderbygradedesc,snoasc;
(7)查询计算机系学生的姓名、所修课的课程名称和成绩。
Selectsname,cname,gradeFromstudent,course,scWherestudent.sno=sc.snoando=oanddept='
(8)查询至少选修课程号为c2和c4的学生学号。
selectx.snofromscx,scywherex.sno=y.snoando=’c2’ando=’c4’;
上机实验5(参考答案)
启动Oracle服务,Spoole:
\年级班级学号姓名.sql;
按照教师分发的文件(create.txt和insert.txt)创建学生表student、课程表course、选课信息表sc,并插入相关数据。
学生表:
Student(Sno,Sname,Sex,Age,Dept),表中属性列依次是学号、姓名、性别、年龄、学生所在的系别名称。
其中Sno为主键。
课程表:
Course(Cno,Cname,Tname,Cpno,Credit),表中属性列依次是课程号、课程名、教师名、先修课程号和学分。
其中Cno为主键。
学生选课表SC(Sno,Cno,Grade),表中属性列依次是学号、课程号和成绩。
不相关子查询
1.查询与王五同一个系别的学生姓名和年龄。
selectsname,agefromstudentwheredeptin(selectdeptfromstudentwheresname='
2.查询选修了“maths”课程的学生学号和姓名。
selectsno,snamefromstudentwheresnoin(select
snofromscwherecnoin(selectcnofromcourse
wherecname='
));
3.查询比所有计算机系学生年龄都大的学生的基本情况。
select*fromstudentwhereage>
all
(selectagefromstudentwheredept='
4.查询选修课程数目最多的学生学号。
selectsnofromscgroupbysnohavingcount(cno)>
=all
(selectcount(cno)fromscgroupbysno);
相关子查询
1.在选课信息表中查询选修“database”课程的学生学号和成绩。
selectsno,gradefromscwhereexists(select*fromcoursewhereo=oandcname='
2.查询没有选修c1课程的学生学号和姓名。
selectsno,snamefromstudentwherenotexists(select*fromscwhere
student.sno=sc.snoandcno='
3.查询所有成绩均大于90分的学生姓名。
selectsnamefromstudentwhere90<
(selectmin(grade)from
scwherestudent.sno=sc.sno);
上机实验6(参考答案)
1.部门信息表:
Dept(deptno,dname,loc),表中属性列依次是部门号、部门名称和部门地点。
长度
deptno
Char
10
dname
Varchar
唯一
loc
createtabledept(
deptnochar(10)primarykey,
dnamevarchar(20)unique,
locvarchar(20));
2.雇员信息表:
Emp(empno,ename,age,sal,deptno),表中属性列依次是雇员编号、雇员姓名、年龄、月薪和部门号。
empno
ename
非空
年龄在18到60岁之间
sal
月薪大于1000
外键(参照dept表中deptno)
empnochar(20)primarykey,
enamevarchar(20)not
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 东南大学 大二 学期 数据库
![提示](https://static.bdocx.com/images/bang_tan.gif)