Quelle est la différence entre UNION et UNION ALL ?

La première clause récupère l'ensemble des résultats de deux requêtes puis enlève les doublons alors que la seconde ne les supprime pas.

Dans le langage SQL, les clauses UNION et UNION ALL permettent de combiner les résultats de deux requêtes différentes dans un seul ensemble de résultats. Les résultats utilisent les intitulés de colonne de la première requête. Elles n'ont toutefois pas le même fonctionnement, notamment sur la gestion des doublons.

La clause UNION récupère l'ensemble des résultats des deux requêtes puis enlève les doublons alors que la clause UNION ALL ne les supprime pas. Pour l'exemple, imaginons deux tables, l'une contenant des couleurs de bureaux et l'autre des couleurs de chaises.

couleur_bureau
id | couleur
1 | blanc
2 | noir
3 | rouge
couleur_chaise
id | couleur
1 | rouge
2 | jaune
3 | bleu</pre>

Si l'on ne sélectionne que les couleurs des deux tables avec la clause UNION, alors la couleur rouge n'apparaîtra qu'une seule fois. Avec la clause UNION ALL, elle sera visible deux fois.

SELECT couleur FROM couleur_bureau UNION SELECT couleur FROM couleur_chaise
<pre>&gt; couleur
blanc
noir
rouge
jaune
bleu
SELECT couleur FROM couleur_bureau UNION ALL SELECT couleur FROM couleur_chaise
&gt; couleur
blanc
noir
rouge
rouge
jaune
Bleu</pre>

Utiliser l'une ou l'autre des clauses a un impact différent sur les performances. Le fait d'utiliser la clause UNION oblige le système de base de données à analyser chaque enregistrement pour éliminer les doublons. Dans la majorité des cas, la clause UNION sera donc moins performante que la classe UNION ALL. Cependant le volume de données à traiter peut être beaucoup plus important avec la clause UNION ALL s'il y a beaucoup de doublons. Il est donc nécessaire que vous analysiez vos besoins pour savoir laquelle des deux clauses utiliser.

Divers