8.テーブルの結合とアイリアス

■結合
SELECT * FROM [TableName1],[TableName2] WHERE [TableName1].[ColName1] = [TableName2].[ColName2];

[TableName1]と[TableName2]を結合し、[TableName1].[ColName1]と[TableName2].[ColName2]が同じ値の場合表示する。

WHERE などで条件を指定しない場合、互いのテーブル総当りで表示される。

■エイリアスの利用
エイリアスを利用してコーディングを節約。

SELECT * FROM [TableName1] AS [A],[TableName2] AS [B] WHERE [A].[ColName1] = [B].[ColName2];

※ASは省略可能

■結合(CROSS JOIN)
総当りで結合

SELECT * FROM [TableName1] CROSS JOIN [TabelName2];

■結合(NATURAL JOIN)
同じ列名で結合

SELECT * FROM [TableName1] NATURAL JOIN [TabelName2];

■結合(JOIN~ON)
条件で結合

SELECT * FROM [TableName1] JOIN [TableName2] ON [TableName1].[ColName1] = [TableName2].[ColName1];

■結合(JOIN~USING)
値が等しいことを条件に結合

SELECT * FROM [TableName1] JOIN [TableName2] USING([ColName1]);
※前段ONの結果と似ているが、[ColName1]は結果に1度しか現れない。

■結合(OUTER JOIN)
結合する相手のデータが存在しない場合NULLで補完し表示。

SELECT * FROM [TableName1] LEFT OUTER JOIN [TableName2] USING([ColName]);
SELECT * FROM [TableName1] LEFT OUTER JOIN [TableName2] ON [TableName1].[ColName1] = [TableName2].[ColName1];
SELECT * FROM [TableName1] NATURAL LEFT OUTER JOIN [TableName2];
※LEFT=>右のテーブル[TableName2]の値がなくても、左のテーブル[TableName1]のレコードはすべて表示されます。
※RIGHTでは逆の考え方。
※FULLで左右のテーブルのレコードを残すことができる。


戻る | CGI'sトップへ戻る