スポンサーリンク

【MySQL】他テーブルとデータを結合する外部結合についてご紹介。

SQL
スポンサーリンク

今回の記事はMySQLで他テーブルとデータを結合する外部結合についてご紹介する内容になっています。初心者にも分かりやすいように記載するので是非参考にしてみて下さい。内部結合に関しては別記事で記載しているのでリンクよりご確認ください。

【MySQL】他テーブルとデータを結合する内部結合(inner join)に関してご紹介。
【MySQL】インストールからサンプルデータ作成までご紹介。

スポンサーリンク

外部結合とは?

外部結合とは何かをまずは図を用いて簡単におさらいしておきます。

上記のような二つのテーブルがあるとします。

作り方は下記コードで自身のローカルPCのMySQLのデータベースに作成することができます。

#サーバ起動
mysql.server start

#ログイン
mysql -u root -p 

#データベース作成
mysql> CREATE DATABASE practice001
mysql> connect practice001
mysql> create table practice001.table1 (id int, name varchar(10),age int);
mysql> create table practice001.table2 (id int, country varchar(10));
mysql> insert into table1 (id,name,age) values (1,"あああ",11),(2,"いいい",13),(3,"ううう",15),(4,"えええ",17);
mysql> insert into table2 (id,country) values (1,"日本"),(3,"日本"),(5,"アメリカ"),(7,"中国");

では確認してみましょう。

mysql> select *  from table1;
+------+-----------+------+
| id   | name      | age  |
+------+-----------+------+
|    1 | あああ    |   11 |
|    2 | いいい    |   13 |
|    3 | ううう    |   15 |
|    4 | えええ    |   17 |
+------+-----------+------+
4 rows in set (0.00 sec)

mysql> select *  from table2;
+------+--------------+
| id   | country      |
+------+--------------+
|    1 | 日本         |
|    3 | 日本         |
|    5 | アメリカ     |
|    7 | 中国         |
+------+--------------+
4 rows in set (0.00 sec)

それぞれデータが入っています。ではこれを外部結合することでどのようになっていくかを追っていきます。

そもそも外部結合とはどのようなものなのかですが、下記の上記で作成したデータを下記のようにしてくっつけるイメージです。

left join
right join

内部結合とは少し違い一致しているしていないを考慮に入れず、結合されるので方のテーブル情報に沿ってNullでもデータをくっつけるイメージです。leftとrightの2種類があるので順番に見ていきます。習うより慣れろなので実際に動かしてみましょう。

外部結合で他テーブルを結合

「left join」で外部結合


mysql> select * from practice001.table1 left outer join table2 on table1.id = table2.id;
+------+-----------+------+------+---------+
| id   | name      | age  | id   | country |
+------+-----------+------+------+---------+
|    1 | あああ    |   11 |    1 | 日本    |
|    2 | いいい    |   13 | NULL | NULL    |
|    3 | ううう    |   15 |    3 | 日本    |
|    4 | えええ    |   17 | NULL | NULL    |
+------+-----------+------+------+---------+
4 rows in set (0.00 sec)

少し解説しておきます。

select * from practice001.table1 inner join table2 on table1.id = table2.id;
select * from [データベース].[join元のテーブル] left outer join [joinするテーブル] on [joinの条件(今回はtable1のidとtable2のidが同じもので指定)]

table1が元のテーブルなのでそこに左からくっつけるイメージです。right joinはその逆です。

「right join」で外部結合

mysql> select * from practice001.table1 right outer join table2 on table1.id = table2.id;
+------+-----------+------+------+--------------+
| id   | name      | age  | id   | country      |
+------+-----------+------+------+--------------+
|    1 | あああ    |   11 |    1 | 日本         |
|    3 | ううう    |   15 |    3 | 日本         |
| NULL | NULL      | NULL |    5 | アメリカ     |
| NULL | NULL      | NULL |    7 | 中国         |
+------+-----------+------+------+--------------+
4 rows in set (0.00 sec)

このようになるのでうまく「left join」と「right join」を使い分ける必要があります。

外部結合で他テーブルからデータを取得

先ほど外部結合はできたのでそれを使って取得したいデータのみを取得してみましょう。仮に、id・名前・年齢・国の情報をまとめて取得したい場合は下記のように記述すれば良いです。

mysql> select table1.id,name,age,country from practice001.table1 left outer join table2 on table1.id = table2.id;
+------+-----------+------+---------+
| id   | name      | age  | country |
+------+-----------+------+---------+
|    1 | あああ    |   11 | 日本    |
|    2 | いいい    |   13 | NULL    |
|    3 | ううう    |   15 | 日本    |
|    4 | えええ    |   17 | NULL    |
+------+-----------+------+---------+
4 rows in set (0.00 sec)

先程の内部結合の元のデータから必要な項目のみを抽出しました。要はselectの後ろに取得したいものをつければ良いということです。内部結合との違いとしてnullも取得できている点が大きな違いになっています。

では今回の記事は以上です。他にも多数の記事を記載しているので是非興味があればサイト内見ていって下さい。

SQL
スポンサーリンク
tomoをフォローする
スポンサーリンク
SunnyDayTravel-Blog

コメント

タイトルとURLをコピーしました