取得データの結合
UNIONは複数のSELECT文によってデータをそれぞれ取得し、その結果を結合した上で1つのデータとして取得する場合に使います。書式は次の通りです。
SELECT col_name1, ... FROM tbl_name1 UNION [ALL | DISTINCT] SELECT col_name2, ... FROM tbl_name2 UNION [ALL | DISTINCT] SELECT col_name3, ... FROM tbl_name3;
ベースとなるSELECT文の結果に、UNIONの後に記載したSELECT文の結果を結合します。結果として取得されるカラムは最初のSELECT文で指定したカラムとなります。
各SELECT文は同じ数のカラムの値を取得する必要があり、同じ位置にあるカラムのデータ型は一致している必要があります。
データが結合されるとデフォルトでは重複行は削除されます。重複行も削除せずに取得したい場合にはUNIONの後にALLを指定して下さい。(DISTINCTを指定すると重複行が削除されます。これはデフォルトの動作なのでDISTINCTは指定する必要はありません)。
サンプル
実際に試してみます。まず次のようなテーブルを作成します。
mysql> create table user (username varchar(10), address varchar(10));
mysql> create table request (name varchar(10), address varchar(10), d date);
mysql> create table seminar (sid int, name varchar(10), address varchar(10));
テーブルには次のようなデータを追加してあります。
では3つのテーブルから名前と住所に関するカラムのデータをそれぞれ取得し、結合した上で取得します。次のように入力します。
mysql> select username, address from user -> union select name, address from request -> union select name, address from seminar;
今回はALLを指定していませんので結合されたデータの重複行は削除されています。
では重複行も削除せずに取得してみます。次のように入力します。
mysql> select username, address from user -> union all select name, address from request -> union all select name, address from seminar;
データの重複行を削除せずに結合されたデータを取得しました。
( Written by Tatsuo Ikura )