Question

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

Était-ce utile?

La solution

UNION supprime les enregistrements en double (où toutes les colonnes des résultats sont les mêmes), UNION ALL ne fait pas.

Il y a une baisse de performances lors de l'utilisation UNION au lieu de UNION ALL, puisque le serveur de base de données doit effectuer un travail supplémentaire pour supprimer les lignes en double, mais vous ne souhaitez généralement pas de doublons (en particulier lors du développement de rapports).

UNION Exemple :

SELECT 'foo' AS bar UNION SELECT 'foo' AS bar

Résultat:

+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)

Exemple d'UNION TOUS :

SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar

Résultat:

+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)

Autres conseils

UNION et UNION ALL concatènent le résultat de deux SQL différents.Ils diffèrent dans la manière dont ils gèrent les doublons.

  • UNION effectue un DISTINCT sur le jeu de résultats, éliminant toutes les lignes en double.

  • UNION ALL ne supprime pas les doublons, et donc plus rapidement que UNION.

Note: Lors de l'utilisation de ces commandes, toutes les colonnes sélectionnées doivent être du même type de données.

Exemple:Si nous avons deux tables, 1) Employé et 2) Client

  1. Données du tableau des employés :

enter image description here

  1. Données du tableau client :

enter image description here

  1. Exemple UNION (il supprime tous les enregistrements en double) :

enter image description here

  1. Exemple UNION ALL (il concatène simplement les enregistrements, sans éliminer les doublons, il est donc plus rapide que UNION) :

enter image description here

UNION supprime les doublons, alors que UNION ALL ne fait pas.

Afin de supprimer les doublons, l'ensemble de résultats doit être trié, et ceci peut ont un impact sur les performances de l'UNION, en fonction du volume de données à trier et du paramétrage des différents paramètres du 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 renvoyées sans doublons, vous doit utilisez UNION, en fonction de la source de vos données.

J'aurais commenté le premier post pour nuancer le commentaire "est beaucoup moins performant", mais j'ai une réputation (points) insuffisante pour le faire.

Dans ORACLE :UNION ne prend pas en charge les types de colonnes BLOB (ou CLOB), contrairement à UNION ALL.

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 que l'union all renvoie toutes les lignes après la jointure.

depuis http://zengin.wordpress.com/2007/07/31/union-vs-union-all/

