MySQL 表の結合

表の結合

~ 種類 ~ * 交差結合 ... 2つの表を単純につなぎ合わせる * 内部結合(等価結合) ... 2つの表の対応している列の値が等しい行をつなぎ合わせる * 外部結合 ... 2つの表のうち、一方の表に対応している列に等しい値がなくても、もう一方の表の全ての行を出力 * 自己結合 ... 1つの表を自分自身とつなぎ合わせる * 和結合 ... 2つの表のうち、どちらかに含まれる行を全て出力する

内部結合(等価結合)

2つの表に対応している列の値が等しい行をつなぐ

FROM句


SELECT
表名1.列名1,
表名2.列名2,....
FROM 表名1
INNER JOIN 表名2
ON 表名1.列名=表名2.列名

* 列名が一方の表にしかない場合は表名を指定しなくてもよい

SELECT
列名1,
列名2,....
FROM 表名1
INNER JOIN 表名2
ON 表名1.列名=表名2.列名

例 ( 複数のテーブルを結合する )

SELECT
H.hoge_name,
F.fuga_name,
N.num_code
FROM
(hoge AS H
INNER JOIN fuga AS F
ON H.abc = F.abc)
INNER JOIN num AS N
ON F.xyz = N.xyz; 

* 複数のテーブルから結合させる場合は「INNER JOIN ON」を繰り返す

*( )で優先順位を指定(各表同士(fuga,num)に同じ列がなければ優先順位不要)

WHERE句


SELECT
表名1.列名1,
表名2.列名2,...
FROM 表名1, 表名2
WHERE 表名1.列名=表名2.列名;

外部結合

2つの表のうち、一方の表に対応している列に等しい値がなくても、もう一方の表の全ての行を出力

左外部結合


SELECT
    左表.列名1,
    右表.列名2,
    右表.列名3,...
FROM 左表
LEFT OUTER JOIN 右表
ON 左表.列名 = 右表.列名;

右外部結合


SELECT
    左表.列名1,
    右表.列名2,
    右表.列名3,...
FROM 左表
RIGHT OUTER JOIN 右表
ON 左表.列名 = 右表.列名;