①列の数とデータ型は等しくする
UNION演算子によって結合される結果セットの列数とそれぞれの列のデータ型は等しくなければならない。
※片方の結果にしかない列を結合したい場合はもう片方の列の結果にダミー列としてNULLを加える必要がある。→このページの一番下のサンプルコード2参照
②ORDER BY句は最後に記述する
UNION演算子を利用した場合、必ずしも統合される同じ列に対して同じ列名が付けられているとは限らないため、列指定は列番号(1,2)で指定する。ちなみに番号によるソートキーの指定はUNION演算子を使用しない場合でも利用が可能。
③UNION ALL 演算子の方が早い
UNION演算子では両テーブル上に重複データが存在する場合、これを除去したうえで結果を出力するため、DB内部でソートをかけるためパフォーマンスが低下する。両テーブルに重複があっても問題ない場合は重複データも全て出力するUNION ALL演算子を使用した方が早い。
※DISTINCTキーワード、GROUP BY句、INTERSECT演算子等を利用した場合も暗黙のソート処理が発生する。
■サンプルコード1
SELECT u.l_name_kana ,u.f_name_kana FROM usr AS u UNION SELECT e.l_name_kana ,e.f_name_kana FROM employee as e ORDER BY 1,2 ;
■サンプルコード2
SELECT u.l_name_kana ,u.f_name_kana ,NULL FROM usr AS u UNION SELECT e.l_name_kana ,e.f_name_kana ,e.sex FROM employee as e ORDER BY 1,2 ;