Oracle数据库练习题及答案大全(包含数据库脚本)

目录

删表语句

建表语句

插入数据

练习题及答案

整理不易,请仔细阅读,希望对你有帮助

可自行复制粘贴,仅供参考,如有问题请及时私信或评论,我会一一回复


删表语句

drop TABLE STUDENT;
drop TABLE COURSE;
drop TABLE SCORE;
drop TABLE TEACHER;

建表语句

CREATE TABLE STUDENT   --学生表
(SNO VARCHAR(20) NOT NULL, --学生号
SNAME VARCHAR(20)NOT NULL, --学生名称
SSEX VARCHAR(20)NOT NULL, --学生性别
SBIRTHDAY DATE, --学生出生日期
CLASS VARCHAR(20) --学生的班级号
);

CREATE TABLE COURSE --课程表
(CNO VARCHAR(20) NOT NULL, --课程号
CNAME VARCHAR(20) NOT NULL, --课程名称
TNO VARCHAR(20) NOT NULL --教师号
);

CREATE TABLE SCORE  --分数表
(SNO VARCHAR(20) NOT NULL, --学生号
CNO VARCHAR(20)NOT NULL,  --课程号
DEGREE NUMERIC(20,1)NOT NULL --分数
);

CREATE TABLE TEACHER  --教师表
(TNO VARCHAR(20) NOT NULL, --老师号
TNAME VARCHAR(20) NOT NULL, --老师名称
 TSEX VARCHAR(20) NOT NULL, --老师性别
TBIRTHDAY DATE NOT NULL, --老师出生日期
PROF VARCHAR(20), --老师职称
DEPART VARCHAR(20) NOT NULL); --老师专业

插入数据

