この章では他のテーブルの情報を追加する方法について説明します。
この章は少し難しいですが、この内容がSQLを使うメリットのところです。
この記事で覚えること
前の章
業務で使えるSQL講座 基礎編
コマンド | 内容 |
---|---|
LEFT JOIN | 違うテーブルのテーブル情報を付与する |
4. 違うテーブルの情報をつけて出してみよう LEFT JOIN
データを出していると
他のテーブルの情報と組み合わせて分析したいという
ことがでてきます。
例えば下の受注データから、
国別の受注金額を出したいといった時はどうするでしょうか?
国の情報は顧客の情報テーブルにあるのですが、
受注テーブルにないので出すことができません。
受注テーブル
顧客名 | 受注日 | 受注金額 |
---|---|---|
ABC会社 | 2020-01-01 | 1,000 |
XYZ会社 | 2020-02-01 | 3,000 |
ABC会社 | 2020-02-01 | 5,000 |
YYY会社 | 2020-02-01 | 2,000 |
顧客テーブル
顧客名 | 国 |
---|---|
ABC会社 | 日本 |
XYZ会社 | アメリカ |
YYY会社 | 日本 |
ZZZ会社 | アメリカ |
4-1 今までの知識を使って出してみる
そういった時はどうするかというと、
前章の知識を使います。
受注テーブルの1行目を見るとABC会社とあり、
ABC会社の国を知りたいので、
このSQLで顧客テーブルのデータを検索します。
SELECT
*
FROM 顧客
WHERE 顧客.顧客名 = 'ABC会社'
そうしてABC会社の国が日本という事がわかることができました。
顧客テーブルの検索結果
顧客名 | 国 |
---|---|
ABC会社 | 日本 |
次に2行目のデータを見て、XYZ会社を検索して国を調べます。
それを繰り返せば全部の国情報を取ることができます。
という事でこの章の説明はおしまいです。
説明のおしまいは冗談ですが、
この手法はデータ更新のプログラムやデータ調査でよく使います。
ですのであまり馬鹿にできない方法です。
4-2 いっぺんに国情報をとる
一件一件調べると日が暮れてしまいます。
そこで、いっぺんにできるSQLがあります。
それはLEFT JOIN
という記述です
ONの部分ですが、
これは1件1件検索するときのWHEREの部分にあたります。
SELECT
*
FROM 顧客
WHERE 顧客.顧客名 = 'ABC会社'
顧客.顧客名 = ‘ABC会社’と書いていますね。
‘ABC会社’というのは1件1件検索した時の指定です。
受注テーブルの顧客名で検索しているので、顧客.顧客名 = 受注.顧客名
となります。
まとめると
SELECT
受注.顧客名
,受注.受注金額
,顧客.国
FROM 受注
LEFT JOIN 顧客
ON 顧客.顧客名 = 受注.顧客名
となります。
顧客名の項目ですが、受注テーブルにも顧客テーブルの両方にあり、
どちらの項目かわからないですよね?
コンピュータも同じで区別をつけられません。
テーブル名.項目名
とテーブル名を項目名の前に書くことで区別することができます。
結果はこのとおりになります。
顧客名 | 受注金額 | 国 |
---|---|---|
ABC会社 | 1,000 | 日本 |
XYZ会社 | 3,000 | アメリカ |
ABC会社 | 5,000 | 日本 |
YYY会社 | 2,000 | 日本 |
4-3 まとめ
この章ではLEFT JOINを説明しました。
コマンド | 内容 |
---|---|
LEFT JOIN | 違うテーブルのテーブル情報を付与する |
この情報をつける作業は結合といいます。
業務系のプログラマーであれば必須知識で、
もっと深い理論を学ぶことをおすすめします。
後日その記事を書きます。
業務担当者でしたら、まずは今回の内容で充分です。
今回は1つのテーブルの情報を付加しただけですが、
4個も5個もつけたくなった場合はどうしたらいいでしょうか?
その場合はIT部門の人に難しい部分を書いてもらうのがいいです。
赤の記述は専門性が高くなります。
ですのでIT部門に赤部分は依頼して、
青部分を自分の目的にそって変更して利用します。
SELECT
受注.顧客名
,受注.受注金額
,顧客.国
FROM
受注 LEFT JOIN 顧客
ON 顧客.顧客名 = 受注.顧客名
LEFT JOIN 通貨
ON 顧客.国 = 通貨.国
…
…
…
WHERE
受注.顧客名 = ‘ABC会社‘
赤色のプログラム部分ですが、
ビューという名前でシステム上に保存することで、
テーブルと同じように扱えるようになります。
例えば今回赤部分をIT部門の人が受注情報という名前でつけて保存したとします。
そうするとこのように書けます。
難しいLEFT JOINを使用する必要はないですよね?
SELECT
顧客名
,受注金額
,国
FROM 受注情報
WHERE
顧客名 = ‘ABC会社’
このように難しく思えることも、多くの事は単純化できます。
ですので難しいとあきらめるのでなく、
今ある知識を使ってデータを検索していってください。