# -*- coding: utf-8 -*- # Created on Sat Sep 31 08:15:00 2024 # @author: mhebding # TP4 - Bases de donnees 1 ## 1 - Introduction # 1. Combien comporte-t-elle de tables? # 3 tables # 2. Est-ce que nom est une clé primaire pour la table client ? # nom est une cle primaire pour la table client car elle permet #d'identifier chaque enregistrement de maniere unique. # 3. Identifier les clés primaires de chaque table. # client : numero, nom # produit : reference, marque, prix HT # vente : numero, date # 4. Identifier les clés étrangères. # vente : reference_produit (cle primaire de produit) # vente : numero_client (cle primaire de client) # 5. Quels sont les attributs de la table produit ? # la table produit comporte 3 attributs : reference, marque, prix HT # 6. Combien d’enregistrements comporte la table vente ? # la table vente comporte 4 enregistrements # 7. Qui a acheté une Peugeot en 2019? # Fabre a achete une Peugeot le 20/01/2019 ## 2 - Une table # 8. Ouvrir la base de données disquaire.sqlite dans le SGBDR. Afficher l’ensemble de la table clients. SELECT * FROM clients # 9. Afficher le nom et le prénom des clients. SELECT nom, prenom FROM clients # 10. Dans la table artistes, n’afficher que les artistes encore en activité. SELECT nom FROM artistes WHERE fin = 0 # 11. Afficher le nom et l’année de sortie de l’album le plus récent disponible en magasin. SELECT nom, sortie FROM albums WHERE sortie = (SELECT MAX(sortie) FROM albums) # 12. Afficher le prix moyen d’un disque. SELECT AVG(prix) FROM albums # 13. Afficher le prix moyen d’un disque pour chaque idartiste. SELECT idartiste, AVG(prix) FROM albums GROUP BY idartiste # version JOIN pour le nom SELECT nom, AVG(prix) FROM artistes JOIN albums ON artistes.idartiste = albums.idartiste GROUP BY albums.idartiste # 14. Afficher le nombre de clients du magasin. SELECT COUNT(idclient) FROM clients # 15. Afficher le nombre de clients qui habitent en Saône-et-Loire (71). SELECT COUNT(idclient) FROM clients WHERE département = 71 # 16. Afficher le nom de l’album et le prix du disque le moins cher. SELECT nom, prix FROM albums WHERE prix = (SELECT MIN(prix) FROM albums) # 17. Afficher la quantité de disques totale que le magasin a en stock. SELECT SUM(stock) FROM albums # 18. Afficher les idartiste ayant plus de 6 disques en stock ainsi que les nombres de disques. SELECT idartiste, SUM(stock) FROM albums GROUP BY idartiste HAVING SUM(stock) > 6 # 19. Afficher la table ventes classée par date d’achat du plus récent au plus ancien. SELECT * FROM ventes ORDER BY date_achat DESC # 20. Afficher les idalbum vendus en 2013. SELECT idalbum FROM ventes WHERE date_achat BETWEEN '2013-01-01' AND '2013-12-31' # 21. Afficher le nombre d’exemplaires de chaque idalbum vendu dans la table ventes. SELECT idalbum, COUNT(idalbum) FROM ventes GROUP BY idalbum ## 3 - Plusieurs tables # 22. Afficher le nom des artistes avec le nom des albums qu’ils ont fait. # version intuitive (faux) SELECT artistes.nom, albums.nom FROM artistes, albums WHERE artistes.idartiste = albums.idartiste # option plus propre (a retenir) avec JOIN SELECT artistes.nom, albums.nom FROM artistes JOIN albums ON artistes.idartiste = albums.idartiste # 23. Afficher le nom et le prénom des clients avec le nom des albums qu’ils ont acheté. SELECT clients.nom, clients.prénom, albums.album FROM clients, albums, ventes WHERE clients.idclient = ventes.idclient AND albums.idalbum = ventes.idalbum # version JOIN SELECT nom, prénom, album FROM clients JOIN ventes ON clients.idclient = ventes.idclient JOIN albums ON ventes.idalbum = albums.idalbum # 24. Afficher le nom et le prénom des clients qui ont acheté l’album « Blow ». SELECT nom, prénom FROM clients, ventes, albums WHERE clients.idclient = ventes.idclient AND ventes.idalbum = albums.idalbum AND album = 'Blow' # 25. Afficher le numéro de téléphone des personnes ayant acheté de la musique française. SELECT téléphone FROM clients, ventes, albums, artistes WHERE clients.idclient = ventes.idclient AND ventes.idalbum = albums.idalbum AND albums.idartiste = artistes.idartiste AND pays = 'France' # 26. Afficher le style de musique écouté par les clients parisiens. SELECT artistes.style FROM artistes, clients, albums, ventes WHERE clients.idclient = ventes.idclient AND albums.idalbum = ventes.idalbum AND artistes.idartiste = albums.idartiste AND clients.'département' = '75' ## 4 - BONUS # 27. SELECT idalbum, nombre FROM (SELECT idalbum,COUNT(*) AS nombre FROM ventes GROUP BY idalbum) AS derived_table1 WHERE nombre = (SELECT MAX(nombre) FROM ((SELECT COUNT(*) AS nombre FROM ventes GROUP BY idalbum) AS derived_table2)) # 28. SELECT idartiste, stock_artiste FROM (SELECT idartiste, SUM(stock) AS stock_artiste FROM albums GROUP BY idartiste) AS derived_table1 WHERE stock_artiste = (SELECT MIN(stock_artiste) FROM ((SELECT SUM(stock) AS stock_artiste FROM albums GROUP BY idartiste) AS derived_table2)) # 29. SELECT nom, prix_moyen FROM (SELECT idartiste, AVG(prix) AS prix_moyen FROM albums GROUP BY idartiste) AS derived_table1, artistes WHERE prix_moyen = (SELECT MAX(prix_moyen) FROM ((SELECT AVG(prix) AS prix_moyen FROM albums GROUP BY idartiste) AS derived_table2)) AND derived_table1.idartiste = artistes.idartiste # 30. SELECT prenom, nom, nombre FROM (SELECT idclient, COUNT(*) AS nombre FROM ventes GROUP BY idclient) AS derived_table1, clients WHERE nombre = (SELECT MAX(nombre) FROM ((SELECT COUNT(*) AS nombre FROM ventes GROUP BY idclient) AS derived_table2)) AND derived_table1.idclient = clients.idclient # 31. # FESTIVAL ELECTRO # 32. SELECT prénom, clients.nom, département FROM clients JOIN ventes ON clients.idclient = ventes.idclient JOIN albums ON ventes.idalbum = albums.idalbum JOIN artistes ON artistes.idartiste = albums.idartiste WHERE artistes.nom = 'Bruce Springsteen' # 33. SELECT nom, style FROM artistes WHERE nom = 'Jul' OR nom = 'JuL' OR nom = 'JUL' # 34. # BLEU LUMIERE # 35. # SCH 0 SELECT idalbum, nombre FROM (SELECT idalbum,COUNT(*) AS nombre FROM ventes GROUP BY idalbum) AS derived_table1 WHERE nombre = (SELECT MAX(nombre) FROM ((SELECT COUNT(*) AS nombre FROM ventes GROUP BY idalbum) AS derived_table2)) # SELECT nom, prénom, album FROM clients JOIN ventes ON clients.idclient = ventes.idclient JOIN albums ON ventes.idalbum = albums.idalbum # 36. SELECT prénom, clients.nom, département FROM clients JOIN ventes ON clients.idclient = ventes.idclient JOIN albums ON ventes.idalbum = albums.idalbum JOIN artistes ON artistes.idartiste = albums.idartiste WHERE artistes.nom = 'Johnny Hallyday'