Accéder au contenu principal

UNION vs UNION ALL en SQL

Découvrez les différences de rendement et de performance entre UNION et UNION ALL : L'UNION supprime les doublons tandis que l'UNION TOUS les inclut.
Actualisé 16 janv. 2025  · 7 min de lecture

Dans l'univers SQL, la possibilité de combiner des données provenant de plusieurs requêtes est une exigence fondamentale, et SQL offre des fonctions puissantes telles que UNION et UNION ALL pour y parvenir. 

Comme vous le verrez, il est impératif de comprendre les différences subtiles entre les fonctions UNION et UNION ALL dans SQL pour pouvoir interroger et gérer efficacement les données. Ce tutoriel explique leurs principales similitudes et différences, ainsi que des scénarios d'utilisation utilisant des ensembles de données complémentaires pour vous aider à optimiser vos requêtes SQL.

La réponse courte : SQL UNION vs. UNION TOUS 

La principale différence est que UNION supprime les enregistrements en double, alors que UNION ALL inclut tous les enregistrements en double. Cette distinction ne modifie pas seulement le nombre de lignes dans le résultat de la requête, mais elle a également un impact sur les performances.

Considérons deux tableaux types, employees_2023 et employees_2024, représentant les enregistrements des employés pour deux années différentes.

SELECT *
FROM employees_2023

employee_id

nom

département

1

Alice

HR

2

Bob

IT

3

Charlie

Finances

SELECT *
FROM employees_2024

employee_id

nom

département

2

Bob

IT

3

Charlie

Finances

4

David

Marketing

Joignons maintenant nos deux tableaux à l'aide de la fonction UNION.

SELECT employee_id, name, department FROM employees_2023 
UNION 
SELECT employee_id, name, department FROM employees_2024;

employee_id

nom

département

1

Alive

HR

2

Bob

IT

3

Charlie

Finances

4

David

Marketing

Dans ce résultat, les enregistrements en double sont supprimés. Comparons maintenant ce résultat avec celui que nous obtenons en utilisant UNION ALL.

SELECT employee_id, name, department FROM employees_2023 
UNION ALL 
SELECT employee_id, name, department FROM employees_2024;

employee_id

nom

département

1

Alive

HR

2

Bob

IT

3

Charlie

Finances

2

Bob

Bob

3

Charlie

Finances

4

David

Marketing

Dans ce résultat, tous les enregistrements sont inclus et les doublons ne sont pas supprimés.

Qu'est-ce que l'UNION en SQL ?

La fonction UNION combine les résultats de deux ou plusieurs requêtes SELECT en un seul ensemble de résultats, en supprimant les lignes en double. Chaque déclaration SELECT à l'intérieur de UNION doit avoir le même nombre de colonnes. Ils doivent également avoir des types de données similaires et les colonnes doivent être dans le même ordre. Pour comprendre la fonction, créons deux tableaux types ci-dessous.

CREATE TABLE sales_team (
    employee_id INT,
    employee_name VARCHAR(50)
);
INSERT INTO sales_team (employee_id, employee_name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');
CREATE TABLE support_team ( 
employee_id INT, 
employee_name VARCHAR(50)
 );
INSERT INTO support_team (employee_id, employee_name) VALUES 
(3, 'Charlie'), 
(4, 'David'), 
(5, 'Eve');

Le code ci-dessus crée les deux tableaux que nous utiliserons dans ce tutoriel, sales_team et support_team, respectivement. Vous pouvez visualiser les tableaux à l'aide du code ci-dessous.

SELECT * 
FROM sales_team

Enregistrements dans le <code624

Enregistrements dans le tableau sales_team. Image par l'auteur 

SELECT * 
FROM support_team

Enregistrements dans le <code624

Enregistrements dans le tableau support_team. Image par l'auteur 

Il s'agit de petits tableaux de trois enregistrements chacun, dont les noms de colonnes sont explicites. Maintenant que nous avons créé nos deux tableaux, appliquons la fonction UNION.

SELECT employee_id, employee_name
    FROM sales_team
   UNION
SELECT employee_id, employee_name
    FROM support_team;

Sortie du <code624

Sortie de la fonction UNION. Image par l'auteur 

Vous pouvez constater que l'entrée dupliquée de employee_id, qui prend la valeur de 3, est supprimée. 

Quels sont les cas d'utilisation de l'UNION en SQL ?

Voici quelques cas d'utilisation courants de la fonction UNION.

  • Combinaison de résultats provenant de différents tableaux : Lorsque vous souhaitez combiner des données provenant de plusieurs tableaux et vous assurer qu'il n'y a pas d'enregistrements en double, UNION est la fonction à utiliser.

  • Gestion de différentes sources de données : UNION est utile pour combiner des tableaux provenant de différentes sources de données. 

  • Suppression des doublons entre les requêtes : Lorsque vous souhaitez garantir l'unicité de l'ensemble des résultats combinés, utilisez UNION.

Qu'est-ce que UNION ALL en SQL ?

La fonction UNION ALL combine les résultats de deux ou plusieurs requêtes SELECT, y compris toutes les lignes dupliquées. Cette fonction est plus rapide que UNION car elle ne se préoccupe pas de supprimer les doublons.

SELECT employee_id, employee_name
    FROM sales_team
UNION ALL
SELECT employee_id, employee_name
    FROM support_team;

Sortie du <code624

Sortie de la fonction UNION ALL. Image par l'auteur 

Vous pouvez constater que, dans ce cas, les entrées en double sont répétées et non supprimées.

Quels sont les cas d'utilisation de UNION ALL en SQL ?

Voici quelques cas d'utilisation courants de la fonction UNION ALL.

  • Combiner les résultats avec les doublons : Utilisez UNION ALL lorsque vous devez combiner les résultats de plusieurs requêtes et préserver toutes les lignes en double.
  • Considérations relatives aux performances : UNION ALL est plus efficace en termes de temps que la fonction UNION, car il n'est pas nécessaire de supprimer les doublons.
  • Agrégation de données provenant de différentes périodes : Lorsque vous agrégez des données provenant de périodes ou de sources différentes et que vous devez préserver les entrées en double, il est préférable d'utiliser le site UNION ALL.
  • Rapports et analyses : Pour les rapports où chaque enregistrement, y compris les doublons, est nécessaire, UNION ALL convient.

UNION et UNION TOUTES : Similitudes et différences

Dressons un tableau récapitulatif des similitudes et des différences. 

Fonctionnalité

UNION

UNION TOUS

Lignes en double

Supprimé

Inclus

Performance

Plus lent

Plus vite

Cas d'utilisation

Lorsque vous avez besoin d'enregistrements uniques

Lorsque vous avez besoin de tous les documents

Taille du résultat

Plus petit

Plus grand

Différences de syntaxe entre UNION et UNION ALL selon les dialectes SQL 

Si la syntaxe de base reste la même dans les différents dialectes SQL, il existe de légères variations en fonction de la plate-forme. Si vous examinez le code de la plupart des plateformes, telles que SQL Server, Oracle, MySQL, PostgreSQL ou BigQuery, il ressemblera à ce qui est illustré ci-dessous. 

SELECT employee_id, employee_name
    FROM sales_team
UNION ALL
SELECT employee_id, employee_name
    FROM support_team;

Les commandes de base de ces dialectes SQL restent les mêmes, avec quelques nuances et différences :

  1. Gestion des NULL et des collations : Les différents dialectes SQL peuvent avoir des règles différentes pour gérer les valeurs NULL et la collation des chaînes de caractères.
  2. Optimisation des performances : Les optimisations de performance et l'efficacité d'exécution peuvent varier.
  3. Gestion des erreurs et avertissements : Les dialectes peuvent gérer différemment les erreurs et les avertissements lors de l'utilisation de ces fonctions.
  4. Fonctions et caractéristiques spécifiques à la plate-forme : Certains dialectes SQL peuvent offrir des fonctions ou des caractéristiques supplémentaires qui peuvent être utilisées conjointement avec UNION et UNION ALL pour des scénarios plus complexes.

La commande est sensiblement différente dans le cas de PySpark, qui fonctionne dans un environnement distribué. Le code est donné ci-dessous, en supposant que df1 et df2 sont les noms des deux cadres de données constitués des deux tableaux que nous avons créés ci-dessus. :

df1.union(df2)

Réflexions finales

Il est essentiel de comprendre l'application de UNION par opposition à UNION ALL dans la gestion efficace des données à l'aide de SQL. Alors que UNION ne sélectionne que les enregistrements distincts, UNION ALL les sélectionne tous, ce qui affecte les performances et la taille de l'ensemble des résultats. Utilisez ces connaissances pour choisir la fonction appropriée à vos besoins spécifiques. 

Pour en savoir plus, vous pouvez consulter les sources suivantes :

  • Introduction à SQL: Apprenez à créer et à interroger des bases de données relationnelles à l'aide de SQL.
  • Principes fondamentaux de SQL : Acquérir les compétences SQL fondamentales dont vous avez besoin pour interagir avec vos données et les interroger. 
  • Certification SQL Associate : Démontrez vos compétences en SQL en extrayant les données appropriées d'une base de données et en les utilisant pour répondre à des questions courantes sur les données.
  • SQL intermédiaire : Avec ce cours pratique, vous apprendrez tout ce que vous devez savoir pour analyser des données en utilisant votre propre code SQL dès aujourd'hui.

Vikash Singh's photo
Author
Vikash Singh
LinkedIn

Professionnel chevronné de la science des données, de l'intelligence artificielle, de l'analyse et de la stratégie des données.

Questions fréquemment posées

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

UNION supprime les enregistrements en double, tandis que UNION ALL inclut tous les enregistrements en double.

Y a-t-il une différence de performance entre UNION et UNION ALL ?

Oui, UNION est généralement plus lent car il supprime les doublons.

Existe-t-il des cas d'utilisation spécifiques où UNION ALL est préférable à UNION ?

UNION ALL est préférable lorsque vous avez besoin de tous les enregistrements, y compris les doublons, par exemple dans le cadre de rapports et d'analyses.

Quand dois-je utiliser SQL UNION au lieu de UNION ALL ?

Utilisez UNION lorsque vous avez besoin d'un ensemble de résultats combinés sans doublons.

Comment les différents dialectes SQL affectent-ils l'utilisation de UNION et UNION ALL ?

Bien que la syntaxe de base soit cohérente, il peut y avoir de légères variations au niveau des performances, de la gestion des NULL et de la collation entre les différents dialectes SQL.

Sujets

Apprenez SQL avec DataCamp

Certification disponible

cours

Introduction à SQL

2 hr
974.1K
Apprenez à créer et à interroger des bases de données relationnelles à l'aide de SQL en seulement deux heures.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow