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.
