【これだけ】SQLのSELECT文の結果の統合【現役エンジニアが解説】
今回は、SQLのSELECT文の結果の統合について、重複レコードを省く場合と省かない場合に分け、簡単に解説していきます。
重複レコードを省く場合の統合
抽出カラムの数と性質が同じであれば、2つ以上のSELECT文の結果を統合することが可能です。
SELECT user_name FROM users1 UNION SELECT user_name FROM users2;
ここで登場するものがUNIONというものです。
UNIONでは、前後のSELECT文の結果を、重複を省いて、統合することができます。
元々のテーブルの性質や統合の目的にもよりますが、重複を省いて統合するケースは多いので、UNIONはよく使われます。
重複レコードを省かない場合の統合
UNIONは重複を省いて統合してしまうので、ありのままに統合することができません。
SELECT user_name FROM users1 UNION ALL SELECT user_name FROM users2;
重複を省きたくない場合の統合で活躍するものがUNION ALLというものです。
UNIONにALLが付くと、重複を省かずに、二つのSELECT文の結果をそのまま統合することができるのです。
単純にレコードの数を尊重して、二つのSELECT文の結果の全件のレコードを合わせたい場合はこちらを利用します。
統合を使えばSQLだけで差異チェックが可能
統合の用途は単純に複数のSELECT文の結果のレコードを並べるだけにとどまりません。
例えば、バックアップ用に本物と全く同じ構造のテーブルがあり、内容を日々そちらに同期しているとしましょう。
このような状況下で何かトラブルが発生し、本物とバックアップテーブルの差異をチェックしたいとき等にUNIONが使えます。
2つのテーブルをUNIONで統合した結果のレコード数と、本物のテーブルのレコード数をチェックすれば、差異の有無を確認できます。
仮に差異が発生した場合には、具体的にどのレコードに差異があるかは、UNION ALLで統合した後に主キーでグループ化しカウントが1のレコードの有無で判断すれば一目瞭然です。