平成22年春期試験午前問題 午前Ⅱ 問10

午前Ⅱ 問10解説へ
次のSQL文と同じ検索結果が得られるSQL文はどれか。
10.gif

  • 10a.gif
  • 10i.gif
  • 10u.gif
  • 10e.gif
正解 問題へ
分野:テクノロジ系
中分類:データベース
小分類:データ操作
検証用に以下の2つの表を用意してそれぞれのSQL文の実行結果を考えます。
10_1.gif
設問のIN句を使用した問合せですが、次の手順で処理されます。
  • 副問合せでTBL2からCOL1の射影を取得し、取得された値の集合(新宿,新宿,渋谷,渋谷)をIN句で比較対象を行う集合とする。
  • TBL1の行を1行ずつ走査し、IN句の条件にマッチする行のみを選択する
  • SELECT文によりCOL1列のみを切り出す
TBL1の行のうち、COL1列の値が(新宿,渋谷)のいずれかである行は"氏名"が合田知子、川内聡の2行なので実行結果は以下のようになります。
10_2.gif
  • UNIONは複数のSELECT文の結果の和集合を得る演算です。このSQL文は、TBL1のCOL1列とTBL2のCOL1列の和集合を得る問合せで、結果は以下のようになります。
    10_3.gif
    ※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列が切り出されるため結果は以下のようになります。
    10_4.gif
    IN句とEXISTS句では処理の手順が異なりますが、このケースではどちらもTBL1とTBL2でCOL1の共通部分集合が返されることになります。したがって正解です。
  • TBL1とTBL2のCOL1、COL2の値が共に同じである行のみが選択され、COL1列が切り出されます。例に挙げた2表にこのSQL文を適用すると"結果なし"になります。
  • LEFT OUTER JOINは左外部結合を指示する句です。左外部結合とは、基準となる左表の行を全て抽出し、右表からは左表の行と自然結合できる行のみを抽出する結合です。左表の行と結合する行が右表に無い場合は右表の列の値をNULLとして結合します。

    例に挙げた2表をCOL1列で左外部結合した結果は次のようになります。
    10_5.gif
    この表からCOL1列が切り出され、DISTINCTで重複が取り除かれるためSQL文の実行結果は以下のようになります。
    10_6.gif

この問題の出題歴


Pagetop