L'opérateur UNION en SQL

24 Sep 2019 24 Sep 2019 8245 vues ESSADDOUKI Mostafa 7 min de lecture

L'opérateur UNION en SQL

Définition

La clause/opérateur SQL UNION est utilisée pour combiner les résultats de deux ou plusieurs instructions SELECT sans renvoyer les lignes en double.

Conditions d'utilisation

Pour utiliser cette clause UNION, chaque instruction SELECT doit avoir :

  • Le même nombre de colonnes sélectionnées
  • Le même type de données pour les colonnes correspondantes
  • Les colonnes dans le même ordre

Mais elles n'ont pas besoin d'avoir la même longueur.

UNION vs UNION ALL

La clause UNION produit des valeurs distinctes dans le jeu de résultats (élimine les doublons).

Pour conserver les valeurs en double, UNION ALL doit être utilisé à la place de UNION.

Syntaxe

Syntaxe - UNION (sans doublons)

   
UNION SQL
SELECT colonne1 [, colonne2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION

SELECT colonne1 [, colonne2 ]
FROM table1 [, table2 ]
[WHERE condition]

Syntaxe - UNION ALL (avec doublons)

   
UNION ALL SQL
SELECT colonne1 [, colonne2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION ALL

SELECT colonne1 [, colonne2 ]
FROM table1 [, table2 ]
[WHERE condition]

Ici, la condition donnée peut être toute expression en fonction de vos besoins.

Remarque importante

Les noms de colonne dans les deux instructions SELECT peuvent être différents mais le type de données doit être identique. Dans le résultat, le nom de la colonne utilisée dans la première instruction SELECT apparaîtra.

Tables d'exemple

Pendant ce cours, nous allons travailler sur ces 2 tables :

Table - Employes

+----+---------+-----+---------+------------+------+
| Id | Nom     | Age | Salaire | Profession | Dep  |
+----+---------+-----+---------+------------+------+
|  1 | Ismail  |  25 | 6000.00 | Technicien |    2 |
|  2 | Mohamed |  30 | 2000.10 | Directeur  |    1 |
|  3 | Fatima  |  29 | 8000.00 | Assistant  |    2 |
|  4 | Dounia  |  30 | 1750.00 | Assistant  |    4 |
|  5 | Omar    |  30 | 2250.00 | Ingenieur  |    1 |
|  6 | Mostafa |  32 | 7500.00 | Formateur  |    1 |
+----+---------+-----+---------+------------+------+

Table - Conges

+------+------------+------------+-------------------+-----+
| Id_c | Date_debut | Date_fin   | Raison            | Emp |
+------+------------+------------+-------------------+-----+
|    1 | 2019-02-01 | 2019-02-15 | Voyage            |   1 |
|    2 | 2019-05-20 | 2019-06-03 | Maladie d'enfant  |   3 |
|    3 | 2019-09-01 | 2019-09-15 | Rentrée scolaire  |   4 |
+------+------------+------------+-------------------+-----+

Exemples d'utilisation

Exemple 1

UNION simple

Pour récupérer des identifiants distincts d'employés à partir des tables Employes et Conges.

SELECT Id FROM Employes
UNION 
SELECT Emp FROM Conges;
Résultat
+----+
| Id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
|  6 |
+----+

Explication :

  • La première requête sélectionne tous les Id de la table Employes (1,2,3,4,5,6).
  • La deuxième requête sélectionne tous les Emp de la table Conges (1,3,4).
  • UNION élimine les doublons : les valeurs 1,3,4 apparaissent une seule fois.
  • Résultat final : 1,2,3,4,5,6 (tous les Id distincts des deux tables).
Exemple 2

UNION ALL avec doublons

Pour récupérer des identifiants d'employés de la table Employes et de la table Conges, y compris les valeurs en double.

SELECT Id FROM Employes
UNION ALL
SELECT Emp FROM Conges;
Résultat
+----+
| Id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
|  6 |
|  1 |
|  3 |
|  4 |
+----+

Explication :

  • Contrairement à UNION, UNION ALL conserve tous les résultats, y compris les doublons.
  • Les valeurs 1,3,4 apparaissent deux fois (une fois de chaque table).
  • Le résultat contient 9 lignes au total.
Exemple 3

UNION ALL avec conditions et tri

Pour récupérer Id et Nom de la table Employes où Id est supérieur à 3, et Emp, Raison de la table Conges où Emp est inférieur à 3, en incluant les valeurs en double et en triant les données par Id.

SELECT Id, Nom FROM Employes WHERE Id > 3 
UNION ALL
SELECT Emp, Raison FROM Conges WHERE Emp < 3
ORDER BY Id;
Résultat
+----+---------+
| Id | Nom     |
+----+---------+
|  1 | Voyage  |
|  4 | Dounia  |
|  5 | Omar    |
|  6 | Mostafa |
+----+---------+

Explication :

  • Première requête : Id > 3 dans Employes → (4, Dounia), (5, Omar), (6, Mostafa).
  • Deuxième requête : Emp < 3 dans Conges → (1, Voyage), (3, Maladie d'enfant) n'est pas inclus car Emp=3 n'est pas < 3.
  • UNION ALL combine les résultats (4 lignes).
  • ORDER BY Id trie le résultat final par la colonne Id.
  • Note : La colonne "Nom" dans le résultat prend le nom de la première requête, mais contient des valeurs de nature différente (noms d'employés et raisons de congés).
Exemple 4

UNION avec LEFT JOIN et RIGHT JOIN

Utiliser LEFT JOIN et RIGHT JOIN dans la clause UNION.

SELECT E.Id, E.Nom FROM Employes as E LEFT JOIN Conges as C ON E.Id = C.Emp
UNION
SELECT E.Id, E.Nom FROM Employes as E RIGHT JOIN Conges as C ON E.Id = C.Emp;
Résultat
+------+---------+
| Id   | Nom     |
+------+---------+
|    1 | Ismail  |
|    3 | Fatima  |
|    4 | Dounia  |
|    2 | Mohamed |
|    5 | Omar    |
|    6 | Mostafa |
+------+---------+

Explication :

  • LEFT JOIN : tous les employés, même ceux sans congés (tous les Id de 1 à 6).
  • RIGHT JOIN : tous les employés qui ont des congés (ceux dont Id = Emp dans Conges : 1,3,4).
  • UNION (sans ALL) combine les deux résultats et élimine les doublons.
  • Le résultat final contient tous les employés (1 à 6) une seule fois.
  • Cette requête équivaut à un FULL OUTER JOIN simulé avec UNION.

Récapitulatif

OpérateurComportementQuand l'utiliser
UNIONCombine les résultats et élimine les doublonsQuand on veut des valeurs distinctes
UNION ALLCombine les résultats en conservant tous les doublonsQuand on veut toutes les valeurs (plus rapide car pas de tri pour éliminer les doublons)
Bonnes pratiques
  • Utilisez UNION ALL plutôt que UNION lorsque vous savez qu'il n'y a pas de doublons ou que vous voulez les conserver (plus performant).
  • Les colonnes doivent correspondre en nombre, type et ordre.
  • ORDER BY s'applique au résultat final, pas aux requêtes individuelles.
  • Les noms des colonnes dans le résultat sont ceux de la première requête.
 Exercice pratique

Requêtes avec UNION

 Niveau : Débutant

En utilisant les tables Employes et Conges, écrivez les requêtes SQL pour :

  1. Afficher tous les noms des employés et toutes les raisons de congés (une seule liste, sans doublons).
  2. Afficher tous les identifiants des employés du département 1 et tous les identifiants des employés ayant pris un congé (avec doublons).
  3. Combiner les noms et professions des employés avec les raisons de congés, triés par ordre alphabétique.
Points clés à retenir
  • UNION combine les résultats de plusieurs SELECT en éliminant les doublons.
  • UNION ALL combine les résultats en conservant tous les doublons (plus rapide).
  • Les requêtes combinées doivent avoir le même nombre de colonnes, les mêmes types et dans le même ordre.
  • Les noms des colonnes du résultat sont ceux de la première requête.
  • ORDER BY s'applique au résultat final, pas aux requêtes individuelles.
  • On peut utiliser UNION pour simuler un FULL OUTER JOIN en combinant LEFT JOIN et RIGHT JOIN.
  • UNION est utile pour fusionner des données de tables différentes ou pour créer des listes combinées.
SQL

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.