こんにちは、SAWAです。
前回は3つのテーブルを使用し、「内部結合」について説明しました。
今回は、同じく3つのテーブルを使用し、「外部結合」について説明します。
まず、定義です。
●外部結合(OUTER JOIN)
2つのテーブルを結合した際、2つのテーブルの項目の値が同じデータだけでなく、
どちらかのテーブルにだけ値があるデータも抽出する。
●内部結合(INNER JOIN) 2つのテーブルを結合した際、2つのテーブルの項目の値が同じデータのみを抽出する。 |
次に具体的に見ていきましょう。
前回、作成したクエリ「内部結合」をコピーして、「外部結合テスト」という
クエリを作りましょう。
作成した「外部結合テスト」をデザインで開き、
「区分明細情報」テーブルを削除します。
この状態でクエリを実行しましょう。
すると、下図のように3件のデータが抽出されます。
内部結合で部署コードをキーとして結合しているので、
「社員番号:4」のレコードは部署コード:04」ですが、
「部署情報」テーブルに「部署コード:04」が無いので抽出されません。
それでは、外部結合を使用し、「社員番号:4」のレコードも抽出するように
クエリを修正しましよう。
①「外部結合テスト」クエリをデザインビューで開きます。
②下図のように、キーを結んでる線の上でダブルクリック。
「結合プロパティ」の画面が開くので、
「2:社員情報の全テーブルと部署情報の同じ~」を選択し、「OK」をクリック。
③クエリを実行し、結果を確認する。
上の図でも分かるように、内部結合時には抽出されなかった社員番号=4のデータが
表示されており、②の結合プロパティの意味がお分かりになって頂けたかと思います。
経験上ではありますが、外部結合を使うケースとしては以下のような場合があります。
・元となるテーブル(今回で言えば社員情報)のデータを取りこぼさないようにしたい時
・社員番号=4のように、部署名が空白(NULL)で抽出されることを利用して、
プログラムで空白(NULL)の場合は別の処理をさせたい時。
<ちなみに>
以前に書きましたコラム「クエリ)」のところで出てきたSQLでいいますと、
外部結合は左外部結合(LEFT JOIN)と右外部結合(RIGHT JOIN)があります。
この左・右の定義は、元とするテーブルが左側にあるか、右側にあるかの違いです。
今回使用したクエリを SQLビューで見ると以下のように書かれています。
これを以下のように変えても、右側の社員情報テーブルを元にする右外部結合になるので
一緒の結果が得られます。
以上で、外部結合の説明とさせていただきます。
次回からは、フォームを使用しての社員情報のメンテナンス画面を作っていきます。
ありがとうございました。