0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【SQL初学者】SQLテーブルの結合を理解

Posted at

目次

今回は職場でSQLを書く機会がありましたので共有させていただきます。
テーブル結合には大きく二つあります。

  • 外部結合(INNERJOIN)
  • 内部結合(OUTERJOIN)

サンプルデータを用意しました

外部結合

fuluitsテーブル

id name region_id
1 みかん 1
2 りんご 2
3 いちご 3
4 メロン 4
5 5
6 かき 1
7 さくらんぼ 6

regionテーブル

id region
1 和歌山
2 青森
3 栃木
4 茨城
5 千葉
6 山形
7 広島

内部結合(INNERJOIN)

  • 両テーブルで指定したカラムの値が一致するデータのみを抽出する方法です
  • 基本構文
    • SELECT * FROM fluits(テーブル名1) INNER JOIN region(テーブル名2) ON region id = fuluits region_id;
  • 結果
id name region_id id region
1 みかん 1 1 和歌山
6 かき 1 1 和歌山
2 りんご 2 2 青森
3 いちご 3 3 栃木
4 めろん 4 4 茨城
5 5 5 千葉
7 さくらんぼ 6 6 山形

外部結合(OUTERJOIN2種類)

  • LEFT JOIN
  • RIGHT JOIN

LEFT JOIN

  • FROM句の後ろに記述するテーブルが軸の結合方法
  • 基本構文
    • SELECT * FROM fluits LEFT JOIN region ON region id = fluits region_id;
  • 結果
id name region_id id region
1 みかん 1 1 和歌山
6 かき 1 1 和歌山
2 りんご 2 2 青森
3 いちご 3 3 栃木
4 めろん 4 4 茨城
5 5 5 千葉
7 さくらんぼ 6 6 山形

INNERJOINとの違いが伝えられんな、、INNERJOINと違うのはカラムがある値だけ抽出するのではなく、軸にあるテーブルすべての情報を表示する

RIGHT JOIN

  • RIGHTJOIN句の後ろに記述するテーブルが軸の結合方法
  • 基本構文
    • SELECT * FROM fluits RIGHT JOIN region ON region id = fluits region_id;
  • 結果
id name region_id id region
1 みかん 1 1 和歌山
6 かき 1 1 和歌山
2 りんご 2 2 青森
3 いちご 3 3 栃木
4 めろん 4 4 茨城
5 5 5 千葉
7 さくらんぼ 6 6 山形
null null null 広島

これは、条件で指定した値をreginテーブルから全て取ってきている。ご存じ通り広島の果物はfluitsテーブルには無いため、NULLの値が設定されている。
このように、OUTERJOINは条件に指定した値を全て取ってくるのが特徴である。

まとめ

そもそも大規模システムだと、格納するデータや役割によってデータベースを分けるのでJOINが使用できないという話もあるっぽいな。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?