Quelle est la différence entre UNION et UNION ALL.
Réponses
Trop de publicités?UNION supprime les doublons (où toutes les colonnes dans le résultat est le même), de l'UNION de TOUS ne pas.
Il y a un gain de performance lors de l'utilisation de l'UNION vs UNION, puisque le serveur de base de données doit faire des travaux pour supprimer les lignes en double, mais en général, vous ne voulez pas les doublons (en particulier lors de l'élaboration de rapports).
UNION Exemple:
SELECT 'foo' AS bar UNION SELECT 'foo' AS bar
Résultat:
+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)
L'UNION de TOUS exemple:
SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar
Résultat:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
À la fois de l'UNION et UNION ALL concaténer le résultat de deux types de Sql. Ils diffèrent dans leur façon de gérer les doublons.
-UNION effectue un DISTINCT sur l'ensemble de résultats, en éliminant les lignes en double.
-L'UNION de TOUS ne supprime pas les doublons, et il est donc plus rapide que de l'UNION.
Remarque: lorsque vous utilisez cette commande toutes les colonnes sélectionnées doivent être du même type de données. Exemple: Si nous avons deux tables, 1) et 2) le Client
1) Employé données de la table:
2) le Client les données de la table:
3) l'UNION Exemple (Il supprime tous les enregistrements en double):
4) l'UNION de TOUS Exemple (Il vient de concaténer des dossiers, de ne pas éliminer les doublons, de sorte qu'il est plus rapide que l'UNION):
UNION supprime les doublons, alors que l'UNION de TOUS ne pas.
Afin de supprimer les doublons de l'ensemble de résultats doivent être triées, et cela peut avoir un impact sur les performances de l'UNION, selon le volume de données à trier, et les paramètres de différents SGBDR paramètres ( Pour Oracle PGA_AGGREGATE_TARGET avec WORKAREA_SIZE_POLICY=AUTO ou SORT_AREA_SIZE et SOR_AREA_RETAINED_SIZE si WORKAREA_SIZE_POLICY=MANUEL ).
Fondamentalement, le tri est plus rapide si elle peut être réalisée dans la mémoire, mais la même mise en garde sur le volume de données s'applique.
Bien sûr, si vous avez besoin de données retourné sans doublons, alors vous devez utiliser de l'UNION, selon la source de vos données.
J'aurais commenté sur le premier post pour qualifier les "est beaucoup moins performant" commentaire, mais de l'insuffisance de la réputation (points) de le faire.