Maison >base de données >tutoriel mysql >Quelle est la différence entre UNION et UNION ALL de SQL ?

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

Patricia Arquette
Patricia Arquetteoriginal
2025-01-23 11:37:37813parcourir

What's the Difference Between SQL's UNION and UNION ALL?

La différence entre UNION et UNION ALL en SQL

Les opérateurs UNION et UNION ALL en SQL sont utilisés pour combiner les résultats de plusieurs requêtes. Cependant, la principale différence entre les deux réside dans la manière dont ils gèrent les lignes en double.

UNION : éliminer les lignes en double

UNION est utilisé pour fusionner plusieurs résultats de requête et éliminer les lignes en double. Il compare les lignes en fonction des valeurs des colonnes et renvoie uniquement des lignes différentes. Cela signifie que si une ligne a la même valeur dans toutes les colonnes, elle n'apparaîtra qu'une seule fois dans le résultat combiné.

UNION TOUS : Conserver toutes les lignes

En revanche, UNION ALL ne supprime pas les lignes en double. Il concatène simplement les résultats de la requête, y compris les éventuels doublons. Ceci est utile lorsque vous souhaitez conserver toutes les lignes de diverses requêtes, que leurs valeurs de colonne correspondent ou non.

Impact sur les performances

L'utilisation de UNION au lieu de UNION ALL entraîne une surcharge de performances. En effet, la base de données doit effectuer un travail supplémentaire pour identifier et éliminer les lignes en double. Par conséquent, UNION ALL est généralement plus rapide que UNION, mais ce n'est pas toujours idéal lorsque les doublons doivent être supprimés.

Exemple : Identifier les lignes en double

Pour déterminer si des lignes sont des doublons, non seulement elles doivent être du même type, mais elles doivent également être compatibles. Différents systèmes SQL peuvent gérer cette compatibilité différemment. Par exemple, certains systèmes peuvent tronquer les longues colonnes de texte à des fins de comparaison, tandis que d'autres systèmes peuvent rejeter les comparaisons entre colonnes binaires.

Démo UNION :

L'exemple suivant combine deux requêtes, chacune renvoyant la même valeur 'foo' pour la colonne 'bar' :

<code class="language-sql">SELECT 'foo' AS bar
UNION
SELECT 'foo' AS bar</code>

Résultat :

<code>+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)</code>

Comme prévu, UNION supprime les lignes en double, ce qui donne une seule ligne contenant « foo ».

Démo UNION ALL :

En revanche, UNION ALL ne supprime pas les doublons :

<code class="language-sql">SELECT 'foo' AS bar
UNION ALL
SELECT 'foo' AS bar</code>

Résultat :

<code>+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)</code>

Il y a deux lignes dans le résultat combiné, y compris les doublons.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn