表の結合

実践オラクルデータベース構築・運用

オラクルデータベース構築オラクルデータベース運用SQL書式PL/SQL書式Oracle Master試験

TOP SQL書式

表の結合


スポンサードリンク
スポンサードリンク


表の結合



表は一般的に正規化されているため、複数の表の情報を合わせて検索した時は、2つ以上の表の情報に問い合わせる(SELECT)必要があります。これを結合といいます。FROM句に2つ以上の表名を指定すること結合が行われます。これを直積演算といいます。


◎自然結合
Oracle独自の結合方法では、結合列を明示的に指定しなければなりません。しかし9iからSQL:1999構文をサポートしているため「NATURAL JOIN」句を使用することができ、結合列を明示的に指定する必要がなくなりました。

「NATURAL JOIN」句を使用する場合の注意点

両方の表で同じ名前を持つ列に関してのみ結合が行われる。
共通の列が複数存在すれば、それらがすべて結合に使用される。
共通の列が複数存在し、その中で特定の列のみを結合条件として使用したい場合はUSING句を使用する。
列の名前は共通だがデータ型がことなる場合はUSING句を使用する。
「NATURAL JOIN」句とUSING句は一緒に使用できない
結合列は、表名または別名で修飾してはいけない
表別名を指定した場合、SELECT句、WHERE句、ON句において表名ではなく表別名を指定する必要があります。



使用例)[NATURAL JOIN]の使用例とUSING句を用いた自然結合使用例
SQL> SELECT * FROM TEST3;

NUM NAME  NO
---  --    ----------
111  AAA   10
222  BBB   20
333  CCC   30
444  DDD   10

SQL> SELECT * FROM TEST4;

NO PLACE
---------- ----------
10       TOKYO
20       OSAKA
30       HUKA

SQL> SELECT NO,PLACE,NAME,NUM
2 FROM TEST4
3 NATURAL JOIN TEST3;

NO       PLACE    NAME NUM
---------- ---------- ------ ----------
10       TOKYO     AAA 111
20       OSAKA     BBB 222
30       HUKA      CCC 333
10       TOKYO     DDD 444


SQL> SELECT NO,PLACE,NAME,NUM
2 FROM TEST4 JOIN TEST3
3 USING (NO);

NO       PLACE    NAME NUM
---------- ---------- ------ ----------
10       TOKYO     AAA 111
20       OSAKA     BBB 222
30       HUKA      CCC 333
10       TOKYO     DDD 444





◎クロス結合
クロス結合は、デカルト積(直積)を結果として表示し、行のすべての組み合わせが表示されます。デカルト積の結合は通常は役に立ちませんが、テストなどの際に使用することがあります。特徴として、結合条件が無効になり、省略されます。またクロス結合では、両方の表に存在する列は、表名を修飾する必要があります。


使用例)[CROSS JOIN]の使用例
SQL> SELECT TEST3.NO,PLACE,NAME,NUM
2 FROM TEST4
3 CROSS JOIN TEST3;

NO PLACE NAME NUM
---------- ---------- -------------------- ----------
10 TOKYO AAA 111
20 TOKYO BBB 222
30 TOKYO CCC 333
10 TOKYO DDD 444
10 OSAKA AAA 111
20 OSAKA BBB 222
30 OSAKA CCC 333
10 OSAKA DDD 444
10 HUKA AAA 111
20 HUKA BBB 222
30 HUKA CCC 333
10 HUKA DDD 444

12行が選択されました。





ON句を使用した結合
自然結合の場合は、結合条件は基本的に同じ名前のすべての列の等価条件です。そこで結合列の名前が異なる場合や任意の条件(非等価)をしていする場合はON句を指定します。ON句を使用するとWHERE句には検索条件のみを指定すればよい。またWHEREのかわりにANDを使用しても良い。NATURAL JOIN句ではWHEREは指定できるがANDは指定できない。

SQL:1999では、一致する行のみを戻す結合を内部結合といいます。内部結合の結果をもとに、左側の表の持つ一致しない行を戻す結合を左側外部結合といい「LEFT OUTER JOIN」句をしようします。また右側の表の持つ一致しない行を戻す結合を右側外部結合といい、「RIGHT OUTER JOIN」句を使用します。Oracle独自構文、右側もしくは左側を結合条件のところで(+)を付けることで同様の機能を備えます。



スポンサードリンク

リンク集 / 免責事項サイトマップ問い合わせ
Copyright (C) 2012  実践オラクルデータベース構築・運用  All rights reserved