Maison >base de données >tutoriel mysql >Quelle est la différence entre UNION et UNION ALL de SQL ?
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!