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

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

Katahira

Share
Published by
Katahira

Recent Posts

トランザクションテーブルの特徴を知ろう

この記事で解決できる疑問 トラ…

2年 ago

マスタテーブルの設計で注意すべき3点を紹介

この記事で解決できる疑問 マス…

2年 ago

Power BI道場 コンテンツ紹介

ここでは筆者が提供しているPo…

2年 ago

Power BI道場 ヒストグラムの作成。知っていれば簡単!!

この記事で解決できる疑問 ヒス…

2年 ago
Close Bitnami banner
Bitnami