HOME»データベーススペシャリスト平成22年春期»午前Ⅱ 問10
データベーススペシャリスト平成22年春期 午前Ⅱ 問10
問10
次のSQL文と同じ検索結果が得られるSQL文はどれか。
- [出題歴]
- データベース H28春期 問9
分類
テクノロジ系 » データベース » データ操作
正解
イ
解説
検証用に以下の2つの表を用意してそれぞれのSQL文の実行結果を考えます。設問のIN句を使用した問合せですが、次の手順で処理されます。
- 副問合せでTBL2からCOL1の射影を取得し、取得された値の集合(新宿,新宿,渋谷,渋谷)をIN句で比較対象を行う集合とする。
- TBL1の行を1行ずつ走査し、IN句の条件にマッチする行のみを選択する
- SELECT文によりCOL1列のみを切り出す
- UNIONは複数のSELECT文の結果の和集合を得る演算です。このSQL文は、TBL1のCOL1列とTBL2のCOL1列の和集合を得る問合せで、結果は以下のようになります。※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行目に対して偽を返す。
- TBL1とTBL2のCOL1、COL2の値が共に同じである行のみが選択され、COL1列が切り出されます。例に挙げた2表にこのSQL文を適用すると"結果なし"になります。
- LEFT OUTER JOINは左外部結合を指示する句です。左外部結合とは、基準となる左表の行を全て抽出し、右表からは左表の行と自然結合できる行のみを抽出する結合です。左表の行と結合する行が右表に無い場合は右表の列の値をNULLとして結合します。
例に挙げた2表をCOL1列で左外部結合した結果は次のようになります。この表からCOL1列が切り出され、DISTINCTで重複が取り除かれるためSQL文の実行結果は以下のようになります。