データベーススペシャリスト平成28年春期 午前Ⅱ 問9

問9

次のSQL文と同じ検索結果が得られるSQL文はどれか。
09.png/image-size:303×31
  • 09a.png/image-size:368×30
  • 09i.png/image-size:368×49
  • 09u.png/image-size:368×48
  • 09e.png/image-size:368×31
  • [出題歴]
  • データベース H22春期 問10

分類

テクノロジ系 » データベース » データ操作

正解

解説

検証用に以下の2つの表を用意してそれぞれのSQL文の実行結果を考えます。
09_1.png/image-size:418×144
設問のIN句を使用した問合せですが、次の手順で処理されます。
  • 副問合せでTBL2からCOL1の射影を取得し、取得された値の集合(新宿,新宿,渋谷,渋谷)をIN句で比較対象を行う集合とする。
  • TBL1の行を1行ずつ走査し、IN句の条件にマッチする行のみを選択する
  • SELECT文によりCOL1列のみを切り出す
TBL1の行のうち、COL1列の値が(新宿,渋谷)のいずれかである行は"氏名"が合田知子、川内聡の2行なので実行結果は以下のようになります。
09_2.png/image-size:306×94
  • UNIONは複数のSELECT文の結果の和集合を得る演算です。このSQL文は、TBL1のCOL1列とTBL2のCOL1列の和集合を得る問合せで、結果は以下のようになります。
    09_3.png/image-size:303×144
    ※UNION句では重複行は自動的に取り除かれます。重複行を含めた集合を得たい場合はUNION ALL句を使用します。
  • EXISTS句を使用した相関副問い合わせでは主問い合わせの表の1行ごとに副問い合わせが実行されます。例の2表の場合は以下の手順で比較が行われます。
    • 1行目のCOL1列の値"新宿"でTBL1とTBL2を自然結合する。結果は2行(存在する,EXISTS=true)なのでWHERE句は1行目に対してを返す。
    • 2行目のCOL1列の値"上野"でTBL1とTBL2を自然結合する。結果は0行(存在しない,EXISTS=false)なのでWHERE句は2行目に対して偽を返す。
    • 3行目の値"渋谷"でTBL1とTBL2を自然結合する。結果は2行なのでWHERE句は3行目に対してを返す。
    • 4行目の値"池袋"でTBL1とTBL2を自然結合する。結果は0行なのでWHERE句は4行目に対して偽を返す。
    条件にマッチした2行が選択され、COL1列が切り出されるため結果は以下のようになります。
    09_4.png/image-size:306×94
    IN句とEXISTS句では処理の手順が異なりますが、このケースではどちらもTBL1とTBL2でCOL1の共通部分集合が返されることになります。したがって正解です。
  • TBL1とTBL2のCOL1、COL2の値が共に同じである行のみが選択され、COL1列が切り出されます。例に挙げた2表にこのSQL文を適用すると"結果なし"になります。
  • LEFT OUTER JOINは左外部結合を指示する句です。左外部結合とは、基準となる左表の行を全て抽出し、右表からは左表の行と自然結合できる行のみを抽出する結合です。左表の行と結合する行が右表に無い場合は右表の列の値をNULLとして結合します。

    例に挙げた2表をCOL1列で左外部結合した結果は次のようになります。
    09_5.png/image-size:299×167
    この表からCOL1列が切り出され、DISTINCTで重複が取り除かれるためSQL文の実行結果は以下のようになります。
    09_6.png/image-size:58×123
© 2016-2024 データベーススペシャリストドットコム All Rights Reserved.

Pagetop