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
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