Explication et exemples pratiques de la combinaison de requêtes avec UNION en SQL

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.

Sommaire

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 :

idnom
1Taro
2Hanako

Table 2 :

idnom
2Hanako
3Jiro
SELECT id, nom
FROM table1
UNION
SELECT id, nom
FROM table2;

Résultat de cette requête :

idnom
1Taro
2Hanako
3Jiro
SELECT id, nom
FROM table1
UNION ALL
SELECT id, nom
FROM table2;

Résultat de cette requête :

idnom
1Taro
2Hanako
2Hanako
3Jiro

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_idnomemail
1Taro Yamadayamada@example.com
2Hanako Satosato@example.com

Table des clients (customers)

customer_idnomemail
1Jiro Suzukisuzuki@example.com
2Ichiro Tanakatanaka@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 :

nomemail
Taro Yamadayamada@example.com
Hanako Satosato@example.com
Jiro Suzukisuzuki@example.com
Ichiro Tanakatanaka@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_idproduitdate_de_ventemontant
1Produit A2024-01-155000
2Produit B2024-02-203000
3Produit C2024-01-107000
4Produit D2024-03-052000

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 :

produitmontantpériode
Produit A5000janvier 2024
Produit C7000janvier 2024
Produit A5000toute la période
Produit B3000toute la période
Produit C7000toute la période
Produit D2000toute 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.

Sommaire