ファイルの結合(CSVファイルをADOで扱う⑱)

CSVファイルをADOで扱う連載の18回目です。前回の記事はこちらになります。 hirocom777.hatenadiary.org

複数ファイルの結合

前回は、UNIONを使って複数のCSVファイルを統合してみました。

f:id:HiroCom777:20211114222510j:plain

今回は複数ファイルの結合についてご紹介しようと思います。

今回もSQLを指定してCSVファイルを確認できるツール(CSV_ReaderSQL)を使います。ツールは以下からダウンロードしてください。

CSV_ReaderSQL110.zip - Google ドライブ

ファイルの結合とは

ここで言うファイルの結合とは、複数のファイルの内容を組み合わせて新しい結果(テーブル)を得るということです。まずは、以下の2つのファイルで動かしてみましょう。

CSVファイル_1(File_1.csv

"X"
"A"
"B"
"C"

CSVファイル_2(File_2.csv

"Y"
"1"
"2"
"3"

次に、ツールでファイルのあるフォルダーを指定しておいて、SQLコマンド欄に以下を入力して実行ボタンを押してみてください。

SELECT * FROM [File_1.csv],[File_2.csv]

結果は以下の様になりました。

X Y
A 1
B 1
C 1
A 2
B 2
C 2
A 3
B 3
C 3

2つのファイルの要素が総当たりで出力されました。この様な結合を交差結合と言います。FROMの後に複数のテーブル(ファイル名)をコンマで区切って記述すると、交差結合の出力を得ることができます。でも、これはどのように使うんでしょうか。次に具体例をご紹介したいと思います。

具体的な使用例

それでは具体的なデータを使って使用例をご紹介します。従業員の名前と部署名が書いてある名簿ファイル(名簿.csv)と、部署別の電話番号が書いてある部署リストファイル(部署リスト.csv)があります。ここから従業員と部署名、電話番号のリストを作ってみましょう。

名簿.csv

"名前","部署名"
"大山洋子","工務1課"
"山田太郎","営業3課"
"小田京子","営業2課"
"秋山昇","工務3課"
"大木みすず","工務2課"
"一ノ瀬恵美","営業1課"
"宮崎進","工務2課"
"鈴木麻衣","営業2課"
"青山ゆきお","営業3課"

部署リスト.csv

"部署名","電話番号"
"営業1課","XXX-12345"
"営業2課","XXX-67890"
"営業3課","XXX-88888"
"工務1課","YYY-00000"
"工務2課","YYY-22222"

ここで、以下のQSLを実行すると・・・

SELECT * FROM [名簿.csv],[部署リスト.csv]

結果は以下の様になりました。(注:量が多いので先頭部分だけ掲載します。)

名前 名簿#csv.部署名 部署リスト#csv.部署名 電話番号
大山洋子 工務1課 営業1課 XXX-12345
大山洋子 工務1課 営業2課 XXX-67890
大山洋子 工務1課 営業3課 XXX-88888
大山洋子 工務1課 工務1課 YYY-00000
大山洋子 工務1課 工務2課 YYY-22222
山田太郎 営業3課 営業1課 XXX-12345
山田太郎 営業3課 営業2課 XXX-67890

列名の部署名が2つのファイルで重複しているので少し表記が変換されています。それにしても、すごい量のデータです。2つのファイルの要素が総当たりですから当たり前ですね。でも、冷静になって考えてみましょう。このうち必要なものは、それぞれのファイルの部署名が同じものだけです。以前ご紹介したWHEREで条件を指定してあげればよさそうです。SQLは以下の様になります。

SELECT 名前,a.部署名,電話番号
 FROM [名簿.csv] AS a,[部署リスト.csv] AS b WHERE a.部署名 = b.部署名

 テーブル名 AS 文字列で、テーブル名(ここではCSVファイル名)を文字列に置き換えることができます。文字列.列名でテーブル内の列を指定できます。実行してみると、以下の様になりました。

名前 部署名 電話番号
一ノ瀬恵美 営業1課 XXX-12345
鈴木麻衣 営業2課 XXX-67890
小田京子 営業2課 XXX-67890
青山ゆきお 営業3課 XXX-88888
山田太郎 営業3課 XXX-88888
大山洋子 工務1課 YYY-00000
宮崎進 工務2課 YYY-22222
大木みすず 工務2課 YYY-22222

従業員と部署名、電話番号のリストができました。この様に交差結合の結果から条件を指定して必要なデータに絞り込むこととを内部結合と言います。

次回はINNER JOIN

内部結合って結構使えそうじゃないですか!!でも、実はちょっと効率悪いんですよね。次回はちょっと楽になる方法をご紹介します。お楽しみに!!

hirocom777.hatenadiary.org

CSVファイルをADOで扱う連載記事はコチラからどうぞ