2012年5月26日土曜日

『基礎からのMySQL』 西沢夢路著 (ソフトバンククリエイティブ) 
から得たぜひ覚えたい個所を列挙した。 Part4




(p200) 複数のテーブルのすべてのレコードを表示する(外部結合)。


・内部結合(inner join) 売上テーブル、社員情報テーブルで
 キーが一致しているレコードのみを取り出す。
・外部結合(outer join) 売上テーブル、社員情報テーブルで
 キーが一致していなくても一方のテーブルのレコードは
 すべて取り出す。


外部結合には、結合するときにどちらのテーブルをすべて
取り出すかによって、次の2種類がある。

・左外部結合(left join)
・右外部結合(right join)

左と右はどこで指定しているの?
→select命令で指定している!!


select カラム名 from 左のテーブル
left join 右のテーブル
on 結合条件


select  *  from  tb
left  join  tb1
on  tb.bang  =  tb1.bang


※from 直後で指定しているテーブルが左テーブルですね。


テキストの例だと、左のテーブルにA107(bangフィールド)が
存在するが、右のテーブルには存在しない。
よって、A107の namaフィールド にはNULLが表示される。


右外部結合の場合は、右テーブルにのみ存在する”西沢”
さんのレコードに該当する情報が左テーブルには存在しない
よって、左テーブルが持つ売り上げのフィールド部分は
NULLと表示される。



(p207)COLUMN OUTERを付けた表記

left  join は left  outer  join と記述できる。right も同様。
outer だけの表記はできない。
必ずleft ・ rightを指定する。






(p208) 自己結合


 自己結合の概念がいまいち理解できない。
社員情報テーブル(tb1)の 5件のレコードそれぞれに
社員情報テーブルの1件目のレコードを結合させ表示し
次に、
社員情報テーブルの 5件のレコードそれぞれに
社員情報テーブルの2件目のレコードを結合させ表示し

最終的にレコードの件数分 繰り返し、
レコードの件数 × レコードの件数 分のレコードを
持つ view を作り上げる。


これまでは、bangフィールドなどで同一の値を持つ
フィールドでレコードを結合させていたが、ここでは
存在するレコードの数だけ  ただ  組み合わせている
意味が分からない。

p211までの説明では、順位づけを実現する為の手段
であるように記述されているが、すっきりしない。

p213までの説明を読んでも、自己結合について理解
できない。また、p213の結果もなぜこのように表示される
か理解できない。 
















MySQL ぜひ覚えたい 関数 式 句 などの覚書(Part3)へ

MySQL ぜひ覚えたい 関数 式 句 などの覚書(Part5)へ






情報処理再チャレンジブログ ホーム

0 件のコメント:

コメントを投稿