SELECT ... UNION [ALL] SELECT ... [UNION SELECT ...]
UNION
は MySQL 4.0.0
で導入されました。
UNION
は、多くの
SELECT
ステートメントを 1
つの結果セットに結合するために使用します。
SELECT
の
select_expression
部分のカラムリストには、同じ型のカラムを指定します。最初の
SELECT
クエリで指定したカラム名が、返される結果のカラム名として使用されます。
これらの SELECT
コマンドは通常の SELECT
コマンドですが、次の制限が適用されます。
最後の SELECT
コマンドにのみ
INTO OUTFILE
を指定できる。
UNION
にキーワード
ALL
を付けないと、総結果セットに対して
DISTINCT
を指定した場合と同じように、重複しない一意なレコードだけが返されます。ALL
を指定すると、実行されたすべての
SELECT
ステートメントから、一致するすべてのレコードが返されます。
UNION
の総結果に対して
ORDER BY
を適用する必要があるときは、かっこを使用します。
(SELECT a FROM table_name WHERE a=10 AND B=1 ORDER BY a LIMIT 10) UNION (SELECT a FROM table_name WHERE a=11 AND B=2 ORDER BY a LIMIT 10) ORDER BY a;
UNION
の結果セット内のカラムの型と長さでは、すべての
SELECT
ステートメントで取り出された値が考慮されます。
MySQL 4.1.1 より前のバージョンの
UNION
では、最初の
SELECT
で使用された値のみに基づいて結果の型と長さが決まる、という制約がありました。
この場合、たとえば、最初の
SELECT
の値よりも長い値が 2
番目の SELECT
で取り出されると、切り捨てが行われることがあります。
mysql> SELECT REPEAT('a',1) UNION SELECT REPEAT('b',10);
+---------------+
| REPEAT('a',1) |
+---------------+
| a |
| b |
+---------------+
MySQL 4.1.1 以降、この制約はなくなりました。
mysql> SELECT REPEAT('a',1) UNION SELECT REPEAT('b',10);
+---------------+
| REPEAT('a',1) |
+---------------+
| a |
| bbbbbbbbbb |
+---------------+
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.