Vous pouvez éviter les doublons tout en exécutant beaucoup plus rapidement que UNION DISTINCT (qui est en fait identique à 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

Remarquez le AND a!=X partie.C'est beaucoup plus rapide que UNION.

Juste pour ajouter mes deux cents à la discussion ici :on pourrait comprendre le UNION opérateur en tant qu'UNION pure orientée SET - par ex.ensemble A={2,4,6,8}, ensemble B={1,2,3,4}, A UNION B = {1,2,3,4,6,8}

Lorsqu'il s'agit d'ensembles, vous ne voudriez pas non plus 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 souhaiterez peut-être voir tous les éléments des deux ensembles ensemble dans un seul « sac » {2,4,6,8,1,2,3,4}.Et pour cela, T-SQL propose à l'opérateur UNION ALL.

SYNDICAT
Le UNION La commande est utilisée pour sélectionner des informations associées dans deux tables, un peu comme la commande JOIN commande.Cependant, lors de l'utilisation du UNION commande, toutes les colonnes sélectionnées doivent être du même type de données.Avec UNION, seules des valeurs distinctes sont sélectionnées.

UNION TOUS
Le UNION ALL la 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'éliminera pas les lignes en double, mais extraira simplement toutes les lignes de toutes les tables correspondant aux spécificités de votre requête et les combinera dans une table.

UN UNION la déclaration fait effectivement un SELECT DISTINCT sur l’ensemble des résultats.Si vous savez que tous les enregistrements renvoyés sont uniques à votre syndicat, utilisez UNION ALL au lieu de cela, cela donne des résultats plus rapides.

Je ne suis pas sûr que la base de données soit importante

UNION et UNION ALL devrait fonctionner sur tous les serveurs SQL.

Vous devriez éviter les inutiles UNIONcar il s'agit d'une énorme fuite de performances.En règle générale, utilisez UNION ALL si vous ne savez pas 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 les doublons dans les tables

UNION - aboutit à distinct enregistrements

alors que

UNION ALL - résultats dans tous les enregistrements, y compris les doublons.

Les deux sont des opérateurs bloquants et je préfère donc personnellement utiliser JOINS plutôt que les opérateurs bloquants (UNION, INTERSECT, UNION ALL, etc.) à tout moment.

Pour illustrer pourquoi l’opération Union fonctionne mal par rapport à l’extraction Union All, l’exemple suivant.

CREATE TABLE #T1 (data VARCHAR(10))

INSERT INTO #T1
SELECT 'abc'
UNION ALL
SELECT 'bcd'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'def'
UNION ALL
SELECT 'efg'


CREATE TABLE #T2 (data VARCHAR(10))

INSERT INTO #T2
SELECT 'abc'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'efg'

enter image description here

Voici les résultats des opérations UNION ALL et UNION.

enter image description here

Une instruction UNION effectue effectivement un SELECT DISTINCT sur l’ensemble de résultats.Si vous savez que tous les enregistrements renvoyés sont uniques par votre union, utilisez plutôt UNION ALL, cela donne des résultats plus rapides.

L’utilisation de UNION entraîne Tri distinct opérations dans le plan d’exécution.La preuve de cette affirmation est présentée ci-dessous :

enter image description here

(À partir du livre en ligne de Microsoft SQL Server)

UNION [TOUS]

Spécifie que plusieurs jeux de résultats doivent être combinés et renvoyés sous la forme d'un seul jeu de résultats.

TOUS

Intègre toutes les lignes dans les résultats.Cela inclut les doublons.Si rien n’est spécifié, les lignes en double sont supprimées.

UNION cela prendra trop de temps car une recherche de lignes en double 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 sur les résultats est un opération de tri sur les résultats.

UNION ALL les résultats seront affichés comme arbitraire ordre sur les résultats mais UNION les résultats seront affichés comme 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 aucune ligne en double.

Il est bon de comprendre avec un diagramme de Venn.

Voici la lien à la source.Il y a une bonne description.

enter image description here

J'ajoute un exemple,

SYNDICAT, il fusionne avec distinct --> plus lentement, car il doit être comparé (dans le développeur Oracle SQL, choisissez la requête, appuyez sur F10 pour voir l'analyse des coûts).

UNION TOUS, il fusionne sans distinct --> plus rapidement.

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

et

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION ALL
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

UNION fusionne le contenu de deux tables structurellement compatibles en une seule table combinée.

  • Différence:

La différence entre UNION et UNION ALL est-ce UNION will omettre les enregistrements en double alors que UNION ALL inclura les enregistrements en double.

Union L'ensemble de résultats est trié par ordre croissant alors que UNION ALL L'ensemble de résultats n'est pas trié

UNION effectue un DISTINCT sur son jeu de résultats afin d'éliminer toutes les lignes en double.Alors que UNION ALL ne supprimera pas les doublons et est donc plus rapide que UNION.*

Note: La performance de UNION ALL sera généralement meilleur que UNION, depuis UNION nécessite que le serveur effectue le travail supplémentaire de suppression des doublons.Ainsi, dans les cas où il est certain qu'il n'y aura pas de doublons, ou où avoir des doublons ne pose pas de problème, on utilisera UNION ALL serait recommandé pour des raisons de performances.

Supposons que vous ayez deux tables Professeur & Étudiant

Les deux ont 4 colonnes avec un nom différent comme ça

Teacher - ID(int), Name(varchar(50)), Address(varchar(50)), PositionID(varchar(50))

enter image description here

Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)

enter image description here

Vous pouvez appliquer UNION ou UNION ALL pour les deux tables qui ont le même nombre de colonnes.Mais ils ont un nom ou un type de données différent.

Lorsque vous postulez UNION opération sur 2 tables, il néglige toutes les entrées en double (la valeur de toutes les colonnes de la ligne d'une table est la même que celle d'une autre table).Comme ça

SELECT * FROM Student
UNION
SELECT * FROM Teacher

le résultat sera

enter image description here

Lorsque vous postulez UNION ALL opération sur 2 tables, il renvoie toutes les entrées en double (s'il y a une différence entre n'importe quelle valeur de colonne d'une ligne dans 2 tables).Comme ça

SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher

Sortir enter image description here

Performance:

Évidemment UNION TOUS les performances sont meilleures que SYNDICAT car ils effectuent une tâche supplémentaire pour supprimer les valeurs en double.Vous pouvez vérifier cela à partir de Temps estimé d’exécution par presse ctrl+L à MSSQL

Encore une chose que je voudrais ajouter-

syndicat:- L'ensemble de résultats est trié par ordre croissant.

Union Tous:- L'ensemble de résultats n'est pas trié.deux résultats de requête sont simplement ajoutés.

En termes très simples, la différence entre UNION et UNION ALL est que UNION omettra les enregistrements en double tandis que UNION ALL inclura les enregistrements en double.

Différence entre Union et Union ALL dans SQL

Qu’est-ce que l’union dans SQL ?

L'opérateur UNION est utilisé pour combiner l'ensemble de résultats de deux ou plusieurs ensembles de données.

Each SELECT statement within UNION must have the same number of columns
The columns must also have similar data types
The columns in each SELECT statement must also be in the same order

Union contre Union tous avec exemple

Important!Différence entre Oracle et MySQL :Disons que t1 t2 n'ont pas de lignes en double entre eux mais qu'ils ont des lignes en double individuelles.Exemple:Le t1 a des ventes de 2017 et le t2 de 2018

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION ALL

SELECT T2.YEAR, T2.PRODUCT FROM T2

Dans ORACLE UNION ALL récupère toutes les lignes des deux tables.La même chose se produira dans MySQL.

Cependant:

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION

SELECT T2.YEAR, T2.PRODUCT FROM T2

Dans ORACLE, UNION récupère toutes les lignes des deux tables car il n'y a pas de valeurs en double entre t1 et t2.Par contre dans MySQL l'ensemble de résultats aura moins de lignes car il y aura des lignes en double dans le tableau t1 et également dans le tableau t2 !

UNION supprime les enregistrements en double, contrairement à UNION ALL.Mais il faut vérifier la majeure partie des données qui vont être traitées et la colonne et le type de données doivent être identiques.

puisque l'union utilise en interne un comportement "distinct" pour sélectionner les lignes, cela est donc plus coûteux en termes de temps et de performances.comme

select project_id from t_project
union
select project_id from t_project_contact  

cela me donne des records 2020

d'autre part

select project_id from t_project
union all
select project_id from t_project_contact

me donne plus de 17402 lignes

du point de vue de la priorité, les deux ont la même priorité.

Si il n'y a pas ORDER BY, un UNION ALL peut ramener des lignes au fur et à mesure, alors qu'un UNION vous ferait attendre jusqu'à la toute fin de la requête avant de vous donner l'ensemble des résultats en une seule fois.Cela peut faire une différence dans une situation de temps mort - un UNION ALL maintient la connexion vivante, pour ainsi dire.

Donc, si vous rencontrez un problème de délai d'attente, qu'il n'y a pas de tri et que les doublons ne posent pas de problème, UNION ALL peut être plutôt utile.

UNION et UNION ALL utilisés pour combiner deux ou plusieurs résultats de requête.

La commande UNION sélectionne des informations distinctes et associées dans deux tables, ce qui éliminera les lignes en double.

D'autre part, la commande UNION ALL sélectionne toutes les valeurs des deux tables, ce qui affiche toutes les lignes.

La seule différence est :

"UNION" supprime les lignes en double.

"UNION ALL" ne supprime pas les lignes en double.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top