LoginSignup
1
1

More than 3 years have passed since last update.

Oracle Bronze SQL基礎I -結合-

Last updated at Posted at 2019-11-26

結合

全然頭に入らないので、整理。
表の結合を行う際に、表接頭辞として「表名」や「表別名」表別名を、
指定することによりパフォーマンスが向上する。
但し、同じ表の表接頭辞として「表名」と「表別名」は混在できない。

等価結合

2つの表の特定の列の値が必しいデータだけを取り出す結合

非等価結合

等号(=)以外の演算子を使用した結合

自然結合

自然結合は、2つの表に共通して存在する同名で同じデータ型の列に基づいて結合。
- 結合列に表接頭辞の使用不可
- 2つの表に共通して存在する列に基づいて結合を行う
- データ型の異なる同名の列がある場合はエラーとなる
- 結合条件は指定する必要なし(WHERE書き)
- 2つの表に同名で同じデータ型の列が複数ある場合はその組合せで結合

●NATURAL JOIN

自然結合のデフォルト。
結合条件が必要ない分、同じ名前の列名を無条件に結合させてしまうため、
希望通りの結合ができない場合がある。

また、NATURAL JOINとUSINGは一度の結合に同時に使用できない。
× FROM A NATURAL JOIN B USING(a_id);
〇 FROM A NATURAL JOIN B JOIN C USING(c_id);

anzuame1.sql
FROM '表名1' NATURAL JOIN '表名2';

●USING

自然結合では、同名でデータ型が異なる列を結合してしまい
エラーが起きるので、USINGを使用する。USINGは、
等価結合の1つなので、結合列を明示的に指定することができる。

USING句を使用する場合、結合列に表接頭辞は記述できない。
逆に、結合列以外の列名に表接頭辞を記述できる。

◎USINGを使う場合
- 結合する2つの表に同じ列名でデータ型の異なる列がある場合
- 結合する2つの表の一部の列を結合列として使用する場合
- 等価結合を行う場合

anzuame1.sql
FROM '表名1' JOIN '表名2' USING('結合列名1'[,'結合列名2',...]);

内部結合

JOIN ON (内部結合)

ON句を使用した結合では、自然結合やUSING句での結合とは、
異なり、列名が違っていいても結合列として指定することが可能。

anzuame2.sql
'表名1' JOIN '表名2' ON '結合条件';

3つ以上の表を結合する場合

anzuame2.sql
'表名1' JOIN '表名2' ON '結合条件'
JOIN '表名3' ON '結合条件' ... ;

CROSS JOIN (クロス結合)

クロス結合は、指定されている2つの表に登録されている行の
すべての組合せ(≒デカルト積)を返す。

同等データの取得には結合条件を指定しない結合結果が◎

anzuame1.sql
FROM '表名1' CROSS JOIN '表名2';
-- ▽置換
FROM '表名1', '表名2';

自己結合

己の表を己の条件式に用いて結合する。
NATURAL JOINとか内部結合とかいろいろやり方あるので割愛。

外部結合

結合条件を満たしたデータのみだけではなく、
条件を満たしていないデータも一緒に取り出す方法を外部結合という。

anzuame1.sql
FROM '表名1' [LEFT|RIGHT|FULL] [OUTER] JOIN '表名2' ON '条件式';

下記は、Oracle独特の書き方。
結合側に(+)を記述する。
※(+)...外部結合演算子

anzuame1.sql
FROM '表名1','表名2' 
WHERE ['表接頭辞1'.]'列名'[(+)] = ['表接頭辞2'.]'列名'[(+)]
[AND '結合条件以外の条件'];

なお、外部結合演算子は両側に指定することはできず、
指定された場合はエラーを返す。

LEFT [OUTER] JOIN

JOIN句の左側の表のデータをすべて取り出す

RIGHT [OUTER] JOIN

JOIN句の右側の表のデータをすべて取り出す

FULL [OUTER] JOIN

2つの表のデータをすべて取り出す

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1