複雑な統合処理(CSVファイルをADOで扱う⑰)

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

複雑な統合処理

前回は、UNION ALLを使って複数のCSVファイルを統合してみました。ADOを使うと複数のファイルをまとめる事もできるんですね。ところでUNION ALL以外にもUNIONを使うとCSVファイルを統合できるのですが、こちらは少し動きが違います。今回はコチラをご紹介します。

f:id:HiroCom777:20211106170722j:plain

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

CSV_ReaderSQL110.zip - Google ドライブ

UNIONとUNION ALLの違い

それでは早速行ってみましょう。今回使うCSVファイルは以下の2つになります。

CSVファイル_1(File_1.csv

"クラス","番号"
"A","1"
"B","1"
"C","1"
"A","3"
"B","3"
"C","3"
"A","2"
"B","2"
"C","2"

CSVファイル_2(File_2.csv

"クラス","番号"
"D","1"
"E","1"
"F","1"
"A","2"
"B","2"
"C","2"

まずは、UNION ALLを使って2つのファイルを1つにまとめてみようと思います。ツールでファイルのあるフォルダーを指定しておいて、SQLコマンド欄に以下を入力して実行ボタンを押してみてください。

SELECT *  FROM [File_1.csv]
UNION ALL
SELECT *  FROM [File_2.csv]

結果は以下の様になりました。2つのファイルを単純に繋げた形です。

クラス 番号
A 1
B 1
C 1
A 3
B 3
C 3
A 2
B 2
C 2
D 1
E 1
F 1
A 2
B 2
C 2

続いてUNION ALLの部分をUNIONに変えて実行してみましょう。

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

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

クラス 番号
A 1
A 2
A 3
B 1
B 2
B 3
C 1
C 2
C 3
D 1
E 1
F 1

UNIONでまとめた方は、一番左の列で昇順に並び変えられているようです。次の列も同じクラスの値内で並び変えられています。また、表示された行数が少ないですね。どうしたんでしょうか?

UNIONの機能

UNIONUNION ALLの一番の違いは、重複行を削除するところにあります。今回の例では2つのファイルで以下の部分が重複していますので、この部分が1つにまとめられました。

クラス 番号
A 2
B 2
C 2

また、UNIONでは統合した結果が右の列から順に昇順に並び変えられます。最終的に一番左の列の並びで結果が表示されます。任意の列で並び変えたい場合は、UNION ALLと同様に最後のSELECT文の最後にORDER BYを付与してください。今回の場合、番号順に並べたい場合は以下のSQLになります。

SELECT *  FROM [File_1.csv]
UNION
SELECT *  FROM [File_2.csv] ORDER BY 番号 ASC

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

クラス 番号
A 1
B 1
C 1
D 1
E 1
F 1
A 2
B 2
C 2
A 3
B 3
C 3

UNION使用時の注意点

UNIONで統合するテーブルの条件もUNION ALLと同じです。

  1. SELECTで指定する列のデータ型が同じか、変換可能である
  2. SELECTで指定する列数が同じ

また、今回のご紹介の通りUNIONでは統合した結果から並び替え、重複削除の処理を行いますので実行速度は遅くなります。重複がないと解っている場合にはUNION ALLを使う、大きなテーブルでは使わない(使う前にできるだけテーブルを小さくする)などの工夫が必要になります。

次回は結合

今回はUNIONをご紹介しました。性質をよく理解した上で上手く使いましょう。次回は複数ファイルの結合についてご紹介したいと思います。お楽しみに!!

hirocom777.hatenadiary.org

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