質問: b.kind とした場合、 no|kind|name|data| ------------------ 1|1 |a |10| 2|1 |c |null| となるのであれば納得いくのですが、 結果は↓なるようです。 no|kind|name|data| -------------------------- 1|1 |a |10| (+)を一つも付けてない場合と 同じ動作になるようです。 テーブルaとテーブルbを結合するとき、 「外部結合する場合はwhere句で指定する選択の条件全てに(+)を付ける」 「外部結合をしない場合はwhere句で指定する選択の条件全てに(+)を付けない」 であれば、カラム毎に外部結合演算子を指定する意味が無いと思うのですが。 どなたか、カラム毎に外部結合演算子を指定する意味をご教授下さい。 宜しくお願いします。
回答: oracle 社がなぜそのようなルールを決めたのかは分かりませんが、sql99 標準では外部結合について記述があり、oracle 9i 以降ではこれをサポートしています。 > select a.no, a.kind, a.name, b.data > from a,b > where a.no = b.no(+) > and a.kind = b.kind これを sql99 標準の書き方に直すと select a.no, a.kind, a.name, b.data from a left outer join b on a.no = b.no and a.kind = b.kind となります。この書式では from 句のところに、結合方法や結合条件について書かれていますね。 外部結合時に (+) をつけるのは oracle 社の独自仕様であり特別な理由については深く追求されない方がよいかと思います。少なくとも、この書き方が sql99 標準に取り込まれなかったのは、標準化団体にこの書き方が望ましくないと判断されたからでしょう。