BLOG

【SQL研修】まるの記録6

こんにちは。まるです。
好きなアーティストが数年ぶりに活動を再開したことを知り、最近はいつもよりも若干テンション高めです。
こうなったらあのバンドやあのグループも復活しないかな~。

さて、SQLまとめ第二回目はテーブル結合です。
テーブル結合とは、その名の通り複数のテーブルを結合してまとめることです。
結合の方法には、内部結合外部結合の二種類があります。

内部結合

今回も例を使って見ていきます。

■従業員一覧

■部署一覧

従業員一覧に記載の「林さん」は新入社員なのでまだ配属先が決まっておらず、部署IDが付与されていません。(NULLの状態
また、部署一覧の「新設部署」はまだ配属社員が決まっていないため、”4″という「ID」は誰にも割り振られていません。

では早速、内部結合を使って以下の条件のテーブルを作成します。
・現在部署に配属されている全従業員の名前および所属部署名を表示する

SELECT
	従業員一覧.従業員名,
    部署一覧.名前 AS 部署名
FROM 従業員一覧
JOIN 部署一覧
	ON 従業員一覧.部署ID = 部署一覧.ID;

上記のSQL文の実行順序は以下の通りです。
①FROMに書かれたテーブル(従業員一覧)とJOINで指定されたテーブル(部署一覧)を、ONの条件(従業員一覧の「部署ID」と部署一覧の「ID」が一致)で結合する
※①完了時点で、結合されたテーブルは以下のようなイメージ

上記のテーブルから、「従業員名」と「名前」列を選択して表示
 ※分かりづらいため、ASを使用して「名前」列を「部署名」に改名

今回の例だと、従業員一覧の「部署ID」列には部署一覧の「ID」列の値が格納されており、それぞれを紐づけてテーブル同士を結合させる役割を担っていました。
このように、他のテーブルの値を格納し、結合の際にどの行と関連付けるべきかを明らかしてくれる列のことを「外部キー」と言います。

また、今回出力されたテーブルには、従業員一覧にいた「林さん」および部署一覧の「新設部署」は存在していません。
このように内部結合では、結合相手が存在しない場合にはその行は結合結果から消滅します。

外部結合

続いて外部結合。
今度は以下の条件で結合結果を出力してみます。
・部署未配属の従業員も含め、全従業員の名前および所属部署がある場合はその名を表示する

SELECT
	従業員一覧.従業員名,
    部署一覧.名前 AS 部署名
FROM 従業員一覧 #結合元テーブル(左)
LEFT JOIN 部署一覧 #結合先テーブル(右)
	ON 従業員一覧.部署ID = 部署一覧.ID;

部署未配属の「林さん」も出力できました。
SQL文を見ると、結合テーブルを指定する際の記述がLEFT JOINとなっています。これにより、左側のテーブルを基準として外部結合を行うことが出来ます。
SQL文のコメントにも記載した通り、FROMの後に書かれたテーブルが左テーブル、JOINで指定されたテーブルが右テーブルです。

今回は左テーブルである従業員一覧を基準とするため、「部署ID」がNULLの「林さん」も出力されました。

左があるということは、まあ右もありますよね。

SELECT
	従業員一覧.従業員名,
    部署一覧.名前 AS 部署名
FROM 従業員一覧
RIGHT JOIN 部署一覧
	ON 従業員一覧.部署ID = 部署一覧.ID;

右テーブルの部署一覧基準となりましたので、誰も所属していない「新設部署」が表示できました。

所感

テーブル結合まで出来ると、SQLを使いこなせている感が多少出てきたような気がします。
今回はシンプルに二つのテーブルを結合するパターンのみ見ていきましたが、これが複数テーブルとなっても混乱しないように応用問題等で練習しておこうと思います。

今回はここまでです。
有難うございました!

BLOGトップへ戻る