SQL - UNION vs UNION ALL

Bonjour là-bas, aspirants passionnés de SQL ! Aujourd'hui, nous allons entreprendre un voyage passionnant dans le monde du SQL, en nous concentrant spécifiquement sur deux opérateurs puissants : UNION et UNION ALL. En tant qu'enseignant bienveillant en informatique avec des années d'expérience sous mon ceinturon, je suis là pour vous guider à travers ces concepts avec clarté, humour et un tas d'exemples du monde réel. Alors, plongeons dedans !

SQL - UNION vs UNION ALL

Qu'est-ce que UNION ?

Définition et Concept de Base

UNION est comme un grand chef qui combine des ingrédients de différentes recettes pour créer un plat unique. En termes de SQL, c'est un opérateur qui nous permet de combiner les ensembles de résultats de deux ou plusieurs instructions SELECT en un seul ensemble de résultats.

Voici la syntaxe de base :

SELECT column1, column2, ... FROM table1
UNION
SELECT column1, column2, ... FROM table2;

Caractéristiques Clés de UNION

  1. Résultats Distincts : UNION supprime automatiquement les lignes en double dans l'ensemble de résultats final.
  2. Compatibilité des Colonnes : Les instructions SELECT doivent avoir le même nombre de colonnes, et ces colonnes doivent avoir des types de données compatibles.
  3. Ordre des Colonnes : L'ordre des colonnes dans les instructions SELECT importe, car elles sont combinées en fonction de leur position.

UNION en Action

Imaginons que nous avons deux tables : fruits et vegetables. Nous voulons créer une liste combinée de tous les articles de produits.

-- table fruits
CREATE TABLE fruits (
id INT,
name VARCHAR(50),
color VARCHAR(20)
);

INSERT INTO fruits VALUES
(1, 'Apple', 'Red'),
(2, 'Banana', 'Yellow'),
(3, 'Orange', 'Orange');

-- table vegetables
CREATE TABLE vegetables (
id INT,
name VARCHAR(50),
color VARCHAR(20)
);

INSERT INTO vegetables VALUES
(1, 'Carrot', 'Orange'),
(2, 'Broccoli', 'Green'),
(3, 'Tomato', 'Red');

-- requête UNION
SELECT name, color FROM fruits
UNION
SELECT name, color FROM vegetables;

Cette requête nous donnera :

name color
Apple Red
Banana Yellow
Orange Orange
Carrot Orange
Broccoli Green
Tomato Red

Notez comment nous avons une seule entrée 'Orange', même si elle apparaît dans les deux tables. C'est la magie de UNION - elle supprime les doubles !

Qu'est-ce que UNION ALL ?

Définition et Concept de Base

Rencontrons maintenant le cousin enthousiaste de UNION, UNION ALL. Alors que UNION est comme un chef méticuleux qui supprime les ingrédients en double, UNION ALL est comme un chef qui croit "plus, c'est mieux !"

La syntaxe est similaire à UNION :

SELECT column1, column2, ... FROM table1
UNION ALL
SELECT column1, column2, ... FROM table2;

Caractéristiques Clés de UNION ALL

  1. Conservation des Doubles : UNION ALL conserve toutes les lignes, y compris les doubles.
  2. Performance Plus Rapide : Puisque elle n'a pas besoin de supprimer les doubles, UNION ALL est généralement plus rapide que UNION.
  3. Compatibilité des Colonnes : Comme UNION, elle exige le même nombre de colonnes avec des types de données compatibles.

UNION ALL en Action

Reprenons nos tables fruits et vegetables :

SELECT name, color FROM fruits
UNION ALL
SELECT name, color FROM vegetables;

Cette requête produira :

name color
Apple Red
Banana Yellow
Orange Orange
Carrot Orange
Broccoli Green
Tomato Red

Notez que nous avons maintenant deux entrées 'Orange' - une des fruits et une des légumes. UNION ALL conserve toutes les lignes, doubles et triples !

UNION vs UNION ALL : une Comparaison Face à Face

Pour vraiment comprendre la différence, comparons-les côte à côte :

