Guide complet sur UNION vs JOIN en SQL pour les débutants

Salut à toi, futur passionné de SQL ! Je suis ravi de devenir ton guide sur ce voyage passionnant à travers le monde du SQL. Aujourd'hui, nous allons percer les mystères de UNION et JOIN, deux opérations puissantes de SQL qui peuvent sembler déroutantes au départ mais qui deviendront rapidement tes meilleurs amis dans la manipulation des données. Alors, prends une tasse de café, installe-toi confortablement, et plongeons dedans !

SQL - Union vs Join

Comprendre les bases

Avant de plonger dans les subtilités de UNION et JOIN, commençons par une simple analogie. Imagine que tu organises une fête et que tu as deux listes d'invités : une pour tes amis et une autre pour ta famille. Maintenant, tu as deux options :

  1. Combiner les deux listes en une grande liste (c'est comme une UNION)
  2. Trouver quels de tes amis sont également tes proches (c'est comme une JOIN)

Ça a l'air intéressant ? Super ! Explorons chaque une de ces opérations en détail.

Fonctionnement de UNION

Qu'est-ce que UNION ?

UNION est comme un maître listing en SQL. Il prend deux ou plusieurs requêtes SELECT et combine leurs résultats en un seul jeu de résultats. C'est parfait lorsque tu veux fusionner des données provenant de différentes tables ayant une structure similaire.

UNION en action

Disons que nous avons deux tables : employees_usa et employees_uk. Nous voulons obtenir une liste de tous les employés, indépendamment de leur emplacement.

SELECT first_name, last_name, country
FROM employees_usa
UNION
SELECT first_name, last_name, country
FROM employees_uk;

Cette requête nous donnera une liste combinée de tous les employés des bureaux des USA et du Royaume-Uni. Génial, non ?

UNION ALL : Le cousin inclusif

Maintenant, que faire si nous voulons inclure les entrées en double ? C'est là que UNION ALL devient utile.

SELECT product_name, category
FROM products_2021
UNION ALL
SELECT product_name, category
FROM products_2022;

Cette requête énumérera tous les produits de 2021 et 2022, y compris les doublons si un produit était disponible les deux années.

Points clés à retenir

  1. UNION supprime les lignes en double par défaut
  2. UNION ALL conserve toutes les lignes, y compris les doubles
  3. Le nombre et l'ordre des colonnes doivent être les mêmes dans toutes les requêtes SELECT
  4. Les types de données des colonnes correspondantes doivent être compatibles

Fonctionnement de JOIN

Qu'est-ce que JOIN ?

Si UNION est un listing, JOIN est comme un matchmaker. Il combine des lignes de deux ou plusieurs tables basées sur une colonne relationnelle entre elles. C'est parfait lorsque tu veux récupérer des données réparties sur plusieurs tables.

Types de JOIN

Décomposons les différents types de JOIN en utilisant une analogie amusante. Imagine que tu es à une fête de danse :

  1. INNER JOIN : Seulement les danseurs qui savent la même danse
  2. LEFT JOIN : Associe tous les danseurs du côté gauche, même s'ils n'ont pas de partenaire
  3. RIGHT JOIN : Associe tous les danseurs du côté droit, même s'ils n'ont pas de partenaire
  4. FULL JOIN : Associe tous les danseurs, même si certains finissent par danser seuls

JOIN en action

Voyons comment ces JOINs fonctionnent dans des requêtes SQL réelles :

INNER JOIN

SELECT customers.name, orders.order_date
FROM customers
INNER JOIN orders ON customers.id = orders.customer_id;

Cette requête nous montrera tous les clients qui ont passé des commandes, ainsi que les dates de leurs commandes.

LEFT JOIN

SELECT employees.name, departments.dept_name
FROM employees
LEFT JOIN departments ON employees.dept_id = departments.id;

Cette requête énumérera tous les employés, même ceux qui ne sont affectés à aucun département.

RIGHT JOIN

SELECT products.name, categories.category_name
FROM products
RIGHT JOIN categories ON products.category_id = categories.id;

Cette requête montrera toutes les catégories, même celles sans produits.

FULL JOIN

SELECT students.name, courses.course_name
FROM students
FULL JOIN enrollments ON students.id = enrollments.student_id
FULL JOIN courses ON enrollments.course_id = courses.id;

Cette requête énumérera tous les étudiants et toutes les cours, même si certains étudiants ne sont pas inscrits à un cours ou si certains cours n'ont pas d'étudiants.

UNION vs JOIN : Le face-à-face

Maintenant que nous avons exploré UNION et JOIN, comparons-les côte à côte :

Aspect UNION JOIN
Objectif Combine des lignes de tables similaires Combine des colonnes de tables liées
Résultat Combinaison verticale (plus de lignes) Combinaison horizontale (plus de colonnes)
Structure de table Doit avoir le même nombre de colonnes Peut avoir un nombre différent de colonnes
Gestion des duplicates Supprime les duplicates (sauf UNION ALL) Conserve toutes les lignes correspondantes
Performance Généralement plus rapide pour de grands ensembles de données Peut être plus lent pour des jointures complexes
Cas d'utilisation Combining similar data from different sources Récupérer des données liées sur des tables

Conclusion : Choisir entre UNION et JOIN

Alors, quand utiliser UNION et quand opter pour JOIN ? Voici une règle simple :

  • Utilise UNION lorsque tu veux combiner des données similaires provenant de différentes tables en une seule liste.
  • Utilise JOIN lorsque tu veux récupérer des données liées réparties sur plusieurs tables.

N'oublie pas, comme choisir le bon outil pour un travail, choisir entre UNION et JOIN dépend de tes besoins spécifiques en données. Avec la pratique, tu développeras une intuition pour savoir lequel utiliser dans différentes situations.

J'espère que ce guide t'a aidé à démystifier UNION et JOIN. Continue de pratiquer, reste curieux, et avant de t'en rendre compte, tu danseras à travers les requêtes SQL comme un pro ! Bon codage !

Credits: Image by storyset