TOP > 結合!!!

結合!!!

人間、だれもが結合を求めています。一人きりでは何も出来ません。子供も出来ません.....

国民総番号制というのがありますが、そんな社会になるのでしょうか?いやだなー

 

ところで「愛がゆく」という漫画をご存じですか?? (漫画家小山ゆうの作品。詳しくはwikiを見てね)
この漫画の中で、おでこに番号が浮き出てくる訳です。で、早く死んでいく(=IQが低い為?)人たちは数字が小さいのです。主人公の育ての親、愛すべき「松ちゃん」はその番号が3なんです。
数値は低いが、カッコイイ!長島好きです。

 

話がそれました(^^;) ....
国民総番号制とかになったら、番号だけじゃその人の事はわからんちんども とっちめちん(by一休さん)なのです。で、名前とか知る為には他の台帳なんかを調べなければならないんですねぇ。

ま、そんな訳で番号と名前をひっつけていっぺんに知りたいな、という時「結合」をしたいです。
ああ...間違えた! もとい 「結合」を使います。

 

テーブルの基本的な「結合」

等価結合(内部結合)

国民番号テーブルと戸籍基本台帳テーブルがあるとして、両方のテーブルに存在する「国民番号」列で対応付けて1行にして、両方のテーブルのデータを表示したい場合に使うのよ。
対応する列同志を = で結びます。

select 国民番号,氏名 from 国民番号テーブル ,戸籍基本台帳テーブル
where
国民番号テーブル.国民番号 = 戸籍基本台帳テーブル.国民番号

両方のテーブルで合致する行がないと、行が返りませんよー

 

合致しないデータも結合しちゃうよ(外部結合)

国民番号テーブルにレコードがあるんだけど、戸籍基本台帳テーブルにレコードがない場合、外部結合を使います。
存在しないデータが有り得る方に  (+) をつけます。

select 国民番号,氏名 from 国民番号テーブル ,戸籍基本台帳テーブル
where
国民番号テーブル.国民番号 = 戸籍基本台帳テーブル.国民番号 (+)

逆ならば

select 国民番号,氏名 from 国民番号テーブル ,戸籍基本台帳テーブル
where
国民番号テーブル.国民番号 (+) = 戸籍基本台帳テーブル.国民番号

レコードがない方のテーブルの項目はNULLで返ります。

 

外部結合をするケースは設計上あるにはありますが、出来ればない方が好ましいのでしょうねー

 

ANSI対応の場合

上に書いた結合ですが、SQLの国際標準に対応してません。
(僕は上の書き方、好きですが!!)

で、内部結合には inner join 外部結合には outer join を使いましょう。

内部結合

select K.国民番号, S.氏名
from 国民番号テーブル K
inner join 戸籍基本台帳テーブル S
on (K.国民番号 = S.国民番号)

inner は省略OK

 

外部結合

上記の

select 国民番号,氏名 from 国民番号テーブル ,戸籍基本台帳テーブル
where
国民番号テーブル.国民番号= 戸籍基本台帳テーブル.国民番号 (+)

の場合

select K.国民番号, S.氏名
from 国民番号テーブル K
left outer join 戸籍基本台帳テーブル S
on (K.国民番号 = S.国民番号)

 

select 国民番号,氏名 from 国民番号テーブル ,戸籍基本台帳テーブル
where
国民番号テーブル.国民番号 (+) = 戸籍基本台帳テーブル.国民番号

の場合

select K.国民番号, S.氏名
from 国民番号テーブル K
right outer join 戸籍基本台帳テーブル S
on (K.国民番号 = S.国民番号)

(続く.... 2009.02.10)