CSVファイルをADOで扱う連載の18回目です。前回の記事はこちらになります。 hirocom777.hatenadiary.org
複数ファイルの結合
前回は、UNIONを使って複数のCSVファイルを統合してみました。
今回は複数ファイルの結合についてご紹介しようと思います。
今回もSQLを指定してCSVファイルを確認できるツール(CSV_ReaderSQL)を使います。ツールは以下からダウンロードしてください。
CSV_ReaderSQL110.zip - Google ドライブ
ファイルの結合とは
ここで言うファイルの結合とは、複数のファイルの内容を組み合わせて新しい結果(テーブル)を得るということです。まずは、以下の2つのファイルで動かしてみましょう。
"X" "A" "B" "C"
"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
内部結合って結構使えそうじゃないですか!!でも、実はちょっと効率悪いんですよね。次回はちょっと楽になる方法をご紹介します。お楽しみに!!