PostgreSQL - Clause UNIONS

Salut à toi, futurs magiciens de bases de données ! Aujourd'hui, nous allons plonger dans le monde magique de PostgreSQL et explorer l'une de ses formules puissantes : la clause UNION. Ne t'inquiète pas si tu n'as jamais écrit une ligne de code auparavant - je serai ton guide amical à travers cette aventure. Alors, prends ton bâton (clavier) et c'est parti !

PostgreSQL - Unions Clause

Qu'est-ce qu'une UNION ?

Avant de rentrer dans les détails, comprensons ce qu'est une UNION. Imagine que tu as deux listes distinctes de tes livres préférés. Une liste contient des romans de fantasy, et l'autre des titres de science-fiction. Maintenant, que faire si tu veux combiner ces listes en une super-liste de livres incroyables ? C'est exactement ce que fait UNION dans le monde des bases de données !

Dans PostgreSQL, UNION permet de combiner les résultats de deux ou plusieurs requêtes SELECT en un seul jeu de résultats. C'est comme mélanger différentes couleurs de peinture pour créer une nouvelle couleur passionnante !

Syntaxe

Maintenant, regardons les mots magiques (syntaxe) dont nous avons besoin pour lancer notre sorts UNION :

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

Ça a l'air simple, n'est-ce pas ? Mais souviens-toi, avec un grand pouvoir vient une grande responsabilité. Voici quelques règles importantes à suivre :

  1. Le nombre et l'ordre des colonnes dans toutes les requêtes SELECT doivent être les mêmes.
  2. Les types de données des colonnes correspondantes doivent être compatibles.
  3. Par défaut, UNION supprime les lignes en double (nous verrons comment changer cela plus tard).

Exemple

Mettons notre analogie de liste de livres en pratique avec un peu de code. Imaginons que nous avons deux tables : fantasy_books et scifi_books.

-- Créer la table fantasy_books
CREATE TABLE fantasy_books (
id SERIAL PRIMARY KEY,
title VARCHAR(100),
author VARCHAR(100)
);

-- Insérer quelques livres de fantasy
INSERT INTO fantasy_books (title, author) VALUES
('Le Hobbit', 'J.R.R. Tolkien'),
('Harry Potter et la Pierre Philosophale', 'J.K. Rowling'),
('Un Jeu de Thrones', 'George R.R. Martin');

-- Créer la table scifi_books
CREATE TABLE scifi_books (
id SERIAL PRIMARY KEY,
title VARCHAR(100),
author VARCHAR(100)
);

-- Insérer quelques livres de science-fiction
INSERT INTO scifi_books (title, author) VALUES
('Dune', 'Frank Herbert'),
('Le Guide du voyageur galactique', 'Douglas Adams'),
('1984', 'George Orwell');

Maintenant, utilisons UNION pour créer notre super-liste de livres :

SELECT title, author FROM fantasy_books
UNION
SELECT title, author FROM scifi_books;

Cette requête nous donnera une liste combinée de tous les livres des deux tables, sans doublons. C'est comme mélanger deux paquets de cartes ensemble, en veillant à ne pas avoir de cartes en double !

Comprendre le Résultat

Lorsque vous exécutez cette requête, vous verrez quelque chose comme ceci :

title author
Le Hobbit J.R.R. Tolkien
Harry Potter et la Pierre Philosophale J.K. Rowling
Un Jeu de Thrones George R.R. Martin
Dune Frank Herbert
Le Guide du voyageur galactique Douglas Adams
1984 George Orwell

Regarde cette belle liste combinée ! C'est comme organiser une fête où les auteurs de fantasy et de science-fiction peuvent se mêler. Je peux presque imaginer Tolkien et Herbert ayant une conversation fascinante sur la création de mondes !

La Clause UNION ALL

Maintenant, que faire si nous voulons conserver toutes les lignes, même si elles sont en double ? C'est là que UNION ALL devient utile. C'est comme dire à ta base de données : "Je veux TOUS les livres, même si certains titres apparaissent plus d'une fois !"

Modifions légèrement notre exemple précédent :

-- Insérer un livre en double dans scifi_books
INSERT INTO scifi_books (title, author) VALUES
('Le Hobbit', 'J.R.R. Tolkien');

-- Utilisons UNION ALL
SELECT title, author FROM fantasy_books
UNION ALL
SELECT title, author FROM scifi_books;

Cette requête nous donnera :

title author
Le Hobbit J.R.R. Tolkien
Harry Potter et la Pierre Philosophale J.K. Rowling
Un Jeu de Thrones George R.R. Martin
Dune Frank Herbert
Le Guide du voyageur galactique Douglas Adams
1984 George Orwell
Le Hobbit J.R.R. Tolkien

Notice comment "Le Hobbit" apparaît deux fois maintenant ? C'est comme inviter le même invité à ta fête deux fois - ils ont deux parts de gâteau !

Applications Pratiques

Tu peux te demander : "C'est sympa, mais quand utiliserais-je vraiment cela dans la vie réelle ?" Excellent question ! Voici quelques scénarios :

  1. Combiner des données de différentes tables ayant des structures similaires (comme notre exemple de livres).
  2. Fusionner les résultats de différentes requêtes pour créer des rapports complets.
  3. Comparer des données entre différentes périodes ou catégories.

Par exemple, imagine que tu gères une librairie. Tu pourrais utiliser UNION pour créer une liste unique de tous les livres qui sont soit en stock bas, soit non vendus au cours du dernier mois :

SELECT title, 'Stock Bas' AS reason
FROM inventory
WHERE quantity < 5
UNION
SELECT title, 'Aucun Vente Récente' AS reason
FROM sales
WHERE last_sale_date < CURRENT_DATE - INTERVAL '30 days';

Cette requête t'aiderait rapidement à identifier les livres que tu pourrais devoir réapprovisionner ou mettre en promotion.

Pièges Courants et Comment les Éviter

  1. Colonnes Non Correspondantes : Souviens-toi, le nombre et l'ordre des colonnes dans toutes les requêtes SELECT doivent matcher. Si ce n'est pas le cas, PostgreSQL lancera une erreur plus rapidement que tu ne peux dire "Expelliarmus !"

  2. Types de Données Incompatibles : Assure-toi que les types de données des colonnes correspondantes sont compatibles. Tu ne peux pas mélanger des pommes et des vaisseaux spatiaux (sauf si tu écris une science-fiction vraiment intéressante).

  3. Oublier ORDER BY : Les opérations UNION peuvent affecter l'ordre de tes résultats. Si tu as besoin d'un ordre spécifique, ajoute toujours une clause ORDER BY à la fin de ta requête UNION.

Conclusion

Et voilà, mes chers élèves ! Vous venez d'apprendre à manier la puissante clause UNION dans PostgreSQL. Souvenez-vous, comme toute bonne formule magique, elle nécessite de la pratique pour être maîtrisée. N'ayez pas peur d'expérimenter avec différentes requêtes et de voir quels résultats vous obtenez.

Avant de vous laisser partir, voici un petit défi : Essayez de créer deux tables de votre propre (peut-être une pour vos films préférés et une autre pour vos séries TV préférées) et utilisez UNION pour les combiner. Jouez avec UNION et UNION ALL pour voir les différences.

Bonne requête, et puissent vos bases de données toujours être normalisées et vos jointures rapides !

Credits: Image by storyset