データベース初心者必見!入門編その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テーブル」
この3つのテーブルの結合は、先にgoodsテーブルとcategoryテーブルを結合して取得した結果セットに、makerテーブルを結合するイメージです。
実際にSQLを発行してみましょう。
[shell]SELECT goods_name,ctg_name,mkr_name
FROM goods INNER JOIN categroy USING (ctg_id)
INNER JOIN maker USING (mkr_id)[/shell]
実行結果
結果セットには、goodsテーブルの情報であるgds_name列、categoryテーブルの情報であるctg_name列、maker列の情報であるmkr_nameが取得されています。3つのカテゴリを結合することができました。
このように3つの以上のテーブルの結合では、SQL文の左側からひとつずつテーブルが結合され、その結果セットにさらに直後のテーブルが結合されていくというイメージになります。基本的にな結合構文が理解できていれば難しいものではないでしょう。
先程は内部結合で3つのテーブルを結合しましたが、外部結合で行うとどうなるでしょうか。
[shell]SELECT goods_name,ctg_name,mkr_name
FROM goods OUTER JOIN categroy USING (ctg_id)
OUTER JOIN maker USING (mkr_id)[/shell]
実行結果
LEFT OUTER JOIN句を用いてgoodsテーブルの行をすべて表示するように結合しました。
先ほどのSQL文でとは異なり、欠落していたgoodsテーブルの「革靴」「ジーンズ」の行も取得することができました。
テーブルの結合と選択を同時に行う
ここでは、テーブルの結合と選択を同時に行う、少し複雑なSELECT文を紹介します。
しかし、それほど難しいものではありません。
しばしば「SQLによるデータベース操作を学習していく中で、一番の難関は結合だ」と言われます。言い換えると結合を自在にできるのならば、第一の難関は突破できたということです。
結合と選択を同時に行う場合にも、それぞれの構文を理解し、目的の結果セットを頭に描きながらSQL文を記述しましょう。
では、goodテーブルとcategoryテーブルをctg_id列を結合条件として内部結合を行い、さらに、gds_price列の値が5000以上の行を結果セットに取得するSQL文を入力します。
[shell]SELECT goods_name,gds_price,ctg_name FROM goods
INNER JOIN categroy USING (ctg_id)
Where gds_price >= 5000[/shell]
実行結果
まず、INNER JOIN句でテーブルを結合しUSING句ん結合条件を記述します。そして、WHERE句で行を絞り込む条件を記述しました。眺めのSQLですが、ひとつひとつを分解しながら考えるとそれほど難しいものではありません。
内部結合は、WHERE句に結合条件を記述しておこなうことができました。
この場合に選択を同時に行うとどうなるでしょうか。
まず、次のようなSQLがあるとします。
[shell]SELECT goods_name,gds_price,ctg_name FROM goods,category
WHERE goods.ctg_id =category.ctg_id[/shell]
実行結果
FROM句に結合するテーブルのリストを記述し、WHERE句に結合条件を記述しました。ここからさらに,gds_price列の値が5000以上の行に絞り込みます。
[shell]SELECT goods_name,gds_price,ctg_name FROM goods,category
WHERE goods.ctg_id =category.ctg_id
AND gds_price >=5000[/shell]
実行結果
このようにWHWRE句に結合条件を記述し、さらに選択を行うときには、WHWRE句の末尾にAND演算子を使って選択条件を追加していきます。
さいごに
今回は3つ以上のテーブルからデータを取得する方法と、選択を結合を同時に行う方法について紹介いたしました。 次回は、行をグループ化する方法、集計関数を使用する方法、結果をソートして取得する方法について紹介いたします。