これをマスター
マスター 複数のデータをくっ付けようテーマ
テーブル: sales | ||||||
取引ID | 取引日 | 顧客ID | 商品ID | 合計金額 | ||
1 | 7 | 4/1/20 | 558 | 52 | 250 | |
2 | 11 | 4/1/20 | 781 | 27 | 700 | |
3 | 19 | 4/1/20 | 788 | 46 | 500 | |
4 | 32 | 4/1/20 | 683 | 23 | 500 | |
5 | 33 | 4/1/20 | 99 | 34 | 245 | |
6 | 39 | 4/1/20 | 664 | 32 | 300 | |
7 | 50 | 4/1/20 | 316 | 49 | 600 | |
テーブル: customer | ||||||
顧客ID | 氏名 | 顧客歴 | 誕生日 | 性別 | ||
1 | 99 | ケリーキー | 42739 | 18412 | M | |
2 | 316 | Clark Schroeder | 42742 | 18474 | M | |
3 | 558 | エルビス・カルデナス | 42745 | 18536 | M | |
4 | 664 | ラファエルエステス | 42748 | 18598 | M | |
5 | 683 | コリン・リン | 42750 | 18660 | M | |
6 | 781 | イゴールビーチ | 42753 | 18722 | M | |
7 | 788 | スコット・ホールデン | 42756 | 18784 | M | |
結果: (スペース都合で5行のみ表示) | ||||||
取引ID | 取引日 | 顧客ID | 商品ID | 合計金額 | 氏名 | |
1 | 7 | 4/1/20 | 558 | 52 | 250 | エルビス・カルデナス |
2 | 11 | 4/1/20 | 781 | 27 | 700 | イゴールビーチ |
3 | 19 | 4/1/20 | 788 | 46 | 500 | スコット・ホールデン |
4 | 32 | 4/1/20 | 683 | 23 | 500 | コリン・リン |
5 | 33 | 4/1/20 | 99 | 34 | 245 | ケリーキー |
はじめに
SQLのJOIN (ジョイン)は、複数のデータテーブルを
特定の値(キー)を元に紐づけるコマンドです
特定のキーを元に紐づける意味では
エクセルのVLOOKUPに考え方は似ています
JOINは言ってみると複数のブックやシートのデータを
特定のキーを元に、何千万行のデータサイズでも
一気にとってこれるところと
複雑な条件を元に抽出出来るところです
JOINを使った検索は
エクセルなどのデータシートでマニュアルで行うよりも
一括して検索が出来る点で、SQLを使うメリットと言えます
上の例を見てみましょう
まずは何をやろうとしているかと言うと
「売上データを顧客データと紐づけて
どのお客さんが何を買われたか」を検索しています
SQLを見る前に2つのテーブルを見てみてください
売上 (sales)テーブルには売上データが入っていますが
顧客のデータは数字の顧客IDだけです
これだけではお名前や連絡先などが分かりません
反対に顧客(customer)テーブルには顧客のデータはありますが
売上のデータは入っていません
お客さんの売上を知りたい場合、両方のテーブルを紐づけて
両方のテーブルから必要な情報を抜き出して来たいところです
そこで、両方のテーブルに共通するカラム (キー)を見つけます
2つのテーブルをみると顧客IDカラムが両方のがテーブルにあります
これを元に紐づけると良さそうです
そこでSQLではJOIN句を使って紐づけます
SELECT *
FROM テーブルA A
INNER JOIN テーブルB B
ON A.[キー]=B.[キー]
FROM 1つ目のテーブル の後に
JOIN を繋げて、2つ目のテーブル名を指定します
さらに、ON 1つ目のテーブル.キー=2つ目以降のテーブル.キー で
どのカラムを元にくっつけるかをを指定してあげます
JOINには大きく
INNER, LEFT, RIGHT, OUTER の
4つのタイプがあります