Exercice Access : gestion d'oeuvres - Corrigé
Page 2 sur 2
FICHIER : la base corrigée
- 15
erreur classique : penser que toutes les oeuvres sont des peintures, et répondre 17
SQL : SELECT Count(Type.CodeOeuvre) AS CompteDeCodeOeuvre FROM Type GROUP BY Type.CodeArt HAVING (((Type.CodeArt)="P"));
- Musée Picasso Barcelone et Musée Picasso Màlaga
SQL : SELECT Musée.NomMusee FROM (Musée INNER JOIN Oeuvre ON Musée.CodeMusee = Oeuvre.CodeMusee) INNER JOIN (Artiste INNER JOIN Créateur ON Artiste.CodeArtiste = Créateur.CodeArtiste) ON Oeuvre.CodeOeuvre = Créateur.CodeOeuvre WHERE (((Artiste.NomArtiste)="Pablo Picasso"));
- Espagne
On passe ici par deux sous-requêtes :
- nombre d'artistes par pays (SQL : SELECT Pays.NomPays, Count(Artiste.CodePays) AS CompteDeCodePays FROM Pays INNER JOIN Artiste ON Pays.CodePays=Artiste.CodePays GROUP BY Pays.NomPays;)
- max d'artistes par pays (SQL : SELECT Max([3a - nombre d'artistes par pays].CompteDeCodePays) AS MaxDeCompteDeCodePays FROM [3a - nombre d'artistes par pays];)
puis : SELECT [3a - nombre d'artistes par pays].NomPays FROM [3a - nombre d'artistes par pays] INNER JOIN [3b - max d'artistes par pays] ON [3a - nombre d'artistes par pays].CompteDeCodePays = [3b - max d'artistes par pays].MaxDeCompteDeCodePays;
- Brooklyn Museum : 0,00025 / collection Faringdon - Oxon : 0,003 / Delaware Art Museum : 0,002 / ... / Musée Picasso Màlaga : 1,119E-05
Les nombres sont ridicules en raison du peu d'oeuvres entrées (pour des superficies réalistes)
On passe par une sous-requête :
nombre d'oeuvres par musée (SELECT Count(Oeuvre.CodeOeuvre) AS CompteDeCodeOeuvre, Musée.CodeMusee FROM Musée INNER JOIN Oeuvre ON Musée.CodeMusee=Oeuvre.CodeMusee GROUP BY Musée.CodeMusee;)
puis un champ densité: [CompteDeCodeOeuvre]/Musée!Superficie
SQL : SELECT Musée.NomMusee, [CompteDeCodeOeuvre]/Musée!Superficie AS densité FROM Musée INNER JOIN [4a - nombre d'oeuvres par musée] ON Musée.CodeMusee = [4a - nombre d'oeuvres par musée].CodeMusee GROUP BY Musée.NomMusee, [CompteDeCodeOeuvre]/Musée!Superficie;
- On demande ici une analyse croisée !
SQL : TRANSFORM Count(Oeuvre.CodeOeuvre) AS CompteDeCodeOeuvre SELECT Artiste.NomArtiste FROM Pays INNER JOIN (Oeuvre INNER JOIN (Artiste INNER JOIN Créateur ON Artiste.CodeArtiste = Créateur.CodeArtiste) ON Oeuvre.CodeOeuvre = Créateur.CodeOeuvre) ON Pays.CodePays = Artiste.CodePays GROUP BY Artiste.NomArtiste PIVOT Pays.NomPays;
- NomArtiste / représenté dans son propre pays, Barnabé Muges / oui, Howard Pyle / oui, ... , William Blake / non
Il faut faire ici un Vrai/Faux : représenté dans son propre pays: VraiFaux(Pays!NomPays=Pays_1!NomPays;"oui";"non")
SQL : SELECT Artiste.NomArtiste, IIf(Pays!NomPays=Pays_1!NomPays,"oui","non") AS [représenté dans son propre pays] FROM Pays AS Pays_1 INNER JOIN ((Musée INNER JOIN Oeuvre ON Musée.CodeMusee = Oeuvre.CodeMusee) INNER JOIN ((Pays INNER JOIN Artiste ON Pays.CodePays = Artiste.CodePays) INNER JOIN Créateur ON Artiste.CodeArtiste = Créateur.CodeArtiste) ON Oeuvre.CodeOeuvre = Créateur.CodeOeuvre) ON Pays_1.CodePays = Musée.CodePays GROUP BY Artiste.NomArtiste, IIf(Pays!NomPays=Pays_1!NomPays,"oui","non") ORDER BY Artiste.NomArtiste;
Ajouter un Commentaire