Agent Grow Tech Notes
🆙

【SQL】応用情報:平成28年秋期(午前:問29)解説画像とDDLとDML

2025/03/03に公開

すごくピンポイントですが

今回はお試し企画です。
まずは経緯をお話します。

経緯

私は YouTubeで過去問解説 をしているのですが、今までは公開されているPDFを紙に印刷して、手書きしたものを撮影していました。
ただ、印刷代や環境への配慮を考えると、画像やデータでも出来るようにしないといけない。
そう思って始めたところ、あることに気付きました。

これ、ブログにも流用できるのでは?!」と。

そういうわけで

結構古い過去問で且つ午前問題の1問だけですが、挑戦してみたいと思います。

今回のサンプル

今回はこちらの過去問を使い、解説をします。
※出典:平成28年度 秋期 応用情報技術者試験 午後 問題冊子

解説に使った画像

ここでは特に解説しませんが、赤と青でマークした場所を辿れば分かるのではないかと思われます。
正解は『イ』です。

記事の目的

解説はYouTubeでやっています(※公開は少し先になりますが)
この記事では『SQLを共有する』ことが目的です。
「実際に動かしてみたいけど、テーブル定義から全て自分で作るのは面倒」
という人に、簡単に試してもらいたいのです。

SQLを動かそう!

PostgreSQLで書きますので、よろしければ試してみてください。
※簡単に試す方法はこちらの記事を参考にして下さい。

まず、テーブル定義とデータを作ります。

-- 試験問題からSQLを書いてデータを作成し検証する
-- ※PostgreSQLに対応

-- 【出典】応用情報技術者試験(平成28年 秋期)午前:問29
-- https://www.ipa.go.jp/shiken/mondai-kaiotu/2016h28.html#aki_ap

-- ◆事前準備 ---------------------------------------------------
-- テーブル『サッカーチーム』を作成
CREATE TABLE サッカーチーム  (
 チーム名 CHAR(1) PRIMARY KEY -- 主キー
);
-- テーブル『審判』を作成
CREATE TABLE 審判 (
 氏名 VARCHAR PRIMARY KEY -- 主キー
,所属チーム名 CHAR(1) REFERENCES サッカーチーム(チーム名) -- 外部キー
);
-- 『サッカーチーム』のデータを作成
INSERT INTO サッカーチーム VALUES 
 ('X')
,('Y')
,('Z');
-- 『審判』のデータを作成
INSERT INTO 審判 VALUES 
 ('佐藤健太','X')
,('鈴木翔太','Y')
,('高橋拓也','Z');

では、データ抽出のDMLと設問の選択肢を作ります。

-- 【実行して結果を表示したいSQL】
SELECT 
      A.チーム名 AS 出場チーム1
    , B.チーム名 AS 出場チーム2
    , C.氏名 AS 審判氏名 
-- つまりCROSS JOIN(直積)である
FROM  サッカーチーム AS A
    , サッカーチーム AS B
    , 審判 AS C 
WHERE A.チーム名 < B.チーム名
AND --[a]←ここを選択肢と差し替える
;
/*
-- 設問の選択肢([a]に入れるもの)
-- 【ア.】
(A.チーム名 <> C.所属チーム名 OR B.チーム名 <> C.所属チーム名)
-- 【イ.】
C.所属チーム名 NOT IN (A.チーム名,B.チーム名)
-- 【ウ.】
EXISTS
    (SELECT * FROM 審判 AS D WHERE A.チーム名 <> D.所属チーム名
     AND B.チーム名 <> C.所属チーム名)
-- 【エ.】
NOT EXISTS
    (SELECT * FROM 審判 AS D WHERE A.チーム名 <> D.所属チーム名
     OR B.チーム名 <> C.所属チーム名)
*/

それでは

ひと通り用意しましたので、色々編集したり試しながら学んでみて下さい。
特に、不正解の選択肢【ウ.】【エ.】は相関サブクエリですので、完全に理解できるとかなり実力がつきます

では、今回は以上です。
ここまでお付き合い頂き、ありがとうございましたm(_ _)m

Agent Grow Tech Notes
Agent Grow Tech Notes

Discussion