Achat d'articles de sport - Recherche avec jointure multiple

Série d'exercices

Cet exercice fait partie d'une série :

Un magasin d'articles de sport souhaite gérer ses ventes par une base de données.
On doit y trouver des informations sur leurs clients et sur les articles qu'ils ont achetés.

On a enregistré en mémoire une base de données dont la structure est présentée par le schéma ci-dessous :

sql

Le champ nom contient à la fois le prénom et le nom du client et est au format "prénom nom".
Le champ payé vaut \(1\) si la facture est payée, et \(0\) sinon.

Table d'associations

On ne pas pas créer un champ article dans la table Factures car une facture peut permettre de régler l'achat de plusieurs articles. De la même façon, on ne peut pas ajouter un champ facture dans la table Articles car un même article peut être acheté plusieurs fois et donc apparaître sur plusieurs factures.

Pour ce faire, on crée une troisième table, appelée table d'association.
La clé primaire de cette table n'est pas constituée d'un champ, mais d'un couple de champs (ce couple est alors unique) constitué des deux clés étrangères des tables que l'on souhaite associer.

Dans notre exemple, la clé de la table commande est (id_facture, id_article).

L'exercice utilise les mots SELECT, DISTINCT, FROM, WHERE et JOIN.

On demande de compléter le code proposé pour réaliser les requêtes SQL suivantes :



Question 1

Créer la requête pour obtenir les dates des factures réalisées pour "Félix Lebrun" :



Solution
SQL
SELECT date
FROM Factures
JOIN Clients ON Factures.id_client = Clients.id_client
WHERE nom = "Félix Lebrun";
Format de dates

Les dates sont au format ISO 8601, à savoir AAAA-MM-JJ.

Question 2

Créer la requête pour obtenir la désignation et le nombre de tous les articles de la facture passée le "2005-06-20" :



Solution
SQL
SELECT désignation, nombre
FROM Articles
JOIN Commandes ON Commandes.id_article = Articles.id_article
JOIN Factures ON Factures.id_facture = Commandes.id_facture
WHERE date = "2005-06-20" ;
Question 3

Créer la requête pour obtenir la désignation (sans doublons) de tous les articles commandés par Félix Lebrun, quelle que soit la facture :



Solution
SQL
SELECT DISTINCT désignation
FROM Articles
JOIN Commandes ON Commandes.id_article = Articles.id_article
JOIN Factures ON Factures.id_facture = Commandes.id_facture
JOIN Clients ON Factures.id_client = Clients.id_client
WHERE nom = "Félix Lebrun" ;