検索
連載

SQLの外部結合でデータを取り出すORACLE MASTER Bronze SQL基礎I 講座(7)

Oracleデータベースエンジニアとしての実力を証明するORACLE MASTER資格。その入り口であるBronze資格の取得は難しくない。本連載と、同時掲載中の連載「Bronze DBA講座」で合格を目指そう!(参考記事:「Oracle 10g対応のORACLE MASTERとは?」)

Share
Tweet
LINE
Hatena

 前回に引き続き、複数の表からデータを表示する方法について学びます。前回「SQLで複数の表からデータを取り出す」で、等価結合と非等価結合、内部結合を紹介しました。今回は外部結合を学びましょう。

理解しておきたいこと

1.確認しておきたい内容

  • 外部結合による、結合条件に一致しないデータの表示

2.外部結合

 外部結合は、結合条件を満たさないデータも含めて戻します。外部結合では、結合構文の違いによって、以下の結合タイプが使用できます。

左側外部結合 内部結合結果に加え、LEFT OUTER JOIN句の左側の表(FROM表)のすべての行を戻す
右側外部結合 内部結合結果に加え、RIGHT OUTER JOIN句の右側の表(JOIN表)のすべての行を戻す
完全外部結合 内部結合結果に加え、FROM表とJOIN表のすべての行を戻す

 それぞれの結合構文は以下のとおりです。これらは内部結合同様、ANSIで規格化され、SQL1999構文と呼ばれます。

・左側外部結合

 SELECT 列名リスト FROM 表名1 LEFT OUTER JOIN 表名2 ON(結合条件);

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 最後の1行が、外部結合によって左側の表(FROM表)であるdept表から戻された行です。

・右側外部結合

 SELECT 列名リスト FROM 表名1 RIGHT OUTER JOIN 表名2 ON(結合条件);

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 左側外部結合の例と結果は同じですが、最後の1行は、外部結合によって右側の表(JOIN表)であるdept表から戻された行です。

・完全外部結合

 SELECT 列名リスト FROM 表名1 FULL OUTER JOIN 表名2 ON(結合条件);

 デフォルトのemp表では完全外部結合のイメージがわきにくいので、1行追加してテストします。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 最後の2行が、完全外部結合によってemp表とdept表から戻された行です。この例のように、結合キー列がNULL値の場合も結合はできません。その場合、外部結合を行うことで結果に含めることが可能になります。

 今回はON句を使用した構文と例を紹介しましたが、外部結合でもNATURAL JOIN句(自然結合)、USING句を使用することができます。

問題

■問題1

外部結合を使用する処理を2つ選択しなさい。

a.両方にNULL値が含まれている
b.片方に含まれないデータも取得する必要がある
c.両方に含まれるデータも含まれないデータも取得する必要がある
d.両方に含まれるデータのみ取得する必要がある
e.主キーと外部キーの関係がある表からデータを取得する

正解:a、c

■解説

 前回の宿題にした問題です。外部結合は、結合条件に一致しないレコードも同時に出力するためのものです(正解c)。一致しない原因としては、結合キーにNULL値がある場合(正解a)、他方に含まれない結合キー値が存在する場合があります。

 そのほかの選択肢の不正解の理由は次のとおりです。

選択肢b:外部結合には、結合条件に一致しないデータのうち片方の表のデータを取得する左側外部結合と右側外部結合、両方の表のデータを取得する完全外部結合がありますので、説明として不十分であると思われます。

選択肢d:両方に含まれるデータのみ取得するには、内部結合を使用します。

選択肢e:結合を行えるのは、表に主キーと外部キーの関係が存在する場合に限りません。非等価結合を使用すれば、同じ値が含まれていなくても結合することができます。また、非等価結合でも内部結合、外部結合を行うことができます。

■問題2

どのようなときに完全外部結合を使用するとよいでしょうか。

a.1つの表のみに一致しない行が含まれている
b.NOT NULL設定されている表である
c.両方の表に一致する行が含まれている
d.両方の表に一致しない行が含まれている

正解:d

■解説

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る