首页 > 代码库 > 45道经典例题答案

45道经典例题答案

 声明啊 因为有些题目个人理解不太一样 所以给的答案也不太一样 希望谅解;

下面是题目

表结构:
drop table student;
drop table course;
drop table score;
drop table teacher;

CREATE TABLE STUDENT
(SNO VARCHAR(3) NOT NULL, 
SNAME VARCHAR(4) NOT NULL,
SSEX VARCHAR(2) NOT NULL, 
SBIRTHDAY DATE,
CLASS NUMBER NOT NULL);

CREATE TABLE COURSE
(CNO VARCHAR(5) NOT NULL, 
CNAME VARCHAR(10) NOT NULL, 
TNO VARCHAR(10) NOT NULL);

CREATE TABLE SCORE 
(SNO VARCHAR(3) NOT NULL, 
CNO VARCHAR(5) NOT NULL, 
DEGREE NUMBER NOT NULL);

CREATE TABLE TEACHER 
(TNO VARCHAR(3) NOT NULL, 
TNAME VARCHAR(4) NOT NULL, 
TSEX VARCHAR(2) NOT NULL, 
TBIRTHDAY DATE NOT NULL, 
PROF VARCHAR(6), 
DEPART VARCHAR(10) 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列。
2、 查询教师所有的单位即不重复的Depart列。
3、 查询Student表的所有记录。
4、 查询Score表中成绩在60到80之间的所有记录。
5、 查询Score表中成绩为85,86或88的记录。
6、 查询Student表中“95031”班或性别为“女”的同学记录。
7、 以Class降序查询Student表的所有记录。
8、 以Cno升序、Degree降序查询Score表的所有记录。
9、 查询“95031”班的学生人数。
10、查询Score表中的最高分的学生学号和课程号。
11、查询‘3-105’号课程的平均分。
12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
13、查询最低分大于70,最高分小于90的Sno列。
14、查询所有学生的Sname、Cno和Degree列。
15、查询所有学生的Sno、Cname和Degree列。
16、查询所有学生的Sname、Cname和Degree列。
17、查询“95033”班所选课程的平均分。
18、假设使用如下命令建立了一个grade表:
create table grade
(low number,
upp number,
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列。
19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
20、查询score中选学一门以上课程的同学中分数为非最高分成绩的记录。
21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
23、查询“张旭“教师任课的学生成绩。
24、查询选修某课程的同学人数多于5人的教师姓名。
25、查询95033班和95031班全体学生的记录。
26、查询存在有85分以上成绩的课程Cno.
27、查询出“计算机系“教师所教课程的成绩表。
28、查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。
29、查询选修编号为“3-105“且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。
30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”的同学的Cno、Sno和Degree.
31、查询所有教师和同学的name、sex和birthday.
32、查询所有“女”教师和“女”同学的name、sex和birthday.
33、查询成绩比该课程平均成绩低的同学的成绩表。
34、查询所有任课教师的Tname和Depart.
35、查询所有未讲课的教师的Tname和Depart. 
36、查询至少有2名男生的班号。
37、查询Student表中不姓“王”的同学记录。
38、查询Student表中每个学生的姓名和年龄。
39、查询Student表中最大和最小的Sbirthday日期值。
40、以班号和年龄从大到小的顺序查询Student表中的全部记录。
41、查询“男”教师及其所上的课程。
42、查询最高分同学的Sno、Cno和Degree列。
43、查询和“李军”同性别的所有同学的Sname.
44、查询和“李军”同性别并同班的同学Sname.
45、查询所有选修“计算机导论”课程的“男”同学的成绩表

嗯 来一波答案

  1 --select t.*, t.rowid from STUDENT t;
  2 
  3 
  4 --查询Student表中的所有记录的Sname、Ssex和Class列。
  5 --select t.Sname,t.Ssex,t.Class from student t;
  6 
  7 --查询Student表的所有记录。
  8 --select * from student order by class;
  9 
 10 -- 查询Score表中成绩在60到80之间的所有记录。
 11 --select *from score t where t.degree between 60 and 80
 12 
 13  --查询Score表中成绩为85,86或88的记录。
 14  --select * from score t where t.degree in (85,86,88);
 15  
 16 --6、 查询Student表中“95031”班或性别为“女”的同学记录。
 17 --select *from student t where t.class=‘95031‘or t.ssex=‘女‘
 18 
 19 --7、 以Class降序查询Student表的所有记录。
 20 --select *from student t order by class desc
 21 
 22 --8、 以Cno升序、Degree降序查询Score表的所有记录。
 23 --select * from score t order by t.cno ,t.degree desc 
 24 
 25 --9、 查询“95031”班的学生人数。
 26 --select t.class, count(t.class) from student t where t.class=‘95031‘ group by class
 27 
 28 --10、查询Score表中的最高分的学生学号和课程号。
 29 --select t.sno, t.cno from score t where t.degree=(select max(degree)from score)
 30 
 31 --11、查询‘3-105’号课程的平均分。
 32 --select avg(t.degree) from score t where t.cno=‘3-105‘
 33 
 34 --12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
 35 --select avg(t.degree)from score t where t.cno like ‘3%‘ group by t.cno having count(t.cno)>=5
 36 
 37 --13、查询最低分大于70,最高分小于90的Sno列。
 38 -- select t.sno from score t where t.degree between 70 and 90 
 39 
 40 --14、查询所有学生的Sname、Cno和Degree列。
 41 --select sname, cno, degree from student ,score where student.sno=score.sno
 42 
 43 --15、查询所有学生的Sno、Cname和Degree列。
 44 --select sno,cname,degree from course,score where  score.cno=course.cno
 45 
 46 --16、查询所有学生的Sname、Cname和Degree列。
 47 --select sname,cname,degree from course,score ,student where course.cno=score.cno and score.sno=student.sno
 48 
 49 --17、查询“95033”班所选课程的平均分。
 50 --select cno, avg(degree)from score ,student where student.class = ‘95033‘and student.sno=score.sno group by cno
 51 
 52 --18、假设使用如下命令建立了一个grade表:
 53 /*create table grade
 54 (low number,
 55 upp number,
 56 rank char(1));
 57 insert into grade values(90,100,‘A‘);
 58 insert into grade values(80,89,‘B‘);
 59 insert into grade values(70,79,‘C‘);
 60 insert into grade values(60,69,‘D‘);
 61 insert into grade values(0,59,‘E‘);
 62 commit;*/
 63 --现查询所有同学的Sno、Cno和rank列。
 64 --select sno ,cno, rank from score,grade where degree between low and upp 
 65 
 66 --查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
 67 --select x.Cno,x.Sno,x.degree from score x,score y 
 68 --where x.cno=‘3-105‘ and x.degree>y.degree and y.sno=‘109‘and y.cno=‘3-105‘; 
 69 
 70 -- 20查询score中选学一门以上课程的同学中分数为非最高分成绩的记录。
 71 --select * from score s where sno in (select sno from score group by sno having count(*)>1)
 72 --and degree not in (select max(degree) from score group by sno  )
 73  
 74 
 75 
 76 --21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录
 77 --select t.cno, t.sno,t.degree from score t  where  t.cno = ‘3-105‘ and t.degree>(select degree from score a where 
 78 --a.sno=‘109‘ and a.cno=‘3-105‘) 
 79 
 80 --22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
 81 --select sno, sname, sbirthday from student where to_char(sbirthday,‘yyyy‘)=(select to_char (sbirthday,‘yyyy‘) from
 82  --student where sno=‘108‘)
 83  
 84 --23、查询“张旭“教师任课的学生成绩。\
 85 --select sno,degree from score s ,teacher t ,course where t.tname=‘张旭‘ and course.tno=t.tno
 86 
 87 --24、查询选修某课程的同学人数多于5人的教师姓名。
 88 --select  tname from  teacher where tno in (select c.tno from course c, score s where c.cno=s.sno
 89  --group by c.tno having count(c.tno)>5) 
 90 
 91 --25、查询95033班和95031班全体学生的记录。
 92 
 93 --select * from student where class in (‘95033‘,‘95031‘)
 94 
 95 --26、查询存在有85分以上成绩的课程Cno.
 96 --select cno from score where degree>85 group by cno
 97 
 98 --27、查询出“计算机系“教师所教课程的成绩表。
 99 --select degree,sno,cno ,t.depart from score, teacher t where cno in ( select c.cno from course c ,teacher t 
100 --where c.tno=t.tno and t.depart=‘计算机系‘)  and t.depart=‘计算机系‘
101 
102 --28、查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。
103 --select tname, prof from teacher where depart=‘计算机系‘ and prof not in 
104 --(select prof from teacher where depart = ‘电子工程系‘)
105 
106 --29、查询选修编号为“3-105“且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。
107 
108 
109 --select  * from score s where s.cno=‘3-105‘ and 
110 --s.degree >all (select s.degree from score s where s.cno=‘3-245‘)order by s.degree desc;
111 
112 --30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”的同学的Cno、Sno和Degree.
113 
114 --select * from score where cno=‘3-105‘ and degree>all(select degree from score where cno=‘3-245‘);
115 
116 --31、查询所有教师和同学的name、sex和birthday.
117 /*select tname,tsex,tbirthday from teacher union 
118 select sname,ssex,sbirthday from student; */
119 
120 --32、查询所有“女”教师和“女”同学的name、sex和birthday.
121 
122 --select tname,tsex,tbirthday from teacher where tsex=‘女‘ union
123 --select sname, ssex,sbirthday from student where ssex = ‘女‘
124 
125 --33、查询成绩比该课程平均成绩低的同学的成绩表。
126 --select * from score  a where degree<
127 --(select avg(degree) from score b where a.cno=b.cno); 
128 
129 --34、查询所有任课教师的Tname和Depart.
130 --select tname ,depart from teacher a where exists 
131 --(select * from course b where a.tno=b.tno); 
132 --35、查询所有未讲课的教师的Tname和Depart. 
133 --select tname ,depart from teacher a  where not exists 
134 --(select * from course b where a.tno=b.tno); 
135 
136 --36、查询至少有2名男生的班号。
137  -- select class from student where ssex=‘男‘group by class having count(*)>=2; 
138 --37、查询Student表中不姓“王”的同学记录。
139 --select * from student where sname not like‘王%‘; 
140 
141 --38、查询Student表中每个学生的姓名和年龄。
142 
143 --select sname as 姓名,(to_char(sysdate,‘yyyy‘)-to_char(sbirthday,‘yyyy‘)) as 年龄 from student
144 
145 
146 --39、查询Student表中最大和最小的Sbirthday日期值。
147 
148 --select sname,sbirthday  from student where sbirthday =(select min (sbirthday) from student)union 
149 --select sname,sbirthday  from student where sbirthday =(select max(sbirthday) from student)
150 
151 --40、以班号和年龄从大到小的顺序查询Student表中的全部记录。
152 --select * from student s order by class desc , sbirthday desc;
153 
154 
155 --41、查询“男”教师及其所上的课程。
156 -- select x.tname,y.cname from teacher x,course y where x.tno=y.tno and x.tsex=‘男‘;
157 
158 --42、查询最高分同学的Sno、Cno和Degree列。
159 
160 --select * from score where degree=(select max(degree)from score); 
161 
162 --43、查询和“李军”同性别的所有同学的Sname.
163 --select sname from student where ssex=(select ssex from student where sname=‘李军‘);
164 
165 --44、查询和“李军”同性别并同班的同学Sname.
166 --select sname from student where ssex=(select ssex from student where sname=‘李军‘) and
167  --class=(select class from student where sname=‘李军‘)
168 
169 --45、查询所有选修“计算机导论”课程的“男”同学的成绩表
170 
171 select * from score where sno in(select sno from student where ssex=) and
172  cno=(select cno from course where cname=计算机导论); 

 

45道经典例题答案