Quelle est la différence entre L'UNION et L'UNION tout?

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

1146
demandé sur DineshDB 2008-09-08 19:19:33

22 réponses

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

il y a un succès de performance lorsque vous utilisez UNION au lieu de UNION ALL , puisque le serveur de base de données doit faire un travail supplémentaire pour supprimer les lignes dupliquées, mais habituellement vous ne voulez pas les doublons (surtout lors de l'élaboration des rapports).

exemple D'UNION:

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

Résultat:

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

UNION tout exemple:

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

résultat:

+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
1410
répondu Robbie Averill 2017-12-01 07:33:32

L'UNION et L'UNION concaténent toutes deux le résultat de deux SQL différentes. Ils diffèrent dans la façon dont ils traitent les doublons.

  • UNION effectue un DISTINCT sur l'ensemble de résultats, en éliminant les lignes en double.

  • UNION tout ne supprime pas les doublons, et il est donc plus rapide que L'UNION.

Note: Tandis Que en utilisant cette commande 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 de la table des employés:

enter image description here

  1. données de table de client:

enter image description here

  1. exemple de syndicat (Il supprime tous les enregistrements en double):

enter image description here

  1. 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):

enter image description here

240
répondu Bhaumik Patel 2015-04-09 12:48:35

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

afin d'éliminer les doublons, le jeu de résultats doit être trié, et ce peut avoir un impact sur les performances de L'UNION, en fonction du volume de données triées, et les réglages de divers paramètres RDBMS ( pour Oracle PGA_AGGREGATE_TARGET avec WORKAREA_SIZE_POLICY=AUTO ou SORT_AREA_SIZE et SOR_AREA_RETAINED_SIZE si WORKAREA_SIZE_POLICY=MANUAL ).

en gros, la sorte est plus rapide si elle peut être effectuée en 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ées sans duplicata alors vous doit utiliser UNION, en fonction de la source de vos données.

j'aurais commenté sur le premier message pour qualifier le commentaire" est beaucoup moins performant", mais ont la réputation insuffisante (points) pour le faire.

42
répondu mathewbutler 2016-04-13 05:13:39

in ORACLE: UNION does not support BLOB (or CLOB) column types, UNION ALL does.

27
répondu Michiel Overeem 2011-02-18 20:29:34

la différence fondamentale entre L'UNION et L'UNION tout est l'opération de l'union élimine les lignes dupliquées du jeu de résultats mais l'union retourne toutes les lignes après l'assemblage.

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

18
répondu George Mauer 2018-05-15 17:40:39

vous pouvez éviter les doublons et courir encore beaucoup plus vite que UNION DISTINCT (qui est en fait identique à UNION) en lançant requête comme ceci:

SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X

noter la partie AND a!=X . C'est beaucoup plus rapide que L'UNION.

12
répondu Ihor Vorotnov 2012-08-13 00:03:50

juste pour ajouter mes deux cents à la discussion ici: on pourrait comprendre l'opérateur UNION comme une UNION pure et orientée sur les ensembles-par exemple ensemble a={2,4,6,8}, ensemble B = {1,2,3,4}, une UNION b = {1,2,3,4,6,8}

quand vous avez affaire à des ensembles, vous ne voulez pas que les numéros 2 et 4 apparaissent deux fois, comme un élément soit est ou n'est pas dans un ensemble.

dans le monde de SQL, cependant, vous pourriez vouloir voir tous les les éléments de deux ensembles ensemble dans un "sac" {2,4,6,8,1,2,3,4}. Et pour cela T-SQL offre l'opérateur UNION ALL .

12
répondu Peter Perháč 2013-06-06 09:55:35

UNION

La commande UNION est utilisée pour sélectionner des informations connexes à partir de deux tableaux, un peu comme la commande JOIN . Cependant, lorsque vous utilisez la commande UNION , 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.

L'UNION DE TOUS

La commande UNION ALL est égale à Commande UNION , sauf que UNION ALL sélectionne toutes les valeurs.

la différence entre Union et Union all est que Union all n'éliminera pas les lignes dupliquées, au lieu de cela il tire juste toutes les lignes de toutes les tables ajustant vos spécificités de requête et les combine dans une table.

Un UNION déclaration efficacement à un SELECT DISTINCT sur le jeu de résultats. Si vous savez que tous les documents retournés sont uniques de votre syndicat, utilisez UNION ALL à la place, il donne des résultats plus rapides.

9
répondu DotNetGuy 2015-05-18 14:43:22

pas sûr qu'il importe quelle base de données

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

vous devez éviter d'inutiles UNION s ils sont énormes fuite de performance. Comme une règle d'utilisation de pouce UNION ALL si vous n'êtes pas sûr d'utiliser.

6
répondu Jakub Šturc 2015-05-30 10:59:25

UNION-résultats dans documents distincts



alors que



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

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

pour illustrer pourquoi les opérations syndicales donnent de mauvais résultats comparaison avec la caisse de tous les syndicats 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 de L'Union et de L'UNION.

enter image description here

une déclaration syndicale effectue effectivement un SELECT DISTINCT sur l'ensemble des résultats. Si vous savez que tous les enregistrements les retours sont uniques de votre union, utilisez UNION tous à la place, il donne des résultats plus rapides.

utilisant les résultats de L'UNION dans Tri Distinct opérations dans le Plan d'exécution. La preuve pour prouver cette déclaration est montrée ci-dessous:

enter image description here

6
répondu DBA 2016-06-21 17:24:42

union est utilisé pour sélectionner des valeurs distinctes à partir de deux tableaux où as union tout est utilisé pour sélectionner toutes les valeurs y compris les doublons dans les tables

5
répondu 2009-06-15 10:42:42

(de Microsoft SQL Server Book Online)

