今回の記事はMySQLで他テーブルとデータを結合する結合(inner join)についてご紹介する内容になっています。初心者にも分かりやすいように記載するので是非参考にしてみて下さい。外部結合に関しては別記事で記載しているのでリンクよりご確認ください。
「【MySQL】他のテーブルから値を取得する外部結合(outer join)に関してご紹介。」
「【MySQL】インストールからサンプルデータ作成までご紹介。」
内部結合とは?
内部結合とは何かをまずは図を用いて簡単におさらいしておきます。

上記のような二つのテーブルがあるとします。
作り方は下記コードで自身のローカルPCのPostgreSQLのデータベースに作成することができます。
#サーバ起動
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)
それぞれデータが入っています。ではこれを内部結合することでどのようになっていくかを追っていきます。
そもそも内部結合とはどのようなものなのかですが、例えば今回のような例だと、IDが同じものでそのIDのデータ対象の国情報が知りたい場合などに使えます。使い方は内部結合によりデータを結合させ下記の図のようにし、そこから必要な情報を取得するようなイメージです。

では実際にこの内部結合を行ってみましょう。
内部結合で他テーブルを結合
下記コマンドで内部結合でテーブルを結合させることができます。
mysql> select * from practice001.table1 inner join table2 on table1.id = table2.id;
+------+-----------+------+------+---------+
| id | name | age | id | country |
+------+-----------+------+------+---------+
| 1 | あああ | 11 | 1 | 日本 |
| 3 | ううう | 15 | 3 | 日本 |
+------+-----------+------+------+---------+
2 rows in set (0.00 sec)
少し解説しておきます。
select * from practice001.table1 inner join table2 on table1.id = table2.id;
select * from [データベース].[join元のテーブル] inner join [joinするテーブル] on [joinの条件(今回はtable1のidとtable2のidが同じもので指定)]
これで必要な情報を取得していきます。
内部結合で他テーブルからデータを取得
先ほど内部結合はできたのでそれを使って取得したいデータのみを取得してみましょう。仮に、id・名前・年齢・国の情報をまとめて取得したい場合は下記のように記述すれば良いです。
mysql> select table1.id,name,age,country from practice001.table1 inner join table2 on table1.id = table2.id;
+------+-----------+------+---------+
| id | name | age | country |
+------+-----------+------+---------+
| 1 | あああ | 11 | 日本 |
| 3 | ううう | 15 | 日本 |
+------+-----------+------+---------+
2 rows in set (0.00 sec)
先程の内部結合の元のデータから必要な項目のみを抽出しました。要はselectの後ろに取得したいものをつければ良いということです。
では今回の記事は以上です。他にも多数の記事を記載しているので是非興味があればサイト内見ていって下さい。
コメント