INSERT INTO STUDENT(SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (108,'曾华','男',to_date('1977-09-01','yyyy-mm-dd'),95033);
INSERT INTO STUDENT(SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (105,'框明','男',to_date('1975-10-02','yyyy-mm-dd'),95031);
INSERT INTO STUDENT(SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (107,'王丽','女',to_date('1976-01-23','yyyy-mm-dd'),95033);
INSERT INTO STUDENT(SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (101,'李军','男',to_date('1976-02-20','yyyy-mm-dd'),95033);
INSERT INTO STUDENT(SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (109,'王芳','女',to_date('1975-02-10','yyyy-mm-dd'),95031);
INSERT INTO STUDENT(SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (103,'陆君','男',to_date('1974-06-03','yyyy-mm-dd'),95031);

INSERT INTO COURSE(CNO,CNAME,TNO)VALUES('3-105','计算机导论','825');
INSERT INTO COURSE(CNO,CNAME,TNO)VALUES('3-245','操作系统','804');
INSERT INTO COURSE(CNO,CNAME,TNO)VALUES('6-166','数据电路','856');
INSERT INTO COURSE(CNO,CNAME,TNO)VALUES('9-888','高等数学','100');

INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (103,'3-245',86);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (105,'3-245',75);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (109,'3-245',68);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (103,'3-105',92);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (105,'3-105',88);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (109,'3-105',76);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (101,'3-105',64);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (107,'3-105',91);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (108,'3-105',78);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (101,'6-166',85);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (107,'6-106',79);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (108,'6-166',81);

INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)VALUES(804,'李诚','男',to_date('1958-12-02','yyyy-mm-dd'),'副教授','计算机系');
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)VALUES(856,'张旭','男',to_date('1969-03-12','yyyy-mm-dd'),'讲师','电子工程系');
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)VALUES(825,'王萍','女',to_date('1972-05-05','yyyy-mm-dd'),'助教','计算机系');
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)VALUES(831,'刘冰','女',to_date('1977-08-14','yyyy-mm-dd'),'助教','电子工程系');

练习题及答案

--1、查询Student表中的所有记录的Sname、Ssex和Class列。
select Sname,Ssex,Class from Student;
--2、查询教师所有的单位即不重复的Depart列。
select distinct depart from teacher;
--3、查询Student表的所有记录。
select Sno as 学号, Sname as 姓名,Ssex as 性别,Sbirthday as出生日期,Class as 班号 from student;
--4、查询Score表中成绩在60到80之间的所有记录。
select * from score where degree between 60 and 80;
select * from score where degree>=60 and degree<=80;
--5、查询Score表中成绩为85,86或88的记录
select * from score where degree in (85,86,88);
--6、查询Student表中“95031”班或性别为“女”的同学记录
select * from student where class='95031' or Ssex='女';
--7、以Class降序查询Student表的所有记录
select * from student order by class desc;
--8、以Cno升序、Degree降序查询Score表的所有记录
select * from score order by cno asc ,degree desc;
select * from score order by cno,degree desc;
--9、查询“95031”班的学生人数
select count(*) as CNT from student where class=95031;
--10、查询Score表中的最高分的学生学号和课程号
select Sno as 学号,cno as 课程号,degree as 最高分 from score where degree=(select max(degree) from score)
--11、查询3-105’号课程的平均分
select avg(degree)as 课程平均分 from score where cno='3-105';
--12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数
select cno,avg(degree) from score where cno like'3%'group by cno having count(*) >5;
--13、查询最低分大于70,最高分小于90的Sno列。
select Sno from score group by Sno having min(degree)>70 and max(degree)<90;
--14、查询所有学生的Sname、Cno和Degree列.
select student.Sname,score.Cno,score.degree,student.Sno from student,score where student.Sno=score.Sno;
--15、查询所有学生的Sno Cname和Degree列。
select x.Sno,y.Cname,x.degree from score x,course y where x.Cno=y.Cno;
--16、查询所有学生的 Sname、Cname和Degree列。
select x.Sname,y.Cname,z.degree from student x,course y,score z where x.Sno=z.Sno and z.Cno=y.Cno;
--17、查询“95033”班所选课程的平均分
select y.cno,avg(y.degree)from student x,score y where x.sno=y.sno and x.class=95033 group by y.cno;
/*18、假设使用如下命令建立了一个grade 表:create table grade(low number(3,0),upp number(3),rank char(1));
insert into grade values(90,100,'A);
insert into grade values(80,89,B');
insert into grade values(70,79,C);
insert into grade values(60,69,D');
insert into grade values(0,59,'E');
commit;
现查询所有同学的Sno、Cno和rank列。*/
select Sno,Cno,rank from score,grade where degree between low and upp order by rank;
--19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录
select distinct x.cno,x.sno,x.degree from score x,score y where x.cno = '3-105' and x.degree > y.degree and y.sno='109' and y.cno='3-105';
--20、查询score中选学一门以上课程的同学中分数为非最高分成绩的记录。
--1查询成绩非本科最高
select distinct * from score b where degree <(select max(degree) from score a where a.cno=b.cno);
--21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录
select x.cno,x.sno,x.degree
from score x,score y
where x.degree > y.degree and y.sno='109' and y.cno='3-105' ;
select cno,sno,degree from score
where degree >(select degree from score where sno='109' and cno='3-105');
--22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列
select sno,sname,sbirthday from student where to_char(sbirthday, 'yyyy')=(select to_char(sbirthday,'yyyy') from student where sno='108');
--23、查询“张旭“教师任课的学生成绩
select cno,sno,degree from score where cno=(select x.cno from course x,teacher y where x.tno=y.tno and y.tname='张旭');
--24、查询选修某课程的同学人数多于5人的教师姓名
select tname from teacher where tno in(select x.tno from course x,score y  group by x.tno having count(x.tno)>5);
--25、查询95033班和95031班全体学生的记录
select * from student where class in(95033,95031);
--26、查询存在有85分以上成绩的课程Cno.
select distinct cno from score where degree in (select degree from score where degree>85);
--27、查询出“计算机系“教师所教课程的成绩表
select * from score where cno in(select x.cno from course x,teacher y where y.tno=x.tno and y.depart='计算机系');
--28、查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof.
select tname,prof from teacher where depart='计算机系' and prof not in (select prof from teacher where depart='电子工程系');
--29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的CnoSno和Degree,并按Degree从高到低次序排序。
select * from score where cno='3-105' and degree>any (select degree from score where cno='3245')order by degree desc;
--30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree.
select * from score where cno='3-105' and degree>all(select degree from score where cno='3-245');
--31、查询所有教师和同学的 name、sex和birthday.
select tname,tsex,tbirthday from teacher
union
select sname,ssex,sbirthday from student;
--32、查询所有“女”教师和“女”同学的name、sex和birthday.
select tname,tsex,tbirthday from teacher where tsex='女'
union
select sname,ssex,sbirthday from student where ssex='女';
--33、查询成绩比该课程平均成绩低的同学的成绩表
select * from score a where degree<(select avg(degree)from score b where a.cno=b.cno);
--34、查询所有任课教师的Tname和Depart.
select tname,depart from teacher a where exists(select * from course b where a.tno=b.tno);
--35、查询所有未讲课的教师的Tname和Depart.
select tname,depart from teacher a where not exists(select * from course b where a.tno=b.tno);
--36、查询至少有2名男生的班号
select class from student where ssex='男' group by class having count(*)>=2;
--37、查询Student表中不姓“王”的同学记录。
select * from student where sname not like'王_';
--38、查询Student表中每个学生的姓名和年龄
select sname as 姓名,(to_char(sysdate,'yyyy')-to_char(sbirthday,'yyyy'))as 年龄 from student
--39、查询Student表中最大和最小的Sbirthday日期值
select sname,sbirthday as 最大 from student where sbirthday =(select min (sbirthday) from student)
union
select sname,sbirthday as 最小 from student where sbirthday =(select max(sbirthday) from student)
--40、以班号和年龄从大到小的顺序查询Student表中的全部记录
select class,sname,sbirthday from student order by class desc,sbirthday;
--41、查询“男”教师及其所上的课程
select x.tname,y.cname from teacher x,course y where x.tno=y.tno and x.tsex='男';
--42、查询最高分同学的SnoCno和Degree列。
select * from score where degree=(select max(degree)from score);
--43、查询和“李军”同性别的所有同学的Sname.
select sname from student where ssex=(select ssex from student where sname='李军');
--44、查询和“李军”同性别并同班的同学Sname.
select sname from student where ssex=(select ssex from student where sname='李军') and class=(select class from student where sname='李军');
--45、查询所有选修“计算机导论”课程的“男”同学的成绩表
select * from score where sno in(select sno from student where ssex='男') and cno=(select cno from course where cname='计算机导论');

整理不易,请仔细阅读,希望对你有帮助

可自行复制粘贴,仅供参考,如有问题请及时私信或评论,我会一一回复

猜你喜欢

转载自blog.csdn.net/vlogghd/article/details/128374482