PostgreSQL - JOINS

Bonjour, passionnés de bases de données en herbe ! Aujourd'hui, nous allons entreprendre un voyage passionnant à travers le monde des jonctions (JOINs) de PostgreSQL. En tant que votre enseignant bienveillant de quartier, je suis là pour vous guider à travers cette aventure, étape par étape. Ne vous inquiétez pas si vous n'avez jamais écrit une ligne de code auparavant - nous allons commencer par les bases et progresser pas à pas. Alors, mettez vos casques virtuels, et plongeons dedans !

PostgreSQL - Joins

Qu'est-ce qu'un JOIN ?

Avant de sauter dans les différents types de JOINs, comprenons ce qu'est réellement un JOIN. Imaginez que vous organisez une grande fête (car qui n'aime pas une bonne fête de base de données, non ?). Vous avez deux listes : l'une avec les noms de vos amis et l'autre avec leurs boissons favorites. Les JOINs sont comme des organisateurs de fête magiques qui vous aident à combiner ces listes de différentes manières pour créer la liste parfaite des invités avec leurs boissons préférées.

En termes de base de données, les JOINs nous permettent de combiner des lignes de deux ou plusieurs tables en fonction d'une colonne relationnelle entre elles. Maintenant, explorons les différents types de JOINs que PostgreSQL nous offre.

Le CROSS JOIN

Qu'est-ce qu'un CROSS JOIN ?

Un CROSS JOIN est comme inviter tout le monde sur vos deux listes à la fête, indépendamment de savoir si vous connaissez leur préférence de boisson ou non. Il combine chaque ligne de la première table avec chaque ligne de la seconde table.

Exemple de CROSS JOIN

Créons deux tables simples pour notre exemple :

CREATE TABLE amis (
id SERIAL PRIMARY KEY,
nom VARCHAR(50)
);

CREATE TABLE boissons (
id SERIAL PRIMARY KEY,
boisson VARCHAR(50)
);

INSERT INTO amis (nom) VALUES ('Alice'), ('Bob'), ('Charlie');
INSERT INTO boissons (boisson) VALUES ('Cola'), ('Jus'), ('Eau');

Maintenant, effectuons un CROSS JOIN :

SELECT a.nom, b.boisson
FROM amis a
CROSS JOIN boissons b;

Résultat :

nom boisson
Alice Cola
Alice Jus
Alice Eau
Bob Cola
Bob Jus
Bob Eau
Charlie Cola
Charlie Jus
Charlie Eau

Comme vous pouvez le voir, chaque ami est associé à chaque boisson. C'est comme dire : "Hey, tout le monde peut essayer toutes les boissons !" Cela peut ne pas être toujours pratique, mais c'est un excellent moyen de générer toutes les combinaisons possibles.

Le INNER JOIN

Qu'est-ce qu'un INNER JOIN ?

Un INNER JOIN est plus sélectif. C'est comme matcher vos amis avec leurs boissons favorites, mais seulement inclure ceux qui ont une préférence de boisson connue.

Exemple de INNER JOIN

Modifions un peu nos tables :

CREATE TABLE amis (
id SERIAL PRIMARY KEY,
nom VARCHAR(50)
);

CREATE TABLE boissons_preferes (
id SERIAL PRIMARY KEY,
ami_id INTEGER,
boisson VARCHAR(50)
);

INSERT INTO amis (nom) VALUES ('Alice'), ('Bob'), ('Charlie'), ('David');
INSERT INTO boissons_preferes (ami_id, boisson) VALUES (1, 'Cola'), (2, 'Jus'), (3, 'Eau');

Maintenant, effectuons un INNER JOIN :

SELECT a.nom, bp.boisson
FROM amis a
INNER JOIN boissons_preferes bp ON a.id = bp.ami_id;

Résultat :

nom boisson
Alice Cola
Bob Jus
Charlie Eau

Notez que David n'apparaît pas dans le résultat car il n'a pas de boisson favorite répertoriée.

Le LEFT OUTER JOIN

Qu'est-ce qu'un LEFT OUTER JOIN ?

Un LEFT OUTER JOIN est comme s'assurer que tous vos amis sont sur la liste des invités, même si vous ne connaissez pas leur préférence de boisson. Ceux sans une préférence connue pourraient obtenir une boisson par défaut ou pas de boisson du tout.

Exemple de LEFT OUTER JOIN

Utilisons les mêmes tables que dans l'exemple de INNER JOIN :

SELECT a.nom, bp.boisson
FROM amis a
LEFT OUTER JOIN boissons_preferes bp ON a.id = bp.ami_id;

Résultat :

nom boisson
Alice Cola
Bob Jus
Charlie Eau
David NULL

Voyez comment David est inclus maintenant, mais avec une boisson NULL ? C'est la magie du LEFT OUTER JOIN !

Le RIGHT OUTER JOIN

Qu'est-ce qu'un RIGHT OUTER JOIN ?

Un RIGHT OUTER JOIN est l'inverse du LEFT OUTER JOIN. C'est comme s'assurer que toutes les boissons sont au menu, même si personne ne les a choisies comme leur favorite.

Exemple de RIGHT OUTER JOIN

Ajoutons une boisson que personne n'a choisie comme leur favorite :

INSERT INTO boissons_preferes (boisson) VALUES ('Limonade');

SELECT a.nom, bp.boisson
FROM amis a
RIGHT OUTER JOIN boissons_preferes bp ON a.id = bp.ami_id;

Résultat :

nom boisson
Alice Cola
Bob Jus
Charlie Eau
NULL Limonade

La limonade apparaît dans la liste même si aucun ami ne l'a choisie comme leur favorite.

Le FULL OUTER JOIN

Qu'est-ce qu'un FULL OUTER JOIN ?

Un FULL OUTER JOIN est le rêve de l'organisateur de fête. Il inclut tous les amis et toutes les boissons, en les matchant là où c'est possible et en utilisant NULL là où il n'y a pas de correspondance.

Exemple de FULL OUTER JOIN

SELECT a.nom, bp.boisson
FROM amis a
FULL OUTER JOIN boissons_preferes bp ON a.id = bp.ami_id;

Résultat :

nom boisson
Alice Cola
Bob Jus
Charlie Eau
David NULL
NULL Limonade

Cela nous donne la vue complète : tous les amis (même David sans boisson favorite) et toutes les boissons (même la limonade sans ami qui la favorise).

Conclusion

Et voilà, les amis ! Nous avons fait le voyage à travers le pays des JOINs de PostgreSQL, du CROSS JOIN inclusif à la FULL OUTER JOIN complète. Souvenez-vous, choisir le bon JOIN est comme choisir le parfait mélange pour votre fête - tout dépend des informations que vous avez besoin et de la façon dont vous voulez combiner vos données.

Pratiquez ces JOINs, jouez avec différents scénarios, et bientôt vous serez la vedette de la fête des bases de données ! Qui savait que gérer des données pouvait être si amusant, hein ? Jusqu'à la prochaine fois, bon codage !

Credits: Image by storyset