UNION ALL句

二つのSELECT文の間に「UNION ALL」と記述することで、それぞれの文が抽出したレコードセットを連結して一つの出力として統合する。三つ以上のSELECT文を連結する場合は、各文の間に「UNION ALL」を繰り返し記述する。
連結する各SELECT文は、出力する列の数と並び順が一致している必要があり、対応する列同士のデータ型も互換性を備えていなければならない。列名は異なっていても問題なく、結合後の結果には最初のSELECT文の列名が適用される。結果全体を並べ替えたい場合は、末尾のSELECT文の後にORDER BY句を一度だけ記述する。
UNION ALL句は、同じ構造を持つ複数のテーブルにデータが分散している場合に特に有用である。例えば、年度別や支店別に分かれたテーブルの内容を一覧として統合したい場合、各テーブルへのSELECT文をUNION ALL句で繋ぐだけで目的を達成できる。JOIN句も表を結びつけることができるが、列を横に結び付けるため、UNION ALL句とは目的も結果も異なる。
通常のUNION句自体は統合後に重複を判定して一意の行だけを残すため、データの並べ替えや比較といった追加処理が必要になる。UNION ALL句はその処理を一切行わず取得した行をそのまま連結するため、処理速度はUNION句より高速である。重複が生じないことが事前に分かっている場合や、重複を含めてすべての行を取得したい場合は、UNION ALL句を選択するのが一般的とされる。
SQLの集合演算にはUNION ALL句のほか、UNION句やINTERSECT句、EXCEPT句などがあり、いずれも複数の問い合わせ結果に対して集合演算を行う仕組みである。UNION句はSQL標準で定義されており、Oracle DatabaseやSQL Server、PostgreSQL、MySQL、SQLiteなど主要なデータベース管理システムで共通して利用できる。ただし、型変換の規則や一部の構文には製品ごとの差異がある。