Combinez les résultats de deux ou plusieurs instructions SELECT - UNION
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.
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 et
- Les avoir dans le même ordre
Mais ils n'ont pas besoin d'être dans la même longueur.
La clause UNION produit des valeurs distinctes dans le jeu de résultats. Pour extraire les valeurs en double, UNION ALL doit être utilisée à la place de UNION.
Syntaxe - UNION
SELECT colonne1 [, colonne2 ] FROM table1 [, table2 ] [WHERE condition] UNION SELECT colonne1 [, colonne2 ] FROM table1 [, table2 ] [WHERE condition]
Syntaxe - UNION ALL
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 donnée en fonction de vos besoins.
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
Exemple 1 :
Pour récupérer des identifiants distincts d'employés à partir des tables Employee et Conges.
SELECT Id From Employes UNION SELECT Emp FROM Conges;
Cette requête produira le jeu de résultats suivant :
+----+ | Id | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | +----+
Exemple 2 :
Pour récupérer des identifiants distincts d'employés de la table Employee et de la table Conges, y compris les valeurs en double.
SELECT Id From Employes UNION ALL SELECT Emp FROM Conges;
Cette requête produira le jeu de résultats suivant :
+----+ | Id | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 1 | | 3 | | 4 | +----+
Exemple 3 :
Pour récupérer Id et le 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;
Cette requête produira le jeu de résultats suivant :
+----+---------+ | Id | Nom | +----+---------+ | 1 | Voyage | | 4 | Dounia | | 5 | Omar | | 6 | Mostafa | +----+---------+
Exemple 4 :
Utilisez 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;
Cette requête produira le jeu de résultats suivant :
+------+---------+ | Id | Nom | +------+---------+ | 1 | Ismail | | 3 | Fatima | | 4 | Dounia | | 2 | Mohamed | | 5 | Omar | | 6 | Mostafa | +------+---------+