UNION [TOUS]

spécifie que plusieurs ensembles de résultats doivent être combinés et retournés sous la forme d'un seul ensemble de résultats.

tous

incorpore toutes les lignes dans les résultats. Cela comprend les doublons. Si non spécifié, les doublons sont supprimés.

UNION prendra trop de temps car un doublon comme DISTINCT est appliqué sur les résultats.

SELECT * FROM Table1
UNION
SELECT * FROM Table2

est l'équivalent de:

SELECT DISTINCT * FROM (
    SELECT * FROM Table1
    UNION ALL
    SELECT * FROM Table2) DT

un effet secondaire de l'application de DISTINCT sur les résultats est une opération de tri sur les résultats.

UNION ALL les résultats seront affichés comme suit: arbitraire ordre des 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 quand vous n'avez pas de ligne dupliquée.

5
répondu shA.t 2015-04-12 08:34:22

il est bon de comprendre avec un diagramme de Venn.

voici le lien à la source. Il y a une bonne description.

enter image description here

5
répondu michael-mammut 2016-05-17 09:46:01

j'ajoute un exemple,

UNION , il fusionne avec distinct --> plus lent, parce qu'il a besoin de comparer (dans Oracle SQL developer, choisissez requête, appuyez sur F10 pour voir l'analyse des coûts).

UNION ALL , il fusionne sans se distinguer --> plus vite.

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;
3
répondu Do Nhu Vy 2017-04-27 04:35:14

Une chose que je voudrais ajouter-

Union : - les résultats sont classés par ordre croissant.

Union All : - L'ensemble des résultats n'est pas trié. deux sorties de requête viennent d'être ajoutées.

2
répondu Rahul Sawant 2016-04-13 05:14:47

UNION fusionne le contenu de deux tableaux structurellement compatibles en un seul tableau combiné.

  • différence:

la différence entre UNION et UNION ALL est que UNION will omet les enregistrements en double tandis que UNION ALL inclura les enregistrements en double.

Le jeu de résultats Union est trié dans l'ordre croissant tandis que le jeu de résultats UNION ALL n'est pas trié

UNION exécute un DISTINCT sur son ensemble de résultats de sorte qu'il éliminera toute ligne dupliquée. Alors que UNION ALL ne va pas supprimer les doublons et donc il est plus rapide que UNION .*

Note : la performance de UNION ALL sera généralement meilleure que UNION , car UNION exige que le serveur fasse le travail supplémentaire de suppression des doublons. Ainsi, dans les cas où il est certain qu'il n'y aura pas de duplicata, ou lorsque le fait d'en avoir n'est pas un problème, l'utilisation de UNION ALL serait recommandée pour des raisons de performance.

2
répondu pedram 2016-05-17 05:45:30

supposons que vous ayez deux tableaux enseignant & étudiant "15198090920 "

tous les deux ont 4 colonne avec un nom différent comme ceci

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 demander le syndicat ou L'UNION tout pour les deux tableaux qui ont le même nombre de colonnes. Mais ils ont un nom ou un type de données différent.

quand vous appliquez UNION opération sur 2 tables, il néglige toutes les entrées en double(toutes les colonnes valeur de ligne dans une table est même d'une autre table). Comme ceci

SELECT * FROM Student
UNION
SELECT * FROM Teacher

le résultat sera

enter image description here

Quand vous appliquez UNION ALL opération sur 2 tables, il retourne toutes les entrées avec dupliquer(s'il y a une différence entre n'importe quelle valeur de colonne d'une ligne dans 2 tables). Comme ceci

SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher

Sortie enter image description here

Performance:

évidemment UNION toute la performance est meilleure que UNION comme ils font tâche supplémentaire pour supprimer les valeurs dupliquées. Vous pouvez vérifier que de exécution Temps Estimé par la presse ctrl+L à MSSQL

2
répondu reza.cse08 2016-06-07 07:03:01

en termes très simples, la différence entre L'UNION et L'UNION est que L'UNION omettra les enregistrements en double, alors que L'UNION inclura tous les enregistrements en double.

1
répondu Shubham Pandey 2018-03-25 16:01:56

UNION supprime les enregistrements en double dans une autre main UNION tout ne le fait pas. Mais il faut vérifier la majorité des données qui vont être traitées et la colonne et le type de données doivent être les mêmes.

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

select project_id from t_project
union
select project_id from t_project_contact  

cela me donne de l'2020 dossiers

d'autre part

select project_id from t_project
union all
select project_id from t_project_contact

me donne plus de 17402 lignes

sur la perspective de priorité les deux ont la même priorité.

0
répondu Pawan Kumar 2014-01-22 06:02:21

s'il n'y a pas de ORDER BY , un UNION ALL peut rapporter des lignes comme il va, alors qu'un UNION vous ferait attendre jusqu'à la toute fin de la requête avant de vous donner le résultat entier ensemble à la fois. Cela peut faire une différence dans une situation de temporisation-un UNION ALL maintient la connexion en vie, pour ainsi dire.

donc si vous avez un problème de temps d'arrêt, et qu'il n'y a pas de tri, et que les doublons ne sont pas un problème, UNION ALL peut être plutôt utile.

0
répondu AjV Jsy 2016-03-03 12:38:27

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

La commande

sélectionne des informations distinctes et connexes à partir de deux tableaux, ce qui élimine les lignes dupliquées.

D'un autre côté, la commande UNION ALL sélectionne toutes les valeurs des deux tables, qui affiche toutes les lignes.

0
répondu Sona 2016-09-23 08:21:02

différence entre Union et Union tout en Sql

Qu'est-ce que le syndicat en SQL?

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

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 Vs Union Tout Avec Exemple

0
répondu Sandeep TK 2018-07-10 10:12:39