Fonctionnalité UNION UNION ALL
Gestion des Doubles Supprime les doubles Conserve tous les doubles
Performance Plus lent (à cause de la déduplication) Plus rapide
Taille de l'Ensemble de Résultats Potentiellement plus petit Potentiellement plus grand
Cas d'Utilisation Quand des résultats uniques sont nécessaires Quand tous les résultats, y compris les doubles, sont requis

Quand Utiliser UNION

Utilisez UNION lorsque vous avez besoin de combiner les résultats de plusieurs requêtes et que vous souhaitez garantir que chaque ligne dans l'ensemble de résultats est unique. C'est parfait pour des scénarios comme :

  1. Combining des listes de clients de différentes régions, en évitant les doubles.
  2. Fusionner des catalogues de produits de différents fournisseurs, en supprimant les articles en double.

Quand Utiliser UNION ALL

Optez pour UNION ALL lorsque :

  1. Vous savez qu'il n'y a pas de doubles dans vos ensembles de données.
  2. Vous avez besoin de conserver toutes les lignes, y compris les doubles.
  3. La performance est une priorité et vous traitez de grands ensembles de données.

Exemples Pratiques

Plongeons dans quelques scénarios du monde réel pour solidifier notre compréhension.

Exemple 1 : Annuaire des Employés

Imaginons que nous avons deux tables : current_employees et former_employees. Nous voulons créer un annuaire complet.

-- Créer et remplir les tables
CREATE TABLE current_employees (id INT, name VARCHAR(50), department VARCHAR(50));
CREATE TABLE former_employees (id INT, name VARCHAR(50), department VARCHAR(50));

INSERT INTO current_employees VALUES
(1, 'Alice', 'HR'),
(2, 'Bob', 'IT'),
(3, 'Charlie', 'Finance');

INSERT INTO former_employees VALUES
(4, 'David', 'Marketing'),
(5, 'Eve', 'IT'),
(2, 'Bob', 'IT');  -- Bob a travaillé ici, est parti, et est revenu

-- Requête UNION
SELECT name, department FROM current_employees
UNION
SELECT name, department FROM former_employees;

-- Requête UNION ALL
SELECT name, department FROM current_employees
UNION ALL
SELECT name, department FROM former_employees;

La requête UNION montrera Bob une seule fois, tandis que UNION ALL le montrera deux fois.

Exemple 2 : Rapport de Ventes

Créons un rapport de ventes combinant les ventes en ligne et en magasin.

-- Créer et remplir les tables
CREATE TABLE online_sales (product VARCHAR(50), amount DECIMAL(10,2));
CREATE TABLE store_sales (product VARCHAR(50), amount DECIMAL(10,2));

INSERT INTO online_sales VALUES
('Laptop', 1200.00),
('Phone', 800.00),
('Tablet', 500.00);

INSERT INTO store_sales VALUES
('Laptop', 1100.00),
('Phone', 750.00),
('Headphones', 200.00);

-- Total des produits uniques vendus (UNION)
SELECT product FROM online_sales
UNION
SELECT product FROM store_sales;

-- Toutes les entrées de vente (UNION ALL)
SELECT 'Online' AS source, product, amount FROM online_sales
UNION ALL
SELECT 'Store' AS source, product, amount FROM store_sales;

La requête UNION nous donne une liste des produits uniques vendus sur les deux canaux, tandis que UNION ALL nous fournit une liste complète de toutes les transactions de vente.

Conclusion

Et voilà, mes chers élèves ! Nous avons fait le voyage à travers les terres de UNION et UNION ALL, en explorant leurs similitudes, leurs différences et leurs applications dans le monde réel. Souvenez-vous, UNION est votre allié pour des résultats uniques et dédoublés, tandis que UNION ALL est votre ami rapide lorsque vous avez besoin de toutes les données, doubles et triples.

Alors que vous continuez votre aventure en SQL, vous trouverez d'innombrables occasions d'utiliser ces outils puissants. Comme dans la cuisine, connaître quand utiliser chaque ingrédient (ou dans notre cas, opérateur) est la clé pour créer la recette de requête parfaite.

Continuez à pratiquer, restez curieux, et n'ayez pas peur d'expérimenter avec ces concepts. Avant de vous en rendre compte, vous serez un pro en UNION et UNION ALL ! Bonne chance avec vos requêtes !

Credits: Image by storyset