Information

Author(s) Alison Leurquin
Deadline No deadline
Submission limit No limitation

Sign in

SQL26 - LEFT JOIN

Pour les questions suivantes, ceci sera la database utilisée: https://inginious.org/course/secondaire/SQL26/Small_chinook

Note: Si vous ne voulez pas utiliser le logiciel DB BROWSER pour visualiser la database, vous pouvez vous référer à la tâche SQL_DATABASE: Description de la base de données (https://inginious.org/course/secondaire/SQL_DATABASE) pour avoir une idée des tables. Les screens ne montre pas les tables complètes, celles-ci étant beaucoup plus grandes que montrée.


Nouveaux mots clés: LEFT JOIN, ON

Le LEFT JOIN permet de joindre deux tables, en listant toutes les donnees de la table de gauche, même s'il n'y a pas de correspondance dans la table de droite. Lorsqu'il n'y a pas de correspondance, les valeurs sont automatiquement misent a "NULL"

SELECT *
FROM Table1 LEFT JOIN Table2
ON Table1.nom_colonne=Table2.nom_colonne;

Exemple:

Credit: cet exemple est repris du site sql.sh: https://sql.sh/cours/jointures/left-join

https://inginious.org/course/secondaire/SQL26/SQL26_EXAMPLE2.png

Dans l'exemple ci-dessus, la table utilisateurs sera considerée comme la table de gauche, et commandes sera considerée comme la table de droite.

Nous pouvons voir que dans la table utilisateurs, la colonne id comporte les valeurs {1, 2, 3, 4} tandis que la colonne utilisateur_id de la table commandes comporte les valeurs {1, 2, 5} (nous ne mettont que le set, donc pas les doublons).

Nous pouvont donc voir que la table commandes ne contient pas d'utilisateur_id 3 ni 4.

Pour obtenir la table Resultats nous avons éxécute la requête suivante:

SELECT *
FROM utilisateur
LEFT JOIN commande ON utilisateur.id = commande.utilisateur_id

Dans cette table Resultats nous pouvons observer que certaine valeur sont mises a NULL. Ceci est du au fait que, comme dit plus haut, les id 3 et 4 ne sont pas repris dans la table commandes et donc aucune correspondances ne sont trouvée dans cette table.

Nous pouvons également voir qu'il y a plusieurs fois les id 1 et 2. Ceci est du au fait que ces identifiant sonct retrouvé plusieurs fois dans la table commandes. Il y a donc une ligne pour chaque correspondance.


Il est également possible de rajouter des conditions avec le WHERE pour ne prendre que certaines lignes

SELECT *
FROM Table1 LEFT JOIN Table2
ON Table1.nom_colonne=Table2.nom_colonne
WHERE condition

Question 1:

Selectionnez toutes les colonnes avec un left join entre les tables Album et Artist en reliant les identifiants des artistes.

Question 2:

Selectionnez toutes les colonnes avec un left join entre les tables Album et Track en reliant les identifiants des albums où le compositeur est 'Apocalyptica'.