表の結合
表は一般的に正規化されているため、複数の表の情報を合わせて検索した時は、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独自構文、右側もしくは左側を結合条件のところで(+)を付けることで同様の機能を備えます。
|
スポンサードリンク
|