「sql from 複数」で検索したあなたへ【SQL基礎】
Sal
sql sql分で複数のテーブルを使用する場合の全てのパターンについて解説を行います。

「sql from 複数」で検索したあなたへ【SQL基礎】

  1. 記事の概要
  2. サンプルテーブル
  3. 2種類の結合
  4. INNER JOIN(内部結合)
  5. # 純粋な結合のポイント
  6. # 内部結合の特徴
  7. # 実行結果
  8. LEFT JOIN
  9. # 実行結果
  10. 備考欄
## 記事の概要
sql分で複数のテーブルを使用する場合の全てのパターンについて解説を行います。
## サンプルテーブル
- employees
id name salary dept_id
1234 tarou 10,00 20
1235 kaiou 20.000 20
1236 nanashi 30,00 10000
- Department
id name
20 情報システム室
10 品質管理室
## 2種類の結合
この図の通り、結合には大きく分けて2種類存在する。 - INNER JOIN(内部結合) 二つのデータベースを結合する際に、 両方のデータベースにデータが存在していれば 列が表示されるパターン。 通常の「結合」ではこちらを指すことが多い - OUTER JOIN(外部結合) 二つのデータベースを結合する際に、 どちらかデータベースにデータが存在すれば 表示されるパターン - Left Join, right join この二つは少し例外で「Left Join」であれば 左側のデータベースに存在するものは全て表示する というもの。 後付けで右側のデータベースがくっつくイメージ
## INNER JOIN(内部結合)
二つのデータベースを結合する際に、 両方のデータベースにデータが存在していれば 列が表示されるパターン。 今回だと「従業員データベースと部署データベースに部署コードという共通の値が存在する場合のみ」が目的となる 通常、結合とはこのタイプの結合を表す。 - サンプルコード

select
    e.*,
    d.*
from
    employees e,
    Department d
where
    e.dept_id = d.id

### 純粋な結合のポイント
- fromの中身のテーブルは「,」で区切ること - 二つのテーブルを分けるために、「e」「d」などテーブルに別名(エイリアス)をつけること - そのための名前はわかりやすいもの(今回はemployeeとdepertmentの頭文字)にすること - 結合する場所はwhere句の中で指定すること
### 内部結合の特徴
下記の従業員データベースではdept_idがNULLになっているnanashiは実行結果に表示されない。 これは、dept_idと同一の値(10000)が部署データベースのidカラムには存在しないためである。 - employees
id name salary dept_id
1234 tarou 10,00 20
1235 kaiou 20.000 20
1236 nanashi 30,00 10000
### 実行結果
id name salary dept_id id name
1234 tarou 10,00 20 20 情報システム室
1235 kaiou 20.000 10 10 品質管理室
## LEFT JOIN
LEFT JOINはこちらの図の通り、左側のデータを絶対的な基準としてデータを表示したい場合に使われることが多い。 今回だと「従業員データベースのデータは全て表示し、そこの付随情報として部署コードを付け加える」というイメージ - サンプルコード

select
    e.*,
    d.*
from
    employees e LEFT JOIN Department d 
    ON e.dept_id = d.id

### 実行結果
id name salary dept_id id name
1234 tarou 10,00 20 20 情報システム室
1235 kaiou 20.000 10 10 品質管理室
1236 nanashi 10.000 10000 NULL NULL
先程の内部結合とは違い、idがNULLであっても表示がされている。
## 備考欄
title:「sql from 複数」で検索したあなたへ【SQL基礎】 description:sql分で複数のテーブルを使用する場合の全てのパターンについて解説を行います。 img:https://www.oreilly.co.jp/books/images/picture_large4-87311-281-8.jpeg category_script:page_name.startswith("11")