根据给出的表结构完成以下题目 表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
题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:将学生按年龄升序排序。