データテーブルの連結ー横方向1(完全外部結合)


テーブルとテーブルの連結には、縦方向(行が増える)と横方向(列が増える)の場合があります。
縦方向の場合は集合、横方向の場合は結合と言います。

結合には以下のパターンがあります。
 完全外部結合:共通しないレコードをすべて含めて列を増やす。
 右(左)外部結合:右(左)側のテーブルの共通しないレコードを含めて列を増やす。
 内部結合:共通するレコードを対象として列を増やす。

今回は、完全外部結合について、SAS プログラムと SQL、および Python (Pandas) をそれぞれ用いた例を紹介します。

行いたい操作は下記です。

A列をキーとして、値が一致するしないに関わらずすべてのレコードを取り出して、横方向に連結します。

① SAS プログラムでの完全外部結合

data table_3;
  merge table_1 table_2;
  by a;
run;

merge ステートメントで横に重ねることができます。
by に続く変数がキーとなります。

② SQL での完全外部結合

 create table  table_3 as
 select coalesce(table_1.A, table_2.A) as A, B, C 
 from table_1 full join table_2  on  table_1.A = table_2.A ;

SELECT 取り出す変数名 from データセット1 full join データセット2 on 結合条件

SELECT文で coalesce という関数を使ってます。与えられた引数のうち、NULLでない最初の引数を返します。
coalesce 関数につきましては、詳しくは下記リンクを参照下さい。
 https://doruby.jp/users/akio0911_on_rails/entries/SQL_coalesce_
 https://tech.adseed.co.jp/sql-coalesce
また、結合する2つのデータセットで同じ変数名を持っている場合、「データセット名.変数名」と書きます。

③ Python (Pandas) での完全外部結合

import pandas as pd
table_1 = pd.DataFrame({'A': [1, 2], 'B': ['AA', 'BB']})
table_2 = pd.DataFrame({'A': [2, 3], 'C': [10, 20]})
table_3 = pd.merge(table_1, table_2, on = "A", how="outer")

.merge で結合、on にキー列を指定、how で様式(完全外部なので "outer")を指定します。

出力結果

ちなみに how の様式指定では、 "inner" が内部結合、"left" ("right") が左 (右) 外部結合となります。

関連記事

データテーブルの連結-縦方向 1(異なる列名をそのまま残す場合)
データテーブルの連結-縦方向 2(異なる列名を統合する場合)
データテーブルの連結-縦方向 3(積集合と差集合)
データテーブルの連結-横方向 2(内部結合)
データテーブルの連結-横方向 3(左右の外部結合)
データテーブルの連結ー交差結合