學生信息表:
create table LJ_STU
(
STID NUMBER(10),
STNAME VARCHAR2(100)
);
1 Mary
2 Lily
3 Jack
4 Lucy
5 Sun
6 Roy
7 Jane
8 Mike
9 Anny
10 Davi
11 DR
12 Robin
課程表
create table LJ_COURSE
(
CID NUMBER(10),
CNAME VARCHAR2(100)
);
1 English
2 Chinese
3 Math
4 Chemistry
5 Physics
6 Geography
7 Creature
8 History
學生成績表
create table LJ_ST_SCORE
(
SID NUMBER(10),
CID NUMBER(10),
SCORE NUMBER(10)
);
SID CID SCORE
1 1 90
1 2 78
1 3 99
1 4 85
1 5 71
1 6 45
1 7 60
1 8 56
2 1 40
2 2 56
2 3 59
2 4 55
2 5 71
2 6 85
2 7 60
2 8 96
3 1 57
3 2 79
3 3 59
3 4 55
3 5 71
3 6 85
3 7 60
3 8 96
4 1 91
4 2 79
4 3 59
4 4 55
4 5 71
4 6 85
4 7 60
4 8 96
5 1 91
5 2 80
5 3 100
5 4 55
5 5 71
5 6 85
5 7 100
5 8 96
6 1 91
6 2 79
6 3 69
6 4 55
6 5 71
6 6 85
6 7 60
6 8 96
7 1 91
7 2 79
7 3 69
7 4 55
7 5 71
7 6 85
7 7 60
7 8 96
8 1 91
8 2 79
8 3 69
8 4 55
8 5 71
8 6 85
8 7 60
8 8 96
9 1 91
9 2 79
9 3 69
9 4 55
9 5 71
9 6 85
9 7 60
9 8 96
10 1 91
10 2 79
10 3 69
10 4 55
10 5 71
10 6 85
10 7 60
10 8 96
11 1 91
11 2 79
11 3 69
11 4 55
11 5 71
11 6 85
11 7 60
11 8 96
12 1 91
12 2 34
12 3 20
12 4 50
12 5 40
12 6 20
12 7 60
12 8 40
1、查詢出有兩名或兩名以上功課不及格(小於60分)的學生,按如下格式展示:
學生ID 學生名稱 課程名稱 分數
select b.stid, b.stname, c.cname, d.score
from (select s.sid, count(*)
from lj_st_score s
where s.score < 60
group by s.sid
having count(*) >= 2) a,
lj_stu b,
lj_course c,
lj_st_score d
where a.sid = d.sid
and b.stid = d.sid
and c.cid = d.cid
and a.sid = b.stid
and d.score < 60;
2、查詢出每門課程成績前3名的學生,按如下格式顯示:
課程ID 課程名稱 第一名學生 第二名學生 第三名學生
select c.cname as 課程名,
max(decode(a.rankno, 1, s.stname)) as 第一名,
max(decode(a.rankno, 2, s.stname)) as 第二名,
max(decode(a.rankno, 3, s.stname)) as 第三名
from (select ss.sid,
ss.cid,
ss.score,
row_number() over(partition by ss.cid order by ss.score desc) rankno
from lj_st_score ss) a,
lj_stu s,
lj_course c
where s.stid = a.sid
and c.cid = a.cid
and a.rankno <= 3
group by c.cname
3、查詢出“數學”成績在:優、良、中、差各個等級的學生人數,按如下格式展示:
等級 學生人數
select a.grade, count(*)
from (select (case
when sc.score < 60 then
'差(小於60分)'
when sc.score >= 60 and sc.score <= 70 then
'中(60~70)'
when sc.score > 70 and sc.score <= 80 then
'良好(70~80)'
when sc.score > 80 then
'優秀(80以上)'
end) grade
from lj_course c, lj_st_score sc
where sc.cid = c.cid
and c.cname = 'Math') a
group by a.grade