3
2

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 3 years have passed since last update.

【SQL】LEFT JOIN の使い方(複数指定の方法も)

Last updated at Posted at 2020-05-01

##LEFT JOINとは?

FROMで指定したテーブルのレコードを全て取得する。外部キーがNULLのレコードもNULLのまま実行結果に表示される。

###JOINとの違い

JOINはFROMで取得したカラム、レコードを表示しない。対してLEFT JOINはFROMで表示したレコード(外部キーを持つ子テーブル)を全て取得する。

要するにFROMで取得したカラムを表示するか、しないかの問題です。

###例題

playersテーブルにteamsテーブルに結合させて、playersテーブルのnameカラム、teamsテーブルのnameカラムを取得する。

テーブルは以下の通り。レコードは省略。

playersテーブル

id name goals height country_id previous_team_id

teamsテーブル

id name

playersテーブルにteamsテーブルを結合させるので、playersテーブルが子テーブルで外部キーを持つ。
そしてteamsテーブルが親テーブルで主キーを持つ。

したがってSQL文にすると以下のようになる。

SELECT カラム名, カラム名
FROM 外部キーを持つ小テーブル 
left join 主キーを持つ親テーブル
on 小テーブル.外部キーのカラム = 親テーブル.主キーのカラム ;

カラム、テーブルを適合させると、

SELECT players.name , teams.name 
FROM players
left join teams
on players.previous_team_id = teams.id ;

となります。

##JOINとLEFTJOINを掛け合わせる方法

###例題

playersテーブルにcountriesテーブルとteamsテーブルを結合して、データを取得する。

テーブルは以下の通り。レコードは省略。

playersテーブル

id name goals height country_id previous_team_id

teamsテーブル

id name

countriesテーブル

id name rank

各テーブルの関係性を整理すると
playersテーブルにcountriesテーブルを結合させる
→playersテーブルは外部キーを持つ子要素、countriesテーブルは主キーを持つ親要素。

playersテーブルにteamsテーブルを結合させる
→→playersテーブルは外部キーを持つ子要素、teamsテーブルは主キーを持つ親要素。

となります。

日本語に置き換えると、

SELECT *
FROM 外部キーを持つ子テーブル
join 主キーを持つ親テーブル
on  子テーブル.外部キーを持つカラム名 = 親テーブル.主キーであるカラム名
left join 主キーを持つ親テーブル
on 子テーブル.外部キーを持つカラム名 = 親テーブル.主キーであるカラム名

となります。

SQL文にすると以下のようになります。

SELECT *
FROM players
join countries
on players.country_id  = countries.id
left join teams
on players.previous_team_id = teams.id;

teamsテーブルはleft joinを使っているので取得したデータの一番左側がteamsテーブルのデータになります。

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?