MySQL入門

外部結合(LEFT JOIN / RIGHT JOIN)

全333コースを10日間無料で

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
集計を行う場合、通常のリレーションではデータがない項目については表示されなくなってしまいます。これは「内部結合」と呼ばれる結合の方法のためです。ここでは、商品がないジャンルも表示できるようにする「外部結合」を利用してみましょう。
講師:
06:56

字幕

ここでは外部結合というものについて 紹介していきたいと思います まずは実際に操作をしながら その外部結合とは何か ということを紹介していきます ではここでは mydb という データベースを準備し genre_master にはこのような ジャンルの一覧 item_table には このような商品の一覧を準備しました もしまだデータベースなどが作成できていない という場合には こちら スタートページから phpMyAdmin で 「データベース」を選んで頂いて ここに mydb と入れ 照合順序で utf8_general_ci を選んで 作成して下さい そして作ったデータベースを選んで 「インポート」から こちらファイルを選択して 今回は lesson_03_12 という ファイルがありますので これをインポートしてご利用下さい では説明を始めていきます まずここではリレーションを貼った 集計というものを行ってみましょう 例えば select としまして ここでは genre_master の短縮名を この後つけますので g . genre_name そして i . count を sum しましょう from としては genre_master g と item_table i になります そして where を必ず つけてあげる必要があります g . id と i . genre_id を 接続します 最後に group by として i . genre_id でグループを作りましょう ではこちらで集計をしてみます するとこのように「くだもの」が 29 件 「野菜」が 10 件という結果がでました しかし実はこれ 少し正しくないものがあります 何かというと こちら genre_master のほうを見ますと 実はこちらの genre には もう1つ「菓子」という項目がありました しかし今 group by をしてしまうと その「菓子」というのは 存在自体がなくなってしまいます 今使っているリレーションのことを 内部結合と言い この内部結合はお互いにデータがないと 一方のデータは存在しないものと みなされてしまうという 性格があります つまり今ここでは item_table に「菓子」の情報が 一件もないために 1つも売れていないということで 本来であれば「菓子」というのも 検索結果としてはでてきて それでいて count の所に データがないというのが最も正しいのですけど ここでは内部結合を使っている限り そのようなことができません そこで この「菓子」が 0 である 売れていないということを示すのを 使うためには外部結合という 結合の仕方を使う必要があります 実際にやってみましょう まず select の部分は 全く同じです g . genre_name と i . count を sum したもの というのになります そして from の書き方が これまでとかなり変わってくるのですけど まずここでは genre_master とし g という短縮名を付けます そして先ほどまでここでは カンマで区切って同列として item_table を並べていましたが ここでは left join と記述します そして item_table i と記述します この left join が 外部結合と言われるものです そして外部結合する場合には この後に on と記述します そしてここに結合の条件を記述します つまり g . id=i . genre_id という記述の仕方です そして後はまた同じになります ここでは where 句は必要ありません where 句が必要だったのは 内部結合の場合のみです 内部結合では この on という記述の後で その結合の仕方というのが示されているため ここでは group として i . genre_id としてしまって構いません ではこちらで実行してみましょう すると このように 「菓子」というのがでてきて これが null つまりデータがない ということがわかります 「くだもの」が 29 件 「野菜」が 10 件という形で ここは変わりません この left join というのを使うと この g genre_master と item_table を左側から接続する という意味になります これは この genre_master というのが 基準となるというような意味で この genre_master にあるデータは 結合できようができまいが 基本的にはすべての件数を 表示する という形になります もう1つ実はここには right join という 右側から左側に向かって結合する という方法もあるのですが 基本的には left join さえ覚えておけば 左側に全件数を出したいもの 右側にそれに付随するもの というのを書くというルールで left join だけでまかなうことも 基本的にはできます これが外部結合という書き方です 内部結合と書き方がかなり異なりますが 実は内部結合の場合も もっとこれに近い書き方ができます ここの left right の代わりに ここに inner と書きます これも実は先程の inner join 内部結合と同じ書き方になります どちらで書いても良いのですけど 少しこちらの書き方 こんがらがるかもしれませんので 一番こちらのレッスンの冒頭にあった カンマで区切って書く方法のほうが 内部結合は書きやすいかもしれません どちらで書いても基本的には 変わりませんので 書きやすいほうで書くと良いでしょう この外部結合というのを使うのは かなり頭がこんがらがりますが 使えると集計の時に非常に便利に 扱うことが出来ますので 是非書き方は覚えておくと 良いでしょう

MySQL入門

このコースではPHPとMySQLというデータベースを組み合わせたWebシステムを構築する手法について解説します。「データベースとはなにか」を説明したのち、プライマリーキーやリレーションなどの重要な用語についても解説しながら実際にデータベースを動かしていきます。

3時間14分 (29 ビデオ)
現在、カスタマーレビューはありません…
 
ソフトウェア・トピック
価格: 2,990
発売日:2013年12月31日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。