MYSQL における JOIN句メモ

よく使いそうな JOIN句の基本構文。

このようなテーブルがあったとする

a_table

  • id
  • name

b_table

  • id
  • a_table_id
  • name

このようなデータがあったとする

a_table

INSERT INTO `a_table` (`id`, `name`) VALUES
(1, 'あ'),
(2, 'い'),
(3, 'う'),
(4, 'え'),
(5, 'お');

b_table

INSERT INTO `b_table` (`id`, `a_table_id`, `name`) VALUES
(1, 3, 'three'),
(2, 5, 'five'),
(3, 3, 'three 2'),
(4, 100, 'one hundred');

INNER JOIN

条件(a.id = b.a_table_id)を満たすレコードのみを対象にする。

SELECT a.*, b.a_table_id, b.name as b_name 
FROM a_table as a 
INNER JOIN b_table as b ON a.id = b.a_table_id 
WHERE 1;

結果

id name a_table_id b_name
3 3 three
5 5 five
3 3 three 2

LEFT OUTER JOIN (LEFT JOIN)

左側のテーブル(a_table)を基準にして、
テーブルを結合する。

結合した結果、
一致しないデータ箇所は NULL になる。

SELECT a.*, b.a_table_id, b.name as b_name 
FROM a_table as a 
LEFT OUTER JOIN b_table as b ON a.id = b.a_table_id 
WHERE 1;

結果

id name a_table_id b_name
1 NULL NULL
2 NULL NULL
3 3 three 2
3 3 three
4 NULL NULL
5 5 five

RIGHT OUTER JOIN (RIGHT JOIN)

右側のテーブル(b_table)を基準にして、
テーブルを結合する。

結合した結果、
一致しないデータ箇所は NULL になる。

SELECT a.*, b.a_table_id, b.name as b_name 
FROM a_table as a
RIGHT OUTER JOIN b_table as b ON a.id = b.a_table_id 
WHERE 1;

結果

id name a_table_id b_name
3 3 three
5 5 five
3 3 three 2
NULL NULL 100 one hundred