L’opérateur UNION en SQL est un outil puissant utilisé pour combiner les résultats de plusieurs requêtes SELECT en un seul ensemble de résultats. En combinant les données provenant de différentes tables ou de différentes conditions sur la même table, il facilite l’analyse de données complexes et la création de rapports. Cet article explique en détail l’utilisation de base de UNION, les différences entre UNION et UNION ALL, des exemples pratiques concrets, et les meilleures pratiques à suivre lors de son utilisation.
Utilisation de base de UNION
L’opérateur UNION est utilisé pour combiner les ensembles de résultats de deux requêtes SELECT ou plus. La syntaxe de base est la suivante :
SELECT colonne1, colonne2, ...
FROM table1
UNION
SELECT colonne1, colonne2, ...
FROM table2;
Points à considérer lors de l’utilisation
Lorsque vous utilisez UNION, veuillez noter les points suivants :
- Le nombre de colonnes et les types de données doivent correspondre dans chaque requête SELECT.
- Les noms des colonnes n’ont pas besoin de correspondre, mais les types de données doivent correspondre.
- Par défaut, UNION supprime les lignes en double. Si vous souhaitez conserver les doublons, utilisez UNION ALL.
Différences entre UNION et UNION ALL
En SQL, il existe deux opérateurs : UNION et UNION ALL. Tous deux combinent les résultats de plusieurs requêtes SELECT, mais ils présentent des différences importantes.
UNION
L’opérateur UNION supprime les lignes en double et renvoie un ensemble de résultats unique. En d’autres termes, si l’ensemble des résultats combiné contient des lignes en double, celles-ci sont comptabilisées comme une seule ligne.
SELECT colonne1, colonne2, ...
FROM table1
UNION
SELECT colonne1, colonne2, ...
FROM table2;
UNION ALL
L’opérateur UNION ALL renvoie toutes les lignes, y compris les doublons. Étant donné que les lignes en double sont incluses, les performances peuvent être meilleures qu’avec UNION.
SELECT colonne1, colonne2, ...
FROM table1
UNION ALL
SELECT colonne1, colonne2, ...
FROM table2;
Comparaison des exemples d’utilisation
Voyons la différence entre UNION et UNION ALL en utilisant les tables suivantes comme exemple.
Table 1 :
id | nom |
---|---|
1 | Taro |
2 | Hanako |
Table 2 :
id | nom |
---|---|
2 | Hanako |
3 | Jiro |
SELECT id, nom
FROM table1
UNION
SELECT id, nom
FROM table2;
Résultat de cette requête :
id | nom |
---|---|
1 | Taro |
2 | Hanako |
3 | Jiro |
SELECT id, nom
FROM table1
UNION ALL
SELECT id, nom
FROM table2;
Résultat de cette requête :
id | nom |
---|---|
1 | Taro |
2 | Hanako |
2 | Hanako |
3 | Jiro |
Lors de l’utilisation de UNION, il est utile d’éviter les doublons dans les données. UNION ALL est adapté pour récupérer toutes les données, y compris les doublons, ou pour optimiser les performances.
Exemple pratique 1 : Combinaison de données provenant de tables différentes
Voyons un exemple d’utilisation de l’opérateur UNION pour combiner des données provenant de différentes tables. Ici, nous allons récupérer les noms et les informations de contact à partir des tables des employés et des clients pour créer une liste de toutes les personnes.
Table des employés (employees)
employee_id | nom | |
---|---|---|
1 | Taro Yamada | yamada@example.com |
2 | Hanako Sato | sato@example.com |
Table des clients (customers)
customer_id | nom | |
---|---|---|
1 | Jiro Suzuki | suzuki@example.com |
2 | Ichiro Tanaka | tanaka@example.com |
La requête suivante combine tous les noms et adresses e-mail de ces tables en une seule liste :
SELECT nom, email
FROM employees
UNION
SELECT nom, email
FROM customers;
Résultat de la requête
Le résultat de cette requête est le suivant :
nom | |
---|---|
Taro Yamada | yamada@example.com |
Hanako Sato | sato@example.com |
Jiro Suzuki | suzuki@example.com |
Ichiro Tanaka | tanaka@example.com |
Comme vous pouvez le constater, les noms et adresses e-mail des employés et des clients sont combinés en une seule liste. L’utilisation de UNION permet de combiner facilement les données provenant de tables différentes.
Exemple pratique 2 : Combinaison de données conditionnelles dans la même table
Voyons un exemple d’utilisation de UNION pour combiner des données conditionnelles dans la même table. Ici, nous allons combiner les ventes d’un mois spécifique avec les ventes de l’ensemble de la période à partir de la table des ventes.
Table des ventes (sales)
sale_id | produit | date_de_vente | montant |
---|---|---|---|
1 | Produit A | 2024-01-15 | 5000 |
2 | Produit B | 2024-02-20 | 3000 |
3 | Produit C | 2024-01-10 | 7000 |
4 | Produit D | 2024-03-05 | 2000 |
La requête suivante combine les ventes de janvier 2024 avec les ventes de l’ensemble de la période en un seul ensemble de résultats :
SELECT produit, montant, 'janvier 2024' AS période
FROM sales
WHERE date_de_vente BETWEEN '2024-01-01' AND '2024-01-31'
UNION
SELECT produit, montant, 'toute la période' AS période
FROM sales;
Résultat de la requête
Le résultat de cette requête est le suivant :
produit | montant | période |
---|---|---|
Produit A | 5000 | janvier 2024 |
Produit C | 7000 | janvier 2024 |
Produit A | 5000 | toute la période |
Produit B | 3000 | toute la période |
Produit C | 7000 | toute la période |
Produit D | 2000 | toute la période |
Comme vous pouvez le constater, en combinant les données basées sur des conditions différentes dans la même table, vous pouvez afficher les ventes d’une période spécifique et de l’ensemble de la période simultanément. De cette manière, UNION permet de réaliser facilement des combinaisons de données basées sur des conditions complexes.
Meilleures pratiques pour l’utilisation de UNION
Voici quelques meilleures pratiques pour utiliser efficacement l’opérateur UNION. En suivant ces directives, vous pouvez améliorer les performances de vos requêtes et les rendre plus lisibles.
Considérer les performances
UNION, par défaut, supprime les lignes en double, ce qui nécessite un traitement supplémentaire et peut affecter les performances. Si conserver les doublons ne pose pas de problème, utilisez UNION ALL pour améliorer les performances.
SELECT colonne1, colonne2, ...
FROM table1
UNION ALL
SELECT colonne1, colonne2, ...
FROM table2;
Vérifier la correspondance des types de données
Lors de l’utilisation de UNION, le nombre de colonnes et les types de données dans chaque requête SELECT doivent correspondre. Si vous essayez de combiner des types de données différents, une erreur se produira. Assurez-vous que les types de données des colonnes correspondent avant d’exécuter la requête.
Sélectionner uniquement les colonnes nécessaires
Pour améliorer les performances et la lisibilité de vos requêtes, sélectionnez uniquement les colonnes nécessaires. Inclure des colonnes inutiles peut compliquer l’ensemble des résultats et augmenter le temps de traitement.
SELECT colonne1, colonne2
FROM table1
UNION
SELECT colonne1, colonne2
FROM table2;
Utiliser des index appropriés
Pour optimiser les performances des requêtes UNION, il est important de définir les index appropriés. L’utilisation d’index permet à la base de données de traiter les requêtes combinées plus efficacement.
Considérer l’ordre des requêtes
Dans les requêtes UNION, placer la requête la plus efficace en premier peut améliorer les performances globales. En filtrant autant de données que possible dans la première requête, vous réduisez la charge des requêtes suivantes.
En suivant ces meilleures pratiques, vous pouvez améliorer les performances et la lisibilité de vos requêtes utilisant l’opérateur UNION.
Conclusion
L’opérateur UNION est un outil puissant pour combiner les résultats de plusieurs requêtes SELECT en un seul ensemble de résultats. Comprendre la différence entre UNION et UNION ALL, et savoir quand utiliser l’un ou l’autre, vous permet de combiner efficacement les données.
Dans cet article, nous avons détaillé son utilisation de base, fourni des exemples pratiques et présenté les meilleures pratiques pour améliorer les performances et la lisibilité de vos requêtes. En appliquant ces connaissances, vous pourrez améliorer l’efficacité de vos requêtes de bases de données et simplifier l’analyse de données complexes.
En utilisant efficacement UNION, vous pourrez résoudre les défis d’intégration des données en douceur et réaliser des opérations de base de données plus puissantes.