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 左表.列名 = 右表.列名;