Header
2020-09-10
2020-09-11

MySQLの外部結合(left outer joinとright outer join)の解説

2020 09 10 3577265 s min

初心者向けにMySQLのMySQLテーブ外部結合(left outer joinとright outer join)の解説を行います。

外部結合(left outer join)とは

外部結合(left outer join)はデータベースのテーブルをIDなどで結合し、

1:片方のテーブルの全レコードの取得

2:結合して合致する情報を取得

を行います。

これだけでは分かり辛いので以下で説明します。

left outer joinをサンプルコードで解説

例えば、articlesとcategoriesのテーブルがあるとします。

articlesテーブル(記事のテーブル)

id title
1 railsの記事
2 pythonの記事
3 転職の記事

categoriesテーブル(記事のカテゴリーテーブル)

id article_id name
1 1 プログラミング
2 2 キャリア
3 NULL 初心者向け

以下でarticlesのIDとcategoriesのarticle_idをleft outer joinします。

select articles.title, categories.name from articles
left join categories
on articles.id = categories.article_id;

※left outer joinと記載せず、left joinで結合可能

結果

title categories.name
railsの記事 プログラミング
pythonの記事 キャリア
転職の記事 NULL

上記の通り、

1:articlesテーブルの全レコードを取得

2:articlesに合致する categories.nameも取得

されています。

「転職の記事」 については、該当しないカテゴリーが存在しないのでNULLで表示されます。

また、該当する記事が存在しないので、「初心者向け」というカテゴリーの情報は表示されていません。

外部結合(left outer join)は、一般的なテーブル操作なので テーブルを操作するなら必ず覚えてください。

また、paizaのエディタに上記コードを設定したので、ご自身で操作して実際動作をご確認ください。

外部結合(right outer join)とは

left outer joinと逆の動作になります。 こちらもコードをご覧になった方が早いです。

以下も同様に

articlesとcategoriesのテーブルがあるとします。

articlesテーブル(記事のテーブル)

id title
1 railsの記事
2 pythonの記事
3 転職の記事

categoriesテーブル(記事のカテゴリーテーブル)

id article_id name
1 1 プログラミング
2 2 キャリア
3 NULL 初心者向け

以下コード

select articles.title, categories.name from articles
right join categories
on articles.id = categories.article_id;

とright joinすると

title categories.name
railsの記事 プログラミング
pythonの記事 キャリア
NULL 初心者向け

と出力します。

つまり

1:categoriesテーブルの全レコードを取得

2:articlesとcategoriesに紐づく categories.nameも取得

となります。

こちらもpaizaのエディタに上記コードを設定したので実際に動作をご覧ください

以上になります。

あなたにお勧めの記事
前の記事
次の記事