見出し画像

【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は全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