Cours
Dans l'univers SQL, la capacité à combiner les données issues 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 constaterez, il est essentiel de comprendre les différences subtiles entre les fonctions UNION et UNION ALL dans SQL pour garantir l'efficacité des requêtes et de la gestion des données. Ce tutoriel explique leurs principales similitudes, différences et scénarios d'utilisation à l'aide d'ensembles de données complémentaires afin de vous aider à optimiser vos requêtes SQL.
Réponse succincte : SQL UNION par rapport à UNION ALL
La principale différence réside dans le fait que UNION supprime les enregistrements en double, tandis que UNION ALL inclut tous les doublons. Cette distinction modifie non seulement le nombre de lignes dans le résultat de la requête, mais elle a également un impact sur les performances.
| Caractéristique | UNION | UNION ALL |
|---|---|---|
| Doublons | Supprime les enregistrements en double | Conserve tous les documents (y compris les duplicatas) |
| Performance | Plus lent (nécessite le tri/hachage des données pour identifier les doublons) | Plus rapide (ajoute simplement les données au résultat) |
| Fonctionnement | Théorie des ensembles (Union mathématique) | Ajouter / Empiler les résultats |
Examinons deux exemples de tableaux, employees_2023 et employees_2024, représentant les dossiers 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 |
Maintenant, fusionnons nos deux tables à l'aide de la fonction d'UNION.
SELECT employee_id, name, department FROM employees_2023
UNION
SELECT employee_id, name, department FROM employees_2024;
|
employee_id |
nom |
département |
|
1 |
Alice |
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 obtenu après avoir utilisé 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 |
IT |
|
3 |
Charlie |
Finances |
|
4 |
David |
Marketing |
Dans ce résultat, tous les enregistrements sont inclus et les doublons ne sont pas supprimés.
Que signifie 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 instruction « SELECT » dans l'instruction « UNION » doit comporter le même nombre de colonnes. De plus, ils doivent avoir des types de données similaires et les colonnes doivent également être dans le même ordre. Pour mieux appréhender cette fonction, nous allons créer deux exemples de tableaux 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éera les deux tables que nous utiliserons dans ce tutoriel, respectivement sales_team et support_team. Vous pouvez consulter les tableaux en utilisant le code ci-dessous.
SELECT *
FROM sales_team

Enregistrements dans la table sales_team. Image par l'auteur
SELECT *
FROM support_team

Enregistrements dans la table support_team. Image par l'auteur
Il s'agit de petits tableaux contenant chacun trois enregistrements, et les noms des colonnes sont explicites. Maintenant que nos deux tableaux sont créés, appliquons la fonction d'UNION.
SELECT employee_id, employee_name
FROM sales_team
UNION
SELECT employee_id, employee_name
FROM support_team;

Résultat de la fonction UNION. Image par l'auteur
Vous pouvez constater que l'entrée en double employee_id, qui prend la valeur de 3, a été supprimée.
Quels sont les cas d'utilisation de UNION dans SQL ?
Voici quelques cas d'utilisation courants de la fonction UNION.
-
Combiner les résultats de différentes tables : Lorsque vous souhaitez combiner les données de plusieurs tables et vous assurer qu'il n'y a pas de doublons, la fonction «
UNION» est la solution idéale. -
Gestion de différentes sources de données :
UNIONest utile pour combiner des tableaux provenant de différentes sources de données. -
Suppression des doublons dans les requêtes : Si vous souhaitez garantir l'unicité de l'ensemble de résultats combinés, veuillez utiliser l'opérateur «
UNION».
Que signifie UNION ALL en SQL ?
La fonction UNION ALL combine les résultats de deux ou plusieurs requêtes SELECT, y compris toutes les lignes en double. Cette fonction est plus rapide que UNION car elle ne se charge pas de supprimer les doublons.
SELECT employee_id, employee_name
FROM sales_team
UNION ALL
SELECT employee_id, employee_name
FROM support_team;

