テーブルの結合は、技術者であれば様々な局面で使用することが多いですが、少し間が空いてしまうと、忘れることが多い自分のために、まとめておこうかと。。
まず、例として以下のようなテーブルを用意。
CREATE TABLE 売上
( "売上ROW_ID" NUMBER,
"売上日" DATE,
"顧客CD" VARCHAR2(4)
);
CREATE TABLE 顧客
( "顧客CD" VARCHAR2(4),
"顧客名" VARCHAR2(255)
);
各々のテーブルには以下のようにデータが入っていることにします。
①INNER JOIN
select * from 売上 inner join 顧客 on (売上.顧客CD = 顧客.顧客CD)
INNER JOINは、結合する両方のテーブルに存在するレコードを取得します。
②LEFT OUTER JOIN
select * from 売上 left outer join 顧客 on (売上.顧客CD = 顧客.顧客CD)
LEFT OUTER JOINは、左のテーブルのレコードを全て抽出したうえで、結合条件にしたがって、右の表のレコードを結合していきます。このとき、結合できない場合は、NULLとなります。
③RIGHT OUTER JOIN
select * from 売上 right outer join 顧客 on (売上.顧客CD = 顧客.顧客CD)
RIGHT OUTER JOINは、右のテーブルのレコードを全て抽出したうえで、結合条件にしたがって、左の表のレコードを結合していきます。このとき、結合できない場合は、NULLとなります。
下の結果で少し注意したいのは、売上テーブルには、「C001」という顧客CDをもつレコードが2件あるため、結果の行数も全3件になっていることです。
自分の覚え方
上記を見ても分かるように、OUTER JOINのLEFT、RIGHTは、どちらのテーブルを基準にするかを指定しています。
①「select * from 基準のテーブル」 で基準テーブルのレコードを全件抽出する。
⇒外部表(OUTER)、駆動表
{ LOOP
{
②上記で抽出したレコードに対して、結合条件に合致するレコードを
もう1つのテーブルから取得していく
}
END LOOP
}
のようになっているとイメージすると良いです。
つまり、①で、LOOPの外側(OUTER)となっているテーブルが基準となり、それを指定しているのがLEFTの方なのか、RIGHTの方なのかというわけです。
そのため、①の方のテーブルを「外部表」と言ったり、「駆動表」と呼んだりします。