ここから本文です

このSQLが難しくて読めません。分かりやすく解説をお願いします。

アバター

ID非公開さん

2018/9/1509:54:09

このSQLが難しくて読めません。分かりやすく解説をお願いします。

追試の対象となる学生を表示するため、次に示すSQL文を実行する。ここで、追試の対象となる条件は、成績表に全科目のうら1科目でも点数が登録されていない科目があること、又は全科目の点数のうち1科目でも70点末満の科目があること、その少なくともいずれか一方を満たす場合とする。

SELECT C. クラス名,G. 学生番号,G.学生氏名FROM 学生表G,クラス表C
WHERE G. クラスID = C. クラスID
AND G. 学生番号 NOT IN (
SELECT S. 学生場合
FROM 成績表 S
GROUP BY S. 学生番号
HAVING COUNT(*) = (SECECT COUNT(*) FROM 科目標)
AND MIN(S.点数) >= 70 )
ORDER BY G. クラスID,G. 学生番号

SECECT COUNT,having count,ORDER BY G,GROUP BY S,SELECT C,S GROUP BY S,クラス表C WHERE G

閲覧数:
82
回答数:
1

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

原沢信道さん

2018/9/1510:31:29

まず、サブクエリを解読します。
(SELECT S. 学生場合 FROM 成績表 S GROUP BY S. 学生番号
HAVING COUNT(*) =
(SECECT COUNT(*) FROM 科目標)AND MIN(S.点数) >= 70 )
学生番号単位にグループ化し(SECECT COUNT(*) FROM 科目標)と件数が一致している物ですので、全教科が登録されている人で且つ「MIN(S.点数) >= 70」で最低点が70点以上の人ですので、これで追試の必要の無い人を検索しています。それを「NOT IN」で判定しているので、追試の必要な人が検索出来ます。
「学生表G,クラス表C WHERE G. クラスID = C. クラスID」で二個のテーブルを結合し同じクラスIDの行のみ抜き出しています。」、「ORDER BY G. クラスID,G. 学生番号 」でこの順番で表示します。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる