SELECT ... UNION [ALL | DISTINCT] SELECT ... [UNION [ALL | DISTINCT] SELECT ...]
UNION
est implémentée en MySQL 4.0.0.
UNION
est utilisé pour combiner le
résultat de plusieurs requêtes SELECT
en
un seul résultat.
Les colonnes listées dans la partie
select_expression
du
SELECT
doivent être du même type. Les
noms de colonnes utilisés dans le premier
SELECT
seront utilisé comme nom de champs
pour les résultats retournés.
Les commandes SELECT
sont des sélections
normales, mais avec les restrictions suivantes :
Seule la dernière commande SELECT
peut
avoir une clause INTO OUTFILE
.
HIGH_PRIORITY
ne peut être utilisée
avec les commandes SELECT
qui ne font
pas partie de l'UNION
. Si vous la
spécifiez pour la première commande
SELECT
, elle n'aura pas d'effet. Si
vous la spécifiez pour toute autre commandes
SELECT
suivante, une erreur de syntaxe
sera signalée.
Si vous n'utilisez pas le mot clef ALL
pour
l'UNION
, toutes les lignes retournées
seront uniques, comme si vous aviez fait un
DISTINCT
pour l'ensemble du résultat. Si
vous spécifiez ALL
, vous aurez alors tout
les résultats retournés par toutes les commandes
SELECT
.
Si vous voulez utiliser un ORDER BY
pour le
résultat final de UNION
, vous devez
utiliser des parenthèses :
(SELECT a FROM nom_de_table WHERE a=10 AND B=1 ORDER BY a LIMIT 10) UNION (SELECT a FROM nom_de_table WHERE a=11 AND B=2 ORDER BY a LIMIT 10) ORDER BY a;
Note : vous ne pouvez pas
mélanger les clauses UNION ALL
et
UNION DISTINCT
dans la même requête. Si
vous utilisez ALL
dans une des
UNION
, alors elle devra être utilisée
partout.
Les types et longueurs des colonnes du jeu de résultat de
UNION
prend en compte les valeurs lues dans
tous les SELECT
. Avant MySQL 4.1.1, une
limitation de UNION
est que seules les
valeurs du premier SELECT
étaient
utilisée pour déterminer le type de résultats, et leur
taille. Cela peut conduire à un raccourcissement de la valeur
si, par exemple, le second SELECT
trouvait
des valeurs plus grandes que le premier
SELECT
:
mysql> SELECT REPEAT('a',1) UNION SELECT REPEAT('b',10);
+---------------+
| REPEAT('a',1) |
+---------------+
| a |
| b |
+---------------+
Cette limitation a été supprimée en MySQL version 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.