东南大学大二下学期数据库大题.docx
- 文档编号:4167787
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:23
- 大小:84.96KB
东南大学大二下学期数据库大题.docx
《东南大学大二下学期数据库大题.docx》由会员分享,可在线阅读,更多相关《东南大学大二下学期数据库大题.docx(23页珍藏版)》请在冰豆网上搜索。
东南大学大二下学期数据库大题
上机实验1(参考答案)
步骤一:
在控制面板中查看oracle服务是否已启动,以system身份登录,
密码:
sys
步骤二:
使用spool命令,例如:
spoole:
\090145zhangsan.sql;
步骤三:
建表
1.学生关系student(sno,sname,age,sex,dept)
学生表结构
列名
说明
数据类型
完整性约束
sno
学号
Char,长度为8
主键约束
sname
姓名
Varchar2,长度为20
唯一约束
sex
性别
Char,长度为2
性别只能够取男或女
age
年龄
Int
检查约束(年龄大于18岁)
dept
系别
Varchar2,长度为18
非空约束
CREATETABLEstudent(
Snochar(8)PRIMARYKEY,
snamevarchar2(20)UNIQUE,
sexchar
(2)check(sexin('男','女')),
ageintCHECK(age>18),
deptvarchar2(18)notnull);
2.课程关系course(cno,cname,tname,credit)
课程表结构
列名
说明
数据类型
完整性约束
cno
课程号
Char,长度为8
主键约束
cname
课程名
Varchar2,长度为20
唯一约束
tname
教师名
Varchar2,长度为20
非空约束
credit
学分
number
CREATETABLEcourse(
cnochar(8)PRIMARYKEY,
cnamevarchar2(20)UNIQUE,
tnamevarchar2(20)NOTNULL,
creditnumber);
3.选课关系sc(sno,cno,grade)
选课信息表结构
列名
说明
数据类型
完整性约束
Sno
学号
Char,长度为8
外键约束(参照student表中的学号)
cno
课程号
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(参考答案)
步骤一:
在控制面板中查看oracle服务是否已启动,以system身份登录,
密码:
sys
步骤二:
使用spool命令,例如:
spoole:
\090145zhangsan.sql;
步骤三:
创建表teacher,表的结构和要求如下:
教师表结构
列名
说明
数据类型
完整性约束
Tno
教师编号
Char,长度为7
主键约束
Tname
教师姓名
Char,长度为10
唯一约束
Tsex
教师性别
Char,长度为2
取值只允许为男或女
Tage
教师年龄
Int
无
Tdept
教师系别
Varchar2,长度为20
无
Tsal
教师薪水
number
非空约束
createtableteacher
(tnochar(7)primarykey,
tnamechar(10)unique,
tsexchar
(2)check(tsex='男'ortsex='女'),
tageint,
tdeptvarchar(20),
tsalnumbernotnull);
步骤四:
向教师表中插入以下数据。
Tno
Tname
Tsex
Tage
Tdept
Tsal
0001
张三
女
20
计科系
2300
0002
王五
男
21
信管系
1800
0003
李四
日语系
3000
insertintoteachervalues('0001','张三','女',20,'计科系',2300);
insertintoteachervalues('0002','王五','男',21,'信管系',1800);
insertintoteachervalues('0003','李四',null,null,'日语系',3000);
步骤五:
将‘信管系’系更名为‘信息管理’。
Updateteacher
Settdept=’信息管理系’
Wheretdept=’信管系’;
步骤六:
将王五老师的年龄更改为25。
Updateteacher
Settage=25
Wheretname=’王五’;
步骤七:
给所有的教师工资涨200元。
Updateteacher
Settsal=tsal+200;
步骤八:
删除教师表中所有计科系的老师纪录。
Deletefromteacherwheretdept=’计科系’;
步骤九:
删除教师表中的全部数据。
Deletefromteacher;
上机实验3(参考答案)
步骤一:
启动oracle服务,以system身份登录,密码:
sys;
步骤二:
使用spool命令,例如:
spoole:
\090145zhangsan.sql;
步骤三:
创建表emp,表的结构和要求如下:
员工信息表结构
列名
说明
数据类型
完整性约束
Eno
员工编号
Char,长度为7
主键
Ename
员工姓名
Char,长度为10
非空notnull
Sex
员工性别
Char,长度为4
取值只允许为男或女
Age
员工年龄
Int
年龄要求大于18岁
Job
员工工作
Varchar2,长度为20
无
Sal
基本工资
Number
无
Dept
隶属部门
Varchar2,长度为20
无
createtableemp(
enochar(7)primarykey,
enamechar(10)notnull,
sexchar(4)check(sexin('男','女')),
ageintcheck(age>18),
jobvarchar2(20),
salnumber,
deptvarchar2(20));
步骤四:
向emp表中插入以下数据
Eno
Ename
Sex
Age
Job
Sal
Dept
0001
张三
男
20
销售
880
市场部
0002
李四
女
26
会计
1600
财务部
0003
王五
女
22
销售
1000
市场部
0004
赵六
男
19
2300
市场部
0005
张七
女
23
测试
1400
技术部
0006
赵八
男
30
研发
2000
技术部
insertintoempvalues('0001','张三','男',20,'销售',880,'市场部');
insertintoempvalues('0002','李四','女',26,'会计',1600,'财务部');
insertintoempvalues('0003','王五','女',22,'销售',1000,'市场部');
insertintoempvalues('0004','赵六','男',19,null,2300,'市场部');
insertintoempvalues('0005','张七','女',23,'测试',1400,'技术部');
insertintoempvalues('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(参考答案)
步骤一:
在控制面板中查看oracle服务是否已启动,以system身份登录,
密码:
sys
步骤二:
使用spool命令:
spoole:
\090145zhangsan.sql;
步骤三:
建表
1.学生关系student(sno,sname,age,sex,dept)
列名
说明
数据类型
完整性约束
sno
学号
Char,长度为8
主键约束
sname
姓名
Varchar2,长度为20
唯一约束
sex
性别
Char,长度为2
性别只能取男或女
age
年龄
Int
年龄在15和30岁之间
dept
系别
Varchar2,长度为18
无
CREATETABLEstudent(
Snochar(8)PRIMARYKEY,
snamevarchar2(20)UNIQUE,
sexchar(4)check(sexin('男','女')),
ageintCHECK(agebetween15and30),
deptvarchar2(18));
2.课程关系course(cno,cname,tname,credit)
课程表结构
列名
说明
数据类型
完整性约束
cno
课程号
Char,长度为8
主键约束
cname
课程名
Varchar2,长度为20
唯一约束
tname
教师名
Varchar2,长度为20
非空约束
credit
学分
number
CREATETABLEcourse(
cnochar(8)PRIMARYKEY,
cnamevarchar2(20)UNIQUE,
tnamevarchar2(20)NOTNULL,
creditnumber);
3.选课关系sc(sno,cno,grade)
选课信息表结构
列名
说明
数据类型
完整性约束
Sno
学号
Char,长度为8
外键约束(参照student表中的学号)
cno
课程号
Char,长度为8
外键约束(参照course表中的课程号)
grade
成绩
int
主键为(sno,cno)属性的组合键。
CREATETABLEsc(
Snochar(8)REFERENCESstudent(sno),
cnochar(8)REFERENCEScourse(cno),
gradesmallint,
primarykey(sno,cno));
步骤四:
插入数据
insertintostudent(sno,sname,sex,age,dept)
values('05880101','周一','男',17,'计算机系');
insertintostudent(sno,sname,sex,age,dept)
values('05880102','吴二','女',20,'信息系');
insertintostudent
values('05880103','张三','女',19,'计算机系');
insertintostudent
values('05880104','李四','男',22,'信息系');
insertintostudent
values('05880105','王五','男',22,'数学系');
insertintostudent
values('05880106','赵六','男',19,'数学系');
insertintostudent
values('05880107','陈七','女',23,'日语系');
insertintostudent
values('05880108','刘八','男',21,'日语系');
insertintocourse
values('c1','database','张老师',4);
insertintocourse
values('c2','java','王老师',4);
insertintocourse
values('c3','maths','李老师',3);
insertintocourse
values('c4','english','赵老师',5);
insertintocourse
values('c5','japanese','陈老师',5);
insertintosc
values('05880101','c1',75);
insertintosc
values('05880101','c2',60);
insertintosc
values('05880101','c3',80);
insertintosc
values('05880102','c1',89);
insertintosc
values('05880102','c3',61);
insertintosc
values('05880103','c2',72);
insertintosc
values('05880104','c2',65);
insertintosc
values('05880104','c4',65);
insertintosc
values('05880105','c5',66);
insertintosc
values('05880106','c4',74);
步骤五:
完成下列查询
(1)查询选修了‘c2’号课程的学生的学号及其成绩,查询结果按成绩降序排列。
Selectsno,gradeFromscWherecno='c2'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='java'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='maths'));
3.查询比所有计算机系学生年龄都大的学生的基本情况。
select*fromstudentwhereage>all
(selectagefromstudentwheredept='计算机系');
4.查询选修课程数目最多的学生学号。
selectsnofromscgroupbysnohavingcount(cno)>=all
(selectcount(cno)fromscgroupbysno);
步骤四:
相关子查询
1.在选课信息表中查询选修“database”课程的学生学号和成绩。
selectsno,gradefromscwhereexists(select*fromcoursewhereo=oandcname='database');
2.查询没有选修c1课程的学生学号和姓名。
selectsno,snamefromstudentwherenotexists(select*fromscwhere
student.sno=sc.snoandcno='c1');
3.查询所有成绩均大于90分的学生姓名。
selectsnamefromstudentwhere90<(selectmin(grade)from
scwherestudent.sno=sc.sno);
上机实验6(参考答案)
步骤一:
在控制面板中查看oracle服务是否已启动,以system身份登录,
密码:
sys
步骤二:
使用spool命令:
spoole:
\090145zhangsan.sql;
步骤三:
建表
1.部门信息表:
Dept(deptno,dname,loc),表中属性列依次是部门号、部门名称和部门地点。
列名
数据类型
长度
完整性约束
deptno
Char
10
主键
dname
Varchar
20
唯一
loc
Varchar
20
无
createtabledept(
deptnochar(10)primarykey,
dnamevarchar(20)unique,
locvarchar(20));
2.雇员信息表:
Emp(empno,ename,age,sal,deptno),表中属性列依次是雇员编号、雇员姓名、年龄、月薪和部门号。
列名
数据类型
长度
完整性约束
empno
Char
20
主键
ename
Varchar
20
非空
age
Int
无
年龄在18到60岁之间
sal
Number
无
月薪大于1000
deptno
Char
10
外键(参照dept表中deptno)
createtableemp(
empnochar(20)primarykey,
enamevarchar(20)not
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 东南大学 大二 学期 数据库