【これだけ】SQLのSELECT文の結果の統合【現役エンジニアが解説】

PROGRAM

今回は、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のレコードの有無で判断すれば一目瞭然です。