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

初心者向けに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のエディタに上記コードを設定したので実際に動作をご覧ください
以上になります。