メインコンテンツへスキップ
見出し画像

【FE8問】SELECT文以外のSQL問題(基本情報技術者試験)

    令和06年06月から平成21年までの全ての試験問題を分析して、SQL問題は22問ありました。

    >前回は基本となる14問<を扱ったので、今回は残り8問。

    SELECT文以外のSQL文が出てきます。

    知ってて損ない知識ですが、旧FEの午後問題にはDBがありましたが、現FEの科目Bにはありません。今回分は切っても大丈夫です。

    とはいえ、今回の問題はAPやDBでも流用されています。一度正解できるようになってしまえば、息長く得点源になってくれます。

    それでは始めましょう!


    このNoteは、私がIP~高度(DB)まで独学合格した経験と、IT専門学校でした授業ノウハウに基づいて作っています。


    選択と射影は「選行」主婦と覚える


    画像
    基本情報技術者試験 平成25春年問27

    正答はウ。

    A1, A2, A3は「列」を選んで出力しているので「射影」。WHERE句でA4列が"a"である「行」を選んで出力しているので「選択」。(選行主婦と覚える)

    >ITパスポートのデータベース解説Note2




    画像
    基本情報技術者試験 平成24年春問31

    正答はウ。

    • ア:結合:複数の表を連結させる操作

    • イ:差:ある表から、別の表の行と一致するものを抜く操作

    • ウ:射影:表から列を取り出す操作。「選択」は行を取り出す操作(選行主婦と覚える)。

    • エ:直積:2つの表の全ての行ペアを作る操作。2行と3行の2表なら、6行の表が出力されます(2×3)。




    副問合せ・相関副問合せ


    画像
    基本情報技術者試験 平成26年春問28

    正答はエ。

    IN句による副問合せ。

    最終的には、IN(001, 003, 004)のように在庫表にある商品番号が羅列されます。

    今回は、NOT IN(001, 003, 004)のように「NOT」があるので、在庫表にないものが商品表から出力されます。たぶん002ですね。


    EXISTS句は相関副問合せ。

    主問合せしている表(商品表)から1行取り出して、EXISTSを処理していきます。


    ウを例に解釈してみます。

    SELECT 商品番号 FROM 商品
     WHERE EXISTS (SELECT 商品番号 FROM 在庫 WHERE 商品.商品番号 = 在庫.商品番号);

    1. 商品表から1行読み込む

    2. EXISTS内:

      1. 商品表の商品番号 = 在庫表の商品番号となる行があるか探す

        1. あったらEXISTS句が真を返し、WHEREが成立し、主問合せの通り商品番号が表示

        2. なかったらEXISTS句が偽を返し、WHEREが成立せず、主問合せの出力なし

    3. 1に戻り商品表から次の1行を読み込む

    以上のようになるので、商品表にも在庫表にもあった商品番号が出力されます。


    正答のエでは、NOT EXISTSになっているので、商品表にあって在庫表にはない商品番号が出力されます。

    >データベーススペシャリストの解説Note(副問合せ・相関副問合せ)




    DELETE文 | デッドロックした場合


    画像
    基本情報技術者試験 平成25年秋問31

    正答はイ。

    DELETE文は、データを削除します。

    問題文のSQL文では、商品コードB020の行を削除しようとしています。

    しかし、デッドロックによって処理が進みません。

    デッドロックとは他のSQLと表の取り合いになって、お互いが動けない状態。

    画像
    >データベーススペシャリスト解説Noteより

    例えば、ドライバーとネジが必要な作業で、Aさんがドライバーだけ確保、Bさんがネジだけ確保した場合、お互いにネジ待ち・ドライバー待ちの互い違いになって作業を進められません。これがデッドロックです。

    デッドロックが起こって、一定時間したら「タイムアウト」と云って「なかったこと」にします。データを処理途中にせず、作業前の状態に「ロールバック」します。

    よって、問題文の商品表は何も作業されていない元の状態。つまりイが正答です。




    UPDATE文 | 制約に違反しないように


    画像
    基本情報技術者試験 平成22年秋問31

    正答はエ。

    CREATE TABLE文は、表を作るSQL文。項目名とデータ型(数値なのか文字なのかなど)、そして項目にかける制約(一意制約など)を設定して、表を作ります。

    UPDATE文は、表のデータを更新します。追加ではなく、既に存在している行について操作します。なお、データの追加はINSERT文。

    データを追加・変更する時は、表の定義に従っていないと処理が進みません。例えば、単価列はINT(整数値)なので、文字列は入れられません。

    末尾のPRIMARI KEY(商品番号)は「商品番号に主キー制約をかける」というもの。主キー制約は、一意制約(重複NG)と非NULL制約(空欄NG)です。

    では各UPDATE文を考えていきます。

    • ア:商品番号S001の行の商品番号をS002にすると、商品番号S001が2行存在するようになります。商品番号は主キー制約がかかっているので違反。

    • イ:商品名がCの行は2行あります。S004とS005がS006に変更sれるとS006が2行あり、主キー制約に違反。

    • ウ:商品番号をNULLに更新するのは、主キー制約に違反。

    • エ:商品番号S003の商品名をDに変更するのは問題ありません。商品名のCHAR(20)は20文字まで入れられます。

    >ITパスポートのデータベース解説Note3(キーと正規化)




    色々な結合 | 直積、和・差・積


    画像
    基本情報技術者試験 平成28年秋問28

    正答はア。

    直積とは、ある表の行に別の表の全てを結合する操作です。例えば3行の表と2行の表の直積をとると、3×2 = 6行の表になります。

    ア:正しい。なお、関係ある行だけ結合したい時は、「WHERE 表1.項目 = 表2.項目」と紐づける条件を加えます。
    イ:EXCEPTは差をとる操作です。表Rから表Sにある行を抜いて出力します。つまり表Rにだけある行だけが出力されます。
    ウ:UNIONは和を取る操作です。表Rと表Sをそのまま繋げます。表Rに2行、表Sに3行あれば、2+3=5行の表ができます。
    エ:INTERSECTは積を取る操作です。表Rにも表Sにもある行だけが出力されます。

    過去問道場さんでは具体的なデータで説明をしてくれてます。

    EXCEPTは出たことはありますが、他も含めて「学習カロリーが高いなぁ」と思ったら覚えなくて良いです。基本問題が解けるだけで充分なので。>データベーススペシャリストの解説Note(EXCEPTが1問だけ出た)




    ビュー | 2つのご利益


    データベースは第三正規形を満たすように、たくさんの表(実表)で構成されています。

    よくある処理にて、毎回結合すると負荷がかかってしまうので、予め結合した仮の表(ビュー)を用意しておくと負荷を軽減できます。

    またセキュリティ的なメリットもあります。処理に必要な必要最低限の情報だけをビューに載せます。実表にアクセスさせないので、不必要なデータは見られませんし、不正に更新・削除もされません。

    ビューには、負荷面とセキュリティ面のご利益があるんです。




    画像
    基本情報技術者試験 平成21年春問33

    正答はエ。


    • GRANT:ユーザーのデータベース(表)へのアクセス権限の設定。SELECT(抽出), INSERT(追加), UPDATE(更新), DELETE(削除)

    • INSERT:表にデータを追加。

    • SCHEMA:覚えなくて良いです。DBで一瞬でた程度。データベース内で更に名前によって分ける時に使います。

    • SELECT:SELECT文で作った表でビューを作っています。売上報告に5項目、AS後に5項目あることから推測できます。

    「ビューを作るときは、SELECT以外ありえない」と思っててもOKです。FEではその手段しか出ません。




    画像
    基本情報技術者試験 平成24年秋問29

    正答はア。

    CREATE VIEW文でビューが作成されますが、WHERE句によって「売値 - 仕入値 >= 40000」の商品だけがビューに記載されます。

    商品表の売値・仕入値・売値-仕入値の状況は以下。

    • S001:150,000:100,000:50,000→OK

    • S003:200,000:170,000:30,000→NG

    • S005:140,000:  80,000:60,000→OK

    S001とS005の2行が、ビューに記載される状態でした。

    設問文で問われている、ビューの行数が減少する処理を考えます。

    • ア:S001:130,000:100,000:30,000→NGになる

    • イ:S003:200,000:150,000:50,000→OKになる

    • ウ:S005:130,000:  80,000:50,000→変わらずOK

    • エ:S005:140,000:  90,000:50,000→変わらずOK

    アだとS001がビューに載らないので2行から1行に減ります。

    イではS003が載るので2行から3行に増え、ウとエでは2行のままで変わりません。


    次にお会いするのは「APで出たSQL問題」かもしれません(未定)。


    p.s. 普段は >> 専門学校とIT就職のブログ << をやってます。

    でわでわ(・ω・▼)ノシ


    この記事が参加している募集

     
     
    大学・専門学校の先生の解説Note。 学生時代にITパスポート試験・基本情報技術者試験・応用情報技術者試験を独学で高得点合格。情報処理安全確保支援士試験(セキスペ)・データベーススペシャリスト試験・ネットワークスペシャリスト試験・G検定なども取得。 2027年にPD-S受験予定。