Quelle est la différence entre UNION
et UNION ALL
?
Quelle est la différence entre UNION
et UNION ALL
?
UNION
supprime les enregistrements en double (où toutes les colonnes des résultats sont identiques), UNION ALL
ne fait pas.
Il y a un coup de performance lors de l'utilisation UNION
au lieu de UNION ALL
, puisque le serveur de base de données doit faire un travail supplémentaire pour supprimer les lignes en double, mais généralement vous ne voulez pas les doublons (en particulier lors du développement de rapports).
SELECT 'foo' AS bar UNION SELECT 'foo' AS bar
Résultat:
+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)
SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar
Résultat:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
UNION et UNION ALL concaténent le résultat de deux SQL différents. Ils diffèrent dans la façon dont ils gèrent les doublons.
UNION effectue un DISTINCT sur le jeu de résultats, en éliminant les lignes en double.
UNION ALL ne supprime pas les doublons, et donc plus rapidement que UNION.
Remarque: Lors de l'utilisation de ces commandes, toutes les colonnes sélectionnées doivent avoir le même type de données.
Exemple: Si nous avons deux tables, 1) Employé et 2) Client
UNION
supprime les doublons, alors que UNION ALL
ne fait pas.
Pour supprimer les doublons, le jeu de résultats doit être trié, et ceci mai ont un impact sur les performances de UNION, en fonction du volume de données triées et des paramètres de divers paramètres SGBDR (Pour Oracle PGA_AGGREGATE_TARGET
avec WORKAREA_SIZE_POLICY=AUTO
ou SORT_AREA_SIZE
et SOR_AREA_RETAINED_SIZE
si WORKAREA_SIZE_POLICY=MANUAL
).
Fondamentalement, le tri est plus rapide s'il peut être effectué en mémoire, mais la même mise en garde concernant le volume de données s'applique.
Bien sûr, si vous avez besoin de données retournées sans doublons alors vous doit utilisez UNION, en fonction de la source de vos données.
J'aurais commenté sur le premier post pour qualifier le commentaire «est beaucoup moins performant», mais n'a pas assez de réputation (points) pour le faire.
Dans ORACLE: UNION ne prend pas en charge les types de colonne BLOB (ou CLOB), UNION ALL le fait.
La différence fondamentale entre UNION et UNION ALL est que l'opération d'union élimine les lignes dupliquées du jeu de résultats, mais union tout renvoie toutes les lignes après la jointure.
de http://zengin.wordpress.com/2007/07/31/union-vs-union-all/
Vous pouvez éviter les doublons et continuer à fonctionner beaucoup plus rapidement que UNION DISTINCT (qui est en fait la même chose que UNION) en exécutant une requête comme celle-ci:
SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X
Notez le AND a!=X
partie. C'est beaucoup plus rapide que l'union.
Juste pour ajouter mes deux cents à la discussion ici: on pourrait comprendre le UNION
l'opérateur en tant que UNION pure orientée SET - par ex. mettre A = {2,4,6,8}, mettre B = {1,2,3,4}, UNION B = {1,2,3,4,6,8}
En traitant des ensembles, vous ne voudriez pas que les nombres 2 et 4 apparaissent deux fois, en tant qu'élément est ou n'est pas dans un ensemble.
Dans le monde de SQL, cependant, vous pourriez vouloir voir tous les éléments des deux ensembles ensemble dans un "sac" {2,4,6,8,1,2,3,4}. Et à cet effet, T-SQL offre l'opérateur UNION ALL
.
SYNDICAT
le UNION
commande est utilisée pour sélectionner des informations connexes à partir de deux tables, un peu comme le JOIN
commander. Cependant, lorsque vous utilisez le UNION
commande toutes les colonnes sélectionnées doivent être du même type de données. Avec UNION
, seules les valeurs distinctes sont sélectionnées.
UNION TOUS
le UNION ALL
commande est égale à la UNION
commande, sauf que UNION ALL
sélectionne toutes les valeurs.
La différence entre Union
et Union all
est-ce Union all
n'élimine pas les lignes dupliquées, mais extrait simplement toutes les lignes de toutes les tables qui correspondent aux spécificités de la requête et les combine dans une table.
UNE UNION
déclaration fait effectivement un SELECT DISTINCT
sur l'ensemble des résultats. Si vous savez que tous les enregistrements retournés sont uniques à votre syndicat, utilisez UNION ALL
au lieu de cela, il donne des résultats plus rapides.
Pas sûr que cela importe quelle base de données
UNION
et UNION ALL
devrait fonctionner sur tous les serveurs SQL.
Vous devriez éviter d'inutiles UNION
s ils sont énormes fuite de performance. En règle générale, utilisez le pouce UNION ALL
si vous n'êtes pas sûr de savoir lequel utiliser.
union est utilisé pour sélectionner des valeurs distinctes à partir de deux tables où comme union tout est utilisé pour sélectionner toutes les valeurs, y compris doublons des tables
(À partir de Microsoft SQL Server Book Online)
UNION [TOUT]
Indique que plusieurs jeux de résultats doivent être combinés et renvoyés en tant que jeu de résultats unique.
TOUT
Incorpore toutes les lignes dans les résultats. Cela inclut les doublons. Si non spécifié, les lignes en double sont supprimées.
UNION
prendra trop de temps comme un doublon lignes comme DISTINCT
est appliqué sur les résultats.
SELECT * FROM Table1
UNION
SELECT * FROM Table2
est équivalent à:
SELECT DISTINCT * FROM (
SELECT * FROM Table1
UNION ALL
SELECT * FROM Table2) DT
Un effet secondaire de l'application
DISTINCT
plus de résultats est un opération de tri sur les résultats.
UNION ALL
les résultats seront affichés arbitraire ordre sur les résultats Mais UNION
les résultats seront affichés ORDER BY 1, 2, 3, ..., n (n = column number of Tables)
appliqué sur les résultats. Vous pouvez voir cet effet secondaire lorsque vous n'avez pas de ligne en double.