【初心者用】SQLのテーブル結合についてまとめてみた

今回は現場で使用するSQLの技術である「テーブル結合」について記事をまとめてみた。


参考サイト

MySQL入門4 テーブル結合とは? 内部結合と外部結合を解説!
https://snome.jp/database/db-intro-4/

初級編10 SQL Serverのテーブル結合(JOIN)の基礎
https://kaya-soft.com/sqlserver2008-toranomaki/beginner/jointable/

内部結合(INNER JOIN句)
https://www.dbonline.jp/sqlite/join/index1.html

外部結合(OUTER JOIN句)
https://www.dbonline.jp/sqlite/join/index2.html

1. テーブル結合とは?

データベースは、テーブル単位でまとめている。

テーブル同志のデータが紐付いている時に、データを取得して、データの紐付けを行う。

このような場合にSQLでは、テーブル同士を結合する機能を有している。

これが「テーブル結合」である。


例えば、商品の情報を管理している productテーブルと、顧客の情報を管理している userテーブルがあるとする。

この2つのテーブルは、ECショップサイトのデータベースで管理しているが、商品の情報と、顧客の情報を同時に取得したい場合を想定すると、 productテーブルに product_idカラム、 userテーブルに、 user_id カラムを用意する(idに紐ずくカラムを2つのテーブルに用意する) このidに関する情報を2つのテーブルに紐付けることで、どの商品が誰なのかを判別することができる。


productテーブル idカラム userテーブルのuser_ idカラム

この2つのテーブルは紐ずいている

prductテーブルのidカラムと、 userテーブルの user_idカラムが一致するデータを結合して、それぞれのテーブルの情報を取得することができる。

2. テーブル結合の種類

テーブル結合は、「内部結合」と「外部結合」の2種類がある。

「内部結合」は、指定したそれぞれのテーブルのカラムが値が一致する データだけを取得する方法

一方で、「外部結合」は、指定したそれぞれのテーブルのカラムの値が一致するデータだけでなくどちらかのテーブルだけにデータがある場合も取得する方法

3. 内部結合

では実際に内部結合を操作してみよう

(内部結合は、2つのテーブルの値が一致するデータを結合して取得する結合)

今回は、 userテーブルとproductテーブルの2つのテーブルを作成する


ではまずuserテーブルを作成しよう。

create table user (id int(10), name varchar(20), area varchar(20));

idカラム、nameカラム、 areaカラムを作成


次に productテーブルを作成する

create table product (product_id int(10), name varchar(20), price int(10));

product_idカラム、 nameカラム、 priceカラムを作成


2つのテーブルにデータを追加していく

insert into user (id, name, area) values (1, '佐藤次郎', '静岡県'), (2, '田沢英二', '東京都'), (3, '鈴木吾郎', '愛知県'), (4, '山田花子', '埼玉県');

userテーブルの作成

続いて productテーブルにデータを追加する

insert into product (product_id, name, price) values (1, 'コッペパン', 250), (3, 'クリームパン', 130), (4, 'カツカレーパン', 400), (5, '海老カツパン', 750);

productテーブルの作成

では2つのテーブルが作成できたため、内部結合の操作をしていく

内部結合の構文

SELECT カラム名 FROM テーブル名 INNER JOIN テーブル名ON (結合条件)

userテーブルの idと productテーブルを内部結合する

select * from user inner join product on id = product_id;



このように条件が一致しているデータのみを結合して取得することができた

userテーブルの nameカラムと productテーブルの nameカラムが同じ名前のカラムのため、 productテーブルのnameカラムを product_nameカラムに変更する

カラム名を変更するときは、 ALTER TABLE文を使う

ALTER TABLEの構文

ALTER TABLE テーブル名 CHANGE COLUMN 元々のカラム名 変更するカラム名 型名

alter table product change column name product_name varchar(20);




productテーブルのカラムが product_nameカラムに変更されていることがわかる

再度 内部結合をして userテーブルのidカラムと、 productテーブルの product_idカラムを取得する

select id, name, area from user inner join product on id = product_id;

4. 外部結合

(外部結合は、2つのテーブルの値が一致するデータも一致しないデータも結合して取得する)

外部結合には、左外部結合と右外部結合の2種類がある。

左外部結合は、左側に書いた方をメインテーブルにする外部結合 (右側のテーブルだけにしか存在しない値は取得されない)

右外部結合は、逆に右側で書いた方をメインテーブルにする外部結合

5. 左外部結合

では左外部結合を操作してみよう

左外部結合の構文

SELECT カラム名 FROM テーブル名 LEFT JOIN テーブル名 ON 結合する条件

select id, name, area from user left join product on id = product_id;

6. 右外部結合

次に右外部結合を操作していく

右外部結合の構文

SELECT カラム名 FROM テーブル名 RIGHT JOIN テーブル名 ON 結合する条件

select id, name, area from user right join product on id = product_id;


右外部結合の場合、productテーブルを基準にテーブルを結合するため、今回 productテーブルの product_id = 5は、 userテーブルに存在しないため、NULLが表示されている。

このように外部結合では、条件が一致していないコードは、NULLが取得される。

7. まとめ

今回は、テーブル結合について操作をしてみた。

実際の現場では、内部結合を使用するケースが多いので、しっかり実務で使えるように何回も操作をして慣れていこうと思う。