業務で使えるSQL講座 中級編

sql

この章では他のテーブルの情報を追加する方法について説明します。
この章は少し難しいですが、この内容がSQLを使うメリットのところです。

この記事で覚えること

前の章
 業務で使えるSQL講座 基礎編

コマンド内容
LEFT JOIN違うテーブルのテーブル情報を付与する

4. 違うテーブルの情報をつけて出してみよう LEFT JOIN

データを出していると
他のテーブルの情報と組み合わせて分析したいという
ことがでてきます。

例えば下の受注データから、
国別の受注金額を出したいといった時はどうするでしょうか?

国の情報は顧客の情報テーブルにあるのですが、
受注テーブルにないので出すことができません。

受注テーブル

顧客名受注日受注金額
ABC会社2020-01-011,000
XYZ会社2020-02-013,000
ABC会社2020-02-015,000
YYY会社2020-02-012,000

顧客テーブル

顧客名
ABC会社日本
XYZ会社アメリカ
YYY会社日本
ZZZ会社アメリカ

4-1 今までの知識を使って出してみる

そういった時はどうするかというと、
前章の知識を使います。
受注テーブルの1行目を見るとABC会社とあり、
ABC会社の国を知りたいので、
このSQLで顧客テーブルのデータを検索します。

SELECT
  *
FROM  顧客
WHERE 顧客.顧客名 = 'ABC会社'

そうしてABC会社の国が日本という事がわかることができました。

顧客テーブルの検索結果

顧客名
ABC会社日本

次に2行目のデータを見て、XYZ会社を検索して国を調べます。
それを繰り返せば全部の国情報を取ることができます。
という事でこの章の説明はおしまいです。

説明のおしまいは冗談ですが、
この手法はデータ更新のプログラムやデータ調査でよく使います。
ですのであまり馬鹿にできない方法です。

4-2 いっぺんに国情報をとる

一件一件調べると日が暮れてしまいます。
そこで、いっぺんにできるSQLがあります。
それはLEFT JOIN という記述です

LEFT JOIN

LEFT JOINは左のテーブルに右のテーブルの情報を追加するという意味です。
ONには左のテーブルのどの情報に基づいて、
右のテーブルのデータを探すかという事を書きます

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会社’

このように難しく思えることも、多くの事は単純化できます。
ですので難しいとあきらめるのでなく、
今ある知識を使ってデータを検索していってください。

タイトルとURLをコピーしました
Close Bitnami banner
Bitnami