Résultat 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 : Veuillez utiliser
UNION ALLlorsque vous avez besoin de combiner les résultats de plusieurs requêtes et de conserver toutes les lignes en double. - Considérations relatives aux performances : la fonction `
UNION ALL` est plus rapide que la fonction `UNION`, car elle ne nécessite pas l'étape supplémentaire consistant à supprimer les doublons. - Agrégation de données provenant de différentes périodes : Lorsque vous regroupez des données provenant de différentes périodes ou sources et que vous devez conserver les entrées en double, il est préférable d'utiliser l'agrégation par somme (
UNION ALL). - Rapports et analyse : Pour les besoins de reporting où chaque enregistrement, y compris les doublons, est nécessaire, le format «
UNION ALL» est approprié.
UNION et UNION ALL : Similitudes et différences
Veuillez créer un tableau récapitulatif des similitudes et des différences.
|
Caractéristique |
UNION |
UNION ALL |
|
Lignes en double |
Supprimé |
Inclus |
|
Performance |
Plus lent |
Plus rapide |
|
Cas d'utilisation |
Lorsque vous avez besoin de documents uniques |
Lorsque vous avez besoin de tous les dossiers |
|
Taille du résultat |
Plus petit |
Plus grand |
Différences de syntaxe entre UNION et UNION ALL dans les différents dialectes SQL
Bien que la syntaxe de base reste la même dans les différents dialectes SQL, il existe de légères variations selon la plateforme. Si vous examinez le code, vous constaterez que sur la plupart des plateformes, telles que SQL Server, Oracle, MySQL, PostgreSQL ou BigQuery, le code ressemble à celui présenté 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 identiques, avec quelques nuances et différences :
- Gestion des valeurs NULL et des collations : Différents dialectes SQL peuvent avoir des règles différentes pour le traitement des valeurs d'
NULLs et le classement des chaînes de caractères. - Optimisation des performances : Les optimisations de performances et l'efficacité d'exécution peuvent varier.
- Gestion des erreurs et avertissements : Différents dialectes peuvent traiter les erreurs et les avertissements de manière différente lors de l'utilisation de ces fonctions.
- Fonctions et caractéristiques spécifiques à la plateforme : Certains dialectes SQL peuvent offrir des fonctions ou des fonctionnalités supplémentaires pouvant être utilisées conjointement avec
UNIONetUNION ALLpour des scénarios plus complexes.
La commande est très différente dans le cas de PySpark, qui fonctionne dans un environnement distribué. Le code est présenté ci-dessous, en supposant que df1 et df2 sont les noms des deux cadres de données composés des deux tableaux que nous avons créés ci-dessus. :
df1.union(df2)
3 règles et erreurs courantes lors de l'utilisation de SQL UNION
Bien que UNION et UNION ALL soient des outils puissants, ils sont stricts en matière de syntaxe. Si votre requête renvoie une erreur, il est probable qu'elle enfreigne l'une de ces trois règles fondamentales.
1. Le nombre de colonnes ne correspond pas
L'erreur la plus courante rencontrée par les utilisateurs est une incompatibilité dans le nombre de colonnes. Pour combiner deux ensembles de données, la « forme » des tableaux doit être identique. Il n'est pas possible d'empiler un tableau à 3 colonnes sur un tableau à 2 colonnes.
L'erreur :
-- This will fail because the column counts do not match
SELECT employee_id, name, department
FROM employees_2023
UNION
SELECT employee_id, name
FROM employees_2024;
La solution : Veuillez vous assurer que les deux instructions « SELECT » demandent exactement le même nombre de colonnes. Si le deuxième tableau comporte des données manquantes (comme department), vous pouvez sélectionner NULL comme espace réservé afin que les comptes correspondent :
SELECT employee_id, name, department FROM employees_2023
UNION
SELECT employee_id, name, NULL as department FROM employees_2024;
2. Compatibilité des types de données
SQL combine les résultats en fonction de leur position, et non du nom de la colonne. Le type de données de la première colonne de votre première requête doit correspondre (ou être compatible) avec le type de données de la première colonne de votre deuxième requête.
L'erreur : Si vous inversez accidentellement l'ordre des colonnes, SQL tentera d'empiler un nombre (ID) au-dessus d'une chaîne (Nom), ce qui entraînera une erreur de conversion de type de données.
-- This fails because Column 1 (ID - INT) cannot combine with Column 1 (Name - VARCHAR)
SELECT employee_id, name FROM employees_2023
UNION
SELECT name, employee_id FROM employees_2024;
La solution : Veuillez toujours vérifier que vos colonnes sont répertoriées dans le même ordre dans chaque instruction ` SELECT ` au sein de l'instruction ` UNION`.
3. Limitations de la clause ORDER BY
Un point qui prête souvent à confusion est l'emplacement de la clause d'ORDER BY. Il n'est pas possible de trier les sous-requêtes individuelles au sein d'une opération d'UNION; seul le résultat final combiné peut être trié.
L'erreur : L'utilisation de ` ORDER BY ` avant la requête finale entraînera une erreur de syntaxe.
-- INCORRECT SYNTAX
SELECT employee_id, name FROM employees_2023
ORDER BY employee_id -- You cannot sort here!
UNION
SELECT employee_id, name FROM employees_2024;
La solution : Veuillez placer la clause d'ORDER BY e à la fin de votre requête. Cela applique le tri à l'ensemble complet des résultats combinés.
-- CORRECT SYNTAX
SELECT employee_id, name FROM employees_2023
UNION
SELECT employee_id, name FROM employees_2024
ORDER BY employee_id; -- Sorts the final result
Conclusions finales
Il est essentiel de comprendre l'application de l'instruction « UNION » par opposition à l'instruction « UNION ALL » pour gérer efficacement les données à l'aide de SQL. Lorsque UNION sélectionne uniquement les enregistrements distincts, UNION ALL les sélectionne tous, ce qui affecte les performances et la taille du jeu de résultats. Veuillez utiliser ces informations pour sélectionner la fonction la mieux adaptée à vos besoins spécifiques.
Pour approfondir vos connaissances, nous vous invitons à consulter les ressources suivantes :
- Introduction au langage SQL: Apprenez à créer et à interroger des bases de données relationnelles à l'aide du langage SQL.
- Principes fondamentaux du langage SQL : Acquérez les compétences SQL fondamentales nécessaires pour interagir avec vos données et les interroger.
- Certification SQL Associate: Veuillez démontrer 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 relatives aux données.
- SQL intermédiaire : Grâce à ce cours pratique, vous apprendrez tout ce qu'il est nécessaire de savoir pour analyser des données à l'aide de votre propre code SQL dès aujourd'hui.

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équentes
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 doublons.
Existe-t-il une différence de performance entre UNION et UNION ALL ?
Oui, l'opération « UNION » est généralement plus lente car elle 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 pour établir des rapports et effectuer des analyses.
Quand est-il préférable d'utiliser SQL UNION plutôt que UNION ALL ?
Veuillez utiliser UNION lorsque vous avez besoin d'un ensemble de résultats combinés sans doublons.
Comment les différents dialectes SQL influencent-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 dans les performances, le traitement des valeurs NULL et le classement entre les différents dialectes SQL.