par: Greg Robidoux / mise à jour: 2019-10-29 / Commentaires (4) / connexes: 1 | 2 | 3 | 4 | 5 | More > JOIN Tables
Problem
parfois, il est nécessaire de combiner les données de plusieurs tables ou vues dans un ensemble de données complet. Cela peut être pour les tables avec des données similaires dans la samedatabase ou peut-être qu’il est nécessaire de combiner des données similaires entre les bases de données ou les serveurs evenacross.
dans cette astuce, nous allons jeter un oeil à la façon d’utiliser les commandes UNION vs. UNIONALL et comment ils diffèrent.,
Solution
dans SQL Server, vous avez la possibilité de combiner plusieurs ensembles de données en un seul ensemble complet en utilisant les opérateurs UNION ou UNION ALL. Il y a une grande différence dans la façon dont ces travaux ainsi que l’ensemble de résultats final qui est renvoyé, mais fondamentalement thesecommands joindre plusieurs ensembles de données qui ont des structures similaires dans un ensemble de données combiné.
UNION
cette opération vous permettra de joindre plusieurs jeux de données en un seul jeu de données et supprimera tous les doublons existants. Fondamentalement, il effectue une opération distincte sur toutes les colonnes du jeu de résultats.,
UNION ALL
cette opération vous permet à nouveau de joindre plusieurs ensembles de données en un seul ensemble de données, mais elle ne supprime aucune ligne en double.Parce que cela ne supprime pas les lignes en double, ce processus est plus rapide, mais si vous ne voulez pas d’enregistrements en double, vous devrez utiliser l’opérateur UNION à la place.,h query doit avoir le même nombre de colonnes
Astuce: Si vous n’avez pas exactement les mêmes colonnes dans toutes les requêtes utilisez une valeur par défaut ou une valeur nulle telle que:
SELECT firstName, lastName, company FROM businessContactsUNIONSELECT firstName, lastName, NULL FROM nonBusinessContactsorSELECT firstName, lastName, createDate FROM businessContactsUNION ALLSELECT firstName, lastName, getdate() FROM nonBusinessContacts
Union vs., UNION ALL Examples
jetons un coup d’oeil à quelques exemples simples de la façon dont ces commandes fonctionnent et commentils diffèrent. Comme vous le verrez, les resultsets finaux différeront, mais il y a des informations intéressantes sur la façon dont SQL Server termine réellement le processus.
UNION ALL
dans ce premier exemple, nous utilisons L’opérateur UNION ALL contre Employeetable de la base de données AdventureWorks. Ce n’est probablement pas quelque chose que vous woulddo, mais cela aide à illustrer les différences de ces deux opérateurs.
Il y a 290 lignes dans le tableau dbo.Employé.,
SELECT * FROM HumanResources.EmployeeUNION ALLSELECT * FROM HumanResources.EmployeeUNION ALLSELECT * FROM HumanResources.Employee
Lorsque cette requête est exécutée, le résultat 870 lignes. Ce sont les 290 lignes retournées3 fois. Les données sont simplement rassemblées un ensemble de données au-dessus de l’autre ensemble de données.
Voici le plan d’exécution de cette requête. Nous pouvons voir que la table a été interrogée 3 fois et que SQL Server a effectué une étape de concaténation pour concaténer toutes les données.
UNION
dans cet exemple suivant, nous utilisons l’opérateur UNION contre la table Employee à partir de la base de données AdventureWorks.,
SELECT * FROM HumanResources.EmployeeUNIONSELECT * FROM HumanResources.EmployeeUNIONSELECT * FROM HumanResources.Employee
Lorsque cette requête est exécutée, le résultat 290 lignes. Même si nous avons combiné les données trois fois, l’opérateur UNION a supprimé les enregistrements en double et ne récupère donc que les 290 lignes uniques.
Voici le plan d’exécution de cette requête. Nous pouvons voir que SQL Server a d’abord demandé 2 des tables, puis a effectué une opération de jointure de fusion pour combiner les deux premières tables, puis il a fait une autre jointure de fusion avec l’interrogation de la troisième table dans la requête.,Nous pouvons donc voir qu’il y avait beaucoup plus de travail qui devait être effectué pour obtenir cet ensemble de résultats par rapport à L’UNION ALL.
UNION vs UNION tous les exemples avec tri sur la colonne D’Index Clusteredindex
Si nous allons plus loin et faisons une sorte de données en utilisant la colonne ClusteredIndex, nous obtenons ces plans d’exécution. De cela, nous pouvons voir que le plan d’exécution utilisé par SQL Server est identique pour chacune de ces opérations, même si les ensembles de résultats finaux contiendront toujours 870 lignes pour L’UNION ALL et 290 lignes pour L’UNION.,
UNION tout plan d’exécution avec tri sur la colonne d’index en cluster
Union plan d’exécution avec tri sur la colonne d’index en cluster
UNION vs UNION tous les exemples avec tri sur h2>
Voici un autre exemple faisant la même chose, mais cette fois en faisant un tri sur une colonne indexée anon. Comme vous pouvez le voir, les plans d’exécution sont à nouveau identiques pour cesdeux requêtes, mais cette fois au lieu d’utiliser une jointure de fusion, une concaténation et des opérations de tri sont utilisées.,
- jetez un oeil à ces autres conseils qui peuvent être utiles pour utiliser les opérateurs union
- comparaison de plusieurs ensembles de données avec les opérateurs INTERSECTand EXCEPT
- SQL Server quatre parties nommage
- comparer les résultats SQL Server de deux requêtes en utilisant UNION
dernière mise à jour: 2019-10-29
à propos de l’auteur
Afficher tous mes conseils
Leave a Reply