SQL学校募集社募集問題シリーズの学生成績情報検索
6418 ワード
文書ディレクトリソーステーブル s表 sc表 c表 問題 問題1の解答 問題2の解答 問題3の解答 ソーステーブル
s表
Sid:学生ID Sname:学生名
Sid
Sname
1
趙雷
2
銭電
3
孫風
4
李雲
5
周梅
6
呉蘭
7
鄭竹
scテーブル
Sid学生id Cid課程id score点数
Sid
Cid
score
1
1
80
1
2
90
1
3
99
2
1
70
2
2
60
2
3
80
3
1
80
3
2
80
3
3
80
4
1
50
4
2
30
4
3
20
5
1
76
5
2
87
6
1
31
6
3
34
7
2
89
c表
Cidカリキュラムid Cnameカリキュラム名
Cid
Cname
1
国語
2
数学
3
英語
に質問 SQL文で各コースが80点以上の学生の名前を検索する 「国語」課程が「数学」課程より成績の高い学生の情報と課程点数 を照会する平均成績が65点より大きい学生のidと名前、および平均成績 を検索する.
問題1の解答
構想解析:各課程が80点より大きい学生の名前を調べるため,学生の名前を含む和学号のs表と課程成績を含むsc表を結合し,この2つの表に共通に含まれるSidすなわち学号に基づいて結合し,最後にgroupbyとwhereフィルタリングを加える.
問題2の解答
構想解析:「国語」の課程が「数学」の課程より成績の高い学生の情報と課程点数を検索するため、返されるのはやはり学生の情報と課程点数、すなわちSid、国語成績、数学成績であるため、2枚の表を作ってそれぞれ学生の国語成績と数学成績、すなわちt 1とt 2を検索しなければならない.さらに学号に従ってこの2枚の表を内接続し、WHERE t 1に基づいている.score>t2.scoreこのフィルタリング条件は「国語」課程が「数学」課程より成績の高い学生の情報と課程点数を得る.
問題3の解答
構想解析:平均成績が65点より大きい学生のidと名前及び平均成績を調べるため、同じ学号に基づいて学生の名前を含む和学号のs表と課程成績を含むsc表を連結し、平均成績が65より大きいことからSidとSname及び平均成績を選出する
s表
Sid:学生ID Sname:学生名
Sid
Sname
1
趙雷
2
銭電
3
孫風
4
李雲
5
周梅
6
呉蘭
7
鄭竹
scテーブル
Sid学生id Cid課程id score点数
Sid
Cid
score
1
1
80
1
2
90
1
3
99
2
1
70
2
2
60
2
3
80
3
1
80
3
2
80
3
3
80
4
1
50
4
2
30
4
3
20
5
1
76
5
2
87
6
1
31
6
3
34
7
2
89
c表
Cidカリキュラムid Cnameカリキュラム名
Cid
Cname
1
国語
2
数学
3
英語
に質問
問題1の解答
SELECT s.Sid,s.Sname
FROM xiaoliu.s
INNER JOIN
xiaoliu.sc
ON sc.Sid=s.Sid
GROUP BY sc.Sid,s.Sname
HAVING MIN(sc.score)>80;
構想解析:各課程が80点より大きい学生の名前を調べるため,学生の名前を含む和学号のs表と課程成績を含むsc表を結合し,この2つの表に共通に含まれるSidすなわち学号に基づいて結合し,最後にgroupbyとwhereフィルタリングを加える.
問題2の解答
SELECT t1.Sid,t1.score AS ' ',t2.score AS ' '
FROM
(SELECT Sid,score FROM xiaoliu.sc
INNER JOIN
xiaoliu.c
ON c.Cid=sc.Cid
WHERE c.Cname=' ') t1
INNER JOIN
(SELECT Sid,score FROM xiaoliu.sc
INNER JOIN
xiaoliu.c
ON c.Cid=sc.Cid
WHERE c.Cname=' ') t2
ON t1.Sid=t2.Sid
WHERE t1.score>t2.score;
構想解析:「国語」の課程が「数学」の課程より成績の高い学生の情報と課程点数を検索するため、返されるのはやはり学生の情報と課程点数、すなわちSid、国語成績、数学成績であるため、2枚の表を作ってそれぞれ学生の国語成績と数学成績、すなわちt 1とt 2を検索しなければならない.さらに学号に従ってこの2枚の表を内接続し、WHERE t 1に基づいている.score>t2.scoreこのフィルタリング条件は「国語」課程が「数学」課程より成績の高い学生の情報と課程点数を得る.
問題3の解答
SELECT s.Sid,s.Sname,AVG(sc.score) AS ' '
FROM
xiaoliu.s
INNER JOIN
xiaoliu.sc
ON s.Sid=sc.Sid
GROUP BY s.Sid,s.Sname
HAVING AVG(sc.score)>65;
構想解析:平均成績が65点より大きい学生のidと名前及び平均成績を調べるため、同じ学号に基づいて学生の名前を含む和学号のs表と課程成績を含むsc表を連結し、平均成績が65より大きいことからSidとSname及び平均成績を選出する