🆙
【SQL】応用情報:平成28年秋期(午前:問29)解説画像とDDLとDML
すごくピンポイントですが
今回はお試し企画です。
まずは経緯をお話します。
経緯
私は 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
Discussion