ALL)エクセルVBAでデータベースを扱うためのSQL入門です。前回のJOINでは複数のテーブルを横に結合するものでしたが、SQLではデータを縦に連結することもできます。SQLのSELECTした結果は1つのテーブルと同様に見ることができます。SELECTに書かれているカラムリスト、このカラムを持った新しいテーブルとして扱えます。SELECTを複数書いて複数の新しいテーブルを作成し、それを縦に連結/統合するイメージになります。これを行うには、集合演算子(UNION等)を使います。使用するテーブル定義は以下になります。全テーブル定義とテーブル自動作成VBAデータベースの正規化とマスタの作成で作成した全テーブル定義と、テーブル名変更と列追加(ALTERTABLE)とテーブル自動作成で作成したテーブル自動作成VBAを掲載しておきます。エクセルVBAでデータベースを扱うためのSQL入門です。前回までにテーブルを作成したり、削除したりできるようになりました。集合演算:データの統合方法2つの集合の集合演算には、何通りかあります。和集合:UNION差集合:EXEPT積集合:INTERSECTUINION以外は、サポートされていないDBも多くあります。SQLで最も頻繁に使われ、かつ、ほとんどのDBで共通にサポートされている和集合(UNION)についてのみ詳細に解説します。差集合は必要となる場合は少ないでしょう。JOINでほとんどの場合代替え可能です。EXCEPT、INTERSECTともに、使い方はUNIONと同様で文法的にはUNIONを書き換えれば使えます。2つのデータを和集合として1つのデータにする場合、SQLでは2通りあります。和集合:UNION2つのデータの和集合になります。重複しているデータは排除されます。ALLALLを指定することで、重複しているデータは排除されず、全体集合になります。SQLの集合演算についてUNION等の集合演算は、SELECT文とSELECT文とつなげることができます。それぞれのSELECTを1つの集合として、集合演算した結果が返されます。集合演算の結果に対して、さらに次のSELECT文を集合演算することもできます。3つ以上のSELECT文の集合演算が可能という事です。注意点として、それぞれのSELECT文の選択リスト(カラム名や式)の列数およびデータ型は一致させる必要があります。列数やデータ型が違う場合はエラーとなります。SELECTにより、選択する列数が過不足がある場合、不足している列にはNULLや定数値を指定し列数を合わせてください。BY)する場合は、必ず最後のSELECTに記述します。ソートは、UNION等の集合演算の全ての結果に対して行われます。少なくともSQLiteでは、どのSELECT文の列名でも動作するようですが、このような使い方は避けるべきでしょう。それぞれのSELECTの列名が違う場合は、エイリアスで統一した名称にしておくことをお勧めします。BYに列名ではなく、選択列番号を指定する方法がサポートされているますが、これは使用するべきではないでしょう。SELECT文[ALL]を省略すれば和集合、ALLを指定すれば全体集合になります。SELECT文SQLiteでは、ALLが指定できないようです。EXCEPTもINTERSECTもサポートしていないDBもあります。使用する場合はDBごとに良く確認してください。差集合は必要となる場合は少ないでしょう。JOINでほとんどの場合代替え可能です。和集合:UNION以下のクラスを使用して、UNIONを使ったSQLを発行するVBAサンプルです。VBAクラスの全コード:データの取得SQL入門の「データの取得:条件指定(SELECT,WHERE)」時点のVBAクラスの全コードです。Sub重複データはまとめられ(排除され)ます。'10001'このデータは、どちらのSELECTでも対象となりますが、出力は1件となっています。全ての列のデータが一致している場合に重複データとみなされます。1列でもデータが違う場合は別のデータと判定されます。Sub重複データも全て出力されます。データが重複して出力されていることが確認できます。複数のSELECT結果を統合の最後に今回は、和集合UNIONについて解説しました。簡単な例題ではUNIONの有用性はなかなか感じられないかもしれませんが、データベースからSQLでデータ抽出しているといずれ必ず必要になってくるものです。UNIONの注意点と、ALLの有無による違いはしっかりと把握しておいてください。次回からは、いったんSELECTから離れて、データベースの更新および削除について解説しておきます。その後は、SELECTのより高度な使い方についての説明に進みます。ALL)このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。複数のSELECT結果を統合このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。