その入り口であるBronze資格の取得は難しくない。});前回に引き続き、複数の表からデータを表示する方法について学びます。今回は外部結合を学びましょう。外部結合は、結合条件を満たさないデータも含めて戻します。加え、FROM表とJOIN表のすべての行を戻すそれぞれの結合構文は以下のとおりです。ON(結合条件);デフォルトのemp表では完全外部結合のイメージがわきにくいので、1行追加してテストします。OPERATIONS最後の2行が、完全外部結合によってemp表とdept表から戻された行です。この例のように、結合キー列がNULL値の場合も結合はできません。その場合、外部結合を行うことで結果に含めることが可能になります。JOIN句(自然結合)、USING句を使用することができます。■問題1外部結合を使用する処理を2つ選択しなさい。前回の宿題にした問題です。外部結合は、結合条件に一致しないレコードも同時に出力するためのものです(正解c)。一致しない原因としては、結合キーにNULL値がある場合(正解a)、他方に含まれない結合キー値が存在する場合があります。そのほかの選択肢の不正解の理由は次のとおりです。表のデータを取得する完全外部結合がありますので、説明として不十分であると思われます。■選択肢d:両方に含まれるデータのみ取得するには、内部結合を使用します。■選択肢e:結合を行えるのは、表に主キーと外部キーの関係が存在する場合に限りません。非等価結合を使用すれば、同じ値が含まれていなくても結合することができます。■問題2どのようなときに完全外部結合を使用するとよいでしょうか。外部結合が必要となるのは、通常、結合列にNULL値が含まれている行を戻したい場合や外部キーとして使用されていない行を戻したい場合です。完全外部結合は、結合条件に一致しないデータのうち、両方の表のデータを取得したい場合に使用します(正解d)。そのほかの選択肢の不正解の理由は次のとおりです。■選択肢a:1つの表だけの一致しない行を戻したい場合は、左側外部結合または右側外部結合を使用します。NULL設定をしているかどうかは関係がありません。外部結合は、結合条件に一致しない行も戻す結合です。■選択肢c:両方の表に一致する行のみを戻す結合は内部結合です。外部結合は内部結合結果に加え、一致しない行も戻す結合です。■問題3次の従業員表(EMPLOYEES)と部門表(DEPARTMENTS)、ロケーション表(LOCATIONS)の定義を確認してください。部門表DEPARTMENT_ID従業員表の主キーDEPARTMENT_NAMEMANAGER_IDLOCATION_IDロケーション表のLOCATION_IDを参照する外部キーロケーション表LOCATION_IDロケーション表の主キーSTREET_ADDRESSCITY所属する従業員が1人もいない部門や、ロケーションが不明な部門も表示する文を選択しなさい。部門番号が不明な従業員は表示しません。次のようなパターンで考えてみると分かりやすいでしょう。London出題の状況を満たすには、次のような結果が必要です。部門表の40の部門は、所属する従業員が存在しない(従業員表から参照されていない)レコードですが、結果に含めます。部門表の30の部門はロケーションが不明ですが、結果に含めます。従業員表の103の従業員は部門番号がNULLなため、結果に含めません。1と3を満たすには、従業員表と部門表を結合し、部門表のすべての行を使用します(右側外部結合)。次のような文で取得できます。Resources2を満たすには、部門表とロケーション表を結合し、部門表のすべての行を使用します(左側外部結合)。次のような文で取得できます。30この2つの問い合わせをまとめたものが正解aの文です。Londonそのほかの選択肢の不正解の理由は次のとおりです。■選択肢b:従業員表と部門表を左側外部結合した結果に、ロケーション表を右側外部結合しています。次の要素を満たしていません。1.所属している従業員が存在しない部門も結果に含める2.ロケーションが不明な部門も結果に含める■選択肢c:従業員表と部門表が左側外部結合になっているので、条件に一致しない従業員表のデータを戻し、部門表のデータは戻しません。次の要素を満たしていません。1.所属している従業員が存在しない部門も結果に含める3.部門番号がNULLの従業員は結果に含めない■選択肢d:ロケーション表が右側外部結合になっているので、次の要素を満たしていません。2.ロケーションが不明な部門も結果に含める■選択肢e:すべての表が完全外部結合になっているので、余計なレコードも表示されます。次の要素を満たしていません。3.部門番号がNULLの従業員は結果に含めないまとめ前回と今回の2回にわたって、複数の表からデータを表示する方法について解説しました。次の内容をチェックしておきましょう。JOIN句は同じ名前の列すべてを結合キーとし、USING句は一部の列だけを結合キーとする。次回は、「副問い合わせを使用した問い合わせの解決」を確認します。次の宿題を解いておいてください。1つのSELECT文で結果を表示するため、副問い合わせまたは結合を使用する必要があるタスクを2つ選択しなさい。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。