データベース初心者必見!入門編その8〜3つ以上のテーブルを結合する&選択と結合を同時に行う〜

2015/08/03

はじめに

今回は、入門編その1入門編その2入門編その3入門編その4入門編その5入門編その6入門編その7の続きです。

今回は3つ以上のテーブルの結合と、テーブルの結合と選択を同時に行う方法について紹介します。

3つ以上のテーブルの結合

ここまでは、2つ以上のテーブルを結合する構文を紹介してきました。

実務レベルでは、もっと多くのテーブルを結合して結果セットを取得することがあります。基本的には、2つのテーブルを結合して結果セットを結合する構文をマスターできれば、それ以上の結合も難しいものではありません。

例題として、goodsテーブルとcategoryテーブルをctg_id列を列結合として、さらにgoodsテーブルとmakerテーブルのmkr_id列を列結合するという3つの表の結合を行います。以下のイメージを参照して下さい。

「goodsテーブル、categoryテーブル、makerテーブル」

hyou2

hyou1

hyou8

 

この3つのテーブルの結合は、先にgoodsテーブルとcategoryテーブルを結合して取得した結果セットに、makerテーブルを結合するイメージです。

image

 

実際にSQLを発行してみましょう。

SELECT goods_name,ctg_name,mkr_name
        FROM goods INNER JOIN categroy USING (ctg_id) 
         INNER JOIN maker USING (mkr_id)

実行結果

hyou7

結果セットには、goodsテーブルの情報であるgds_name列、categoryテーブルの情報であるctg_name列、maker列の情報であるmkr_nameが取得されています。3つのカテゴリを結合することができました。

このように3つの以上のテーブルの結合では、SQL文の左側からひとつずつテーブルが結合され、その結果セットにさらに直後のテーブルが結合されていくというイメージになります。基本的にな結合構文が理解できていれば難しいものではないでしょう。

先程は内部結合で3つのテーブルを結合しましたが、外部結合で行うとどうなるでしょうか。

SELECT goods_name,ctg_name,mkr_name
        FROM goods OUTER JOIN categroy USING (ctg_id) 
         OUTER JOIN maker USING (mkr_id)

実行結果

hyou9

LEFT OUTER JOIN句を用いてgoodsテーブルの行をすべて表示するように結合しました。

先ほどのSQL文でとは異なり、欠落していたgoodsテーブルの「革靴」「ジーンズ」の行も取得することができました。

テーブルの結合と選択を同時に行う

ここでは、テーブルの結合と選択を同時に行う、少し複雑なSELECT文を紹介します。

しかし、それほど難しいものではありません。

しばしば「SQLによるデータベース操作を学習していく中で、一番の難関は結合だ」と言われます。言い換えると結合を自在にできるのならば、第一の難関は突破できたということです。

結合と選択を同時に行う場合にも、それぞれの構文を理解し、目的の結果セットを頭に描きながらSQL文を記述しましょう。

では、goodテーブルとcategoryテーブルをctg_id列を結合条件として内部結合を行い、さらに、gds_price列の値が5000以上の行を結果セットに取得するSQL文を入力します。

SELECT goods_name,gds_price,ctg_name FROM goods 
     INNER JOIN categroy USING (ctg_id) 
         Where gds_price >= 5000

実行結果

hyou10

まず、INNER JOIN句でテーブルを結合しUSING句ん結合条件を記述します。そして、WHERE句で行を絞り込む条件を記述しました。眺めのSQLですが、ひとつひとつを分解しながら考えるとそれほど難しいものではありません。

内部結合は、WHERE句に結合条件を記述しておこなうことができました。

この場合に選択を同時に行うとどうなるでしょうか。

まず、次のようなSQLがあるとします。

SELECT goods_name,gds_price,ctg_name FROM goods,category 
     WHERE goods.ctg_id =category.ctg_id

実行結果

hyou11

FROM句に結合するテーブルのリストを記述し、WHERE句に結合条件を記述しました。ここからさらに,gds_price列の値が5000以上の行に絞り込みます。

SELECT goods_name,gds_price,ctg_name FROM goods,category 
     WHERE goods.ctg_id =category.ctg_id
          AND gds_price >=5000

実行結果

hyou10

このようにWHWRE句に結合条件を記述し、さらに選択を行うときには、WHWRE句の末尾にAND演算子を使って選択条件を追加していきます。

さいごに

今回は3つ以上のテーブルからデータを取得する方法と、選択を結合を同時に行う方法について紹介いたしました。 次回は、行をグループ化する方法、集計関数を使用する方法、結果をソートして取得する方法について紹介いたします。

投稿者情報

パンダマン

パンダマン

パンダマンです。

主にWebシステム開発等を担当しております。
設計・プログラミング。サーバー管理なんでもやります。

今、担当しているプロジェクトではJavaの今まで触れたことのないフレームワークを使うことになり勉強中です。
学生にC言語のプログラミングの基礎を教えたりもしています。
最近「キングダム」にはまっています。

>> パンダマンが執筆した他の記事を読む

法人向け人気レンタルサーバー
法人向け人気専用サーバー
個人向け人気レンタルサーバー