『基礎からの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)へ
情報処理再チャレンジブログ ホーム へ
から得たぜひ覚えたい個所を列挙した。 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)へ
情報処理再チャレンジブログ ホーム へ