数据库练习(参考答案) 下载本文

根据给出的表结构完成以下题目 表1-1 Student表结构 列名 说明 数据类型 约束 Sno 学号 字符串,长度为7 主码 Sname 姓名 字符串,长度为10 非空 Ssex 性别 字符串,长度为2 取‘男’或‘女’ Sage 年龄 整数 取值15~45 Sdept 所在系 字符串,长度为20 默认为‘计算机系’ 表3-1 Student表数据 Sno Sname Ssex Sage Sdept

9512101 李勇 男 19 计算机系 9512102 刘晨 男 20 计算机系 9512103 王敏 女 20 计算机系 9521101 张立 男 22 信息系 9521102 吴宾 女 21 信息系 9521103 张海 男 20 信息系 9531101 钱小平 女 18 数学系 9531102 王大力 男 19 数学系

------------------------------------------------------------------------------------------------------------------- 表1-2Course表结构 列名 说明 Cno 课程号 Cname 课程名 Ccredit 学分 Semster 学期 Period 学时

数据类型 约束

字符串,长度为10 主码 字符串,长度为20 非空 整数 取值大于0 整数 取值大于0 整数 取值大于0

Semester

1

表3-2 Course表数据 Cno Cname Ccredit C01 计算机文化学 3 C02 VB 2 3 C03 计算机网络 C04 数据库基础 C05 高等数学 C06 数据结构

4 6 8 5

7 6 2 4

表1-3 SC表结构 列名 说明 Sno 学号 Cno 课程名 Grade 成绩

数据类型 约束 字符串,长度为7 主码,引用Student的外码 字符串,长度为10 主码,引用Course 整数 取值0~100

表 3-3 SC表数据 Sno Cno Grade XKLB 9512101 c01 90 必修 9512101 c02 86 选修 9512101 c06 必修 9512102 c02 78 选修 9512102 c04 66 必修 9521102 c01 82 选修 9521102 c02 75 选修 9521102 c04 92 必修 9521102 c05 50 必修 9521103 c02 68 选修 9521103 c06 必修 9531101 c01 80 选修 9531101 c05 95 必修 9531102 c05 85 必修

题1:查询没有选修课程“c01”的学生姓名和所在系。

答案:select sname,sdept from student where sno not in (select sno from sc where cno='C01') select sname,sdept from student,sc

where (student.sno=sc.sno) and (sc.sno != “co1”)

题2:为SC表添加“选课类别”列,此列的定义为XKLB char(4)。 答案:alter table sc add(XKLB varchar2(4)); 题3:将新添加的XKLB的类型改为char(6)。 答案:alter table sc modify(XKLB varchar2(6)); 题4:删除Course表的Period列。

答案:alter table course drop column period; 题5:删除计算机系不及格学生的选课记录。 答案:

delete from sc where grade<60 and sno in (select sno from student where sdept='计算机系');

题6:查询全体学生的学号与姓名。 答案:select sno,sname from student;

题7:查询全体学生的姓名,学号和所在系。 答案:select sname,sno,sdept from student; 题8:查询全体学生的记录。 答案:select * from student;

题9:查询全体学生的姓名及其出生年份。 答案:select sname,2014-sagefrom student;

或select sname,(to_char(sysdate,'YYYY')-sage) from student;

题10:查询全体学生的姓名和出生年份,比在出生年份列前加入一个列,此列的每行数据均为“Year of Birth”常量值。

答案:select sname,'Year of Birth',(to_char(sysdate,'YYYY')-sage) from student;

题11:在选课表(SC)中查询有哪些学生选修了课程,并列出学生的学号。 答案:select distinct sno from sc;

题12:查询计算机系全体学生的姓名。

答案:select distinct sname from student where sdept='计算机系'; 题13:查询所有年龄在20岁以下的学生的姓名及年龄。 答案:select sname,sage from student where sage<20; 题14:查询考试成绩不及格的学生的学号。 答案:select distinct sno from sc where grade<60;

题15:查询年龄在20~23岁之间的学生的姓名,所在系和年龄。

答案:select sname,sdept,sage from student where sage>=20 and sage<=23; 题16:查询年龄不在20~23之间的学生的姓名,所在系和年龄。

答案:select sname,sdept,sage from student where sage < 20 or sage >23; 题17:查询信息系,数学系和计算机系学生的姓名和性别。

答案:select sname,ssex from student where sdept IN (‘信息系’ , ‘数学系’ , ‘计算机系’);

题18:查询既不属于信息系,数学系,也不属于计算机系的学生的姓名和性别。 答案:select sname,ssex from student where sdept not in( '信息系','数学系','数学系'); 题19:查询姓“张”的学生的详细信息。

答案:select * from studentwhere sname like ‘张%’; 题20:查询学生表中姓“张”,姓“李”和姓“刘”的学生的情况。 答案: select * from student where sname like '张%' or sname like '李%' or sname like '刘%'; 或者 select * from student where sname like '[张李刘]%'; //错误

题21:查询名字中第2个字为“小”或“大”字的学生的姓名和学号。 答案: select sname ,sno from student where sname like '_小%' or sname like '_大%'; 或者 select sname ,sno from student where sname like '_[小大]%'; 题22:查询所有不姓“刘”的学生。

答案:select * from student where sname not like '刘%';

题23:从学生表中查询学号的最后一位不是2,3,5的学生的情况。 答案: select * from student where sno not like '%2' and sno not like '%3' and sno not like '%5'; 或者 select * from student where sno not like '%[235]'; //错误 题24:

查询无考试成绩的学生的学号和相应的课程号。 答案:select sno,cno from sc where grade is null;

题25:查询所有有考试成绩的学生的学号和课程号。 答案:select sno,cno from sc where grade is not null;

题26:查询计算机系年龄在20岁以下的学生的姓名。

答案:select sname from student where sdept = '计算机系' and sage <= 20; 题27:将学生按年龄升序排序。