FULL (OUTER) JOIN (完全外部結合)を使ってデータを取得する
FULL (OUTER) JOIN (完全外部結合)を使ってデータを取得する
前回は 「 RIGHT (OUTER) JOIN (右外部結合)を使ってデータを取得する 」 で、RIGHT JOIN を使って、二つのテーブルを結合してデータを取得しました。
OUTER JOIN (外部結合) には LEFT, RIGHT, FULL の 3 種類があります。
今回は残りの FULL (OUTER) JOIN (完全外部結合) を使って、二つのテーブルを結合して値を取得してみましょう。
まだ生成していなければ、こちら のスクリプトを実行して、Student・Test・TestResult テーブルを生成しておいてください。
FULL JOIN (完全外部結合)
FULL JOIN を使って、 [左テーブル] FULL JOIN [右テーブル] ON ... のように結合すると、ON で指定した条件がマッチする [左テーブル] と [右テーブル] のレコードに加えて、[左テーブル] のマッチしないレコードと、[右テーブル] のマッチしないレコードが取得できます。
次のような Student テーブルと TestResult テーブルがあります。
[ Student テーブル ]
[ TestResult テーブル ]
FULL JOIN を使って、Student テーブルと TestResult テーブル を StudentID で結合した結果は以下の通りです。
SELECT S.*, TR.* FROM Student AS S FULL JOIN TestResult AS TR ON S.StudentID = TR.StudentID;
[ 実行結果 ]
黄色い枠で囲まれた部分が StudentID がマッチした部分、赤い枠が Student テーブルのマッチしなかったレコード、緑の枠が TestResult テーブルのマッチしなかったレコードです。
好みかもしれませんが、私は開発をしていて FULL JOIN はあんまり使う機会がないです。 INNER JOIN, LEFT JOIN がほとんどで、まれに CROSS JOIN を使うという感じです。
次は、CROSS JOIN (クロス結合)を使ってデータを取得してみましょう。