diff --git a/TD2/ecommerce_1.sql b/TD2/ecommerce_1.sql new file mode 100644 index 0000000..b001ae2 --- /dev/null +++ b/TD2/ecommerce_1.sql @@ -0,0 +1,134 @@ +--1 Obtenir l’utilisateur ayant le prénom “Muriel” et le mot de passe “test11”, sachant que l’encodage du mot de passe est effectué avec l’algorithme Sha1. +SELECT + * +FROM + clients C +WHERE + C.client_prenom = 'Muriel' AND C.client_password = SHA1('test11'); +; + +--2 Obtenir la liste de tous les produits qui sont présents sur plusieurs commandes, avec, pour chaque produit, le nombre de fois où ils sont présents. +SELECT + CL.commande_ligne_nom, + COUNT(*) as frequence +FROM + commandes_lignes CL +GROUP BY + CL.commande_ligne_nom +HAVING + COUNT(*) > 1 +ORDER BY + frequence DESC +; + + +--3 Obtenir la liste de tous les produits qui sont présents sur plusieurs commandes et y ajouter une colonne qui liste les identifiants des commandes associées. +SELECT + C.commande_ligne_nom, + GROUP_CONCAT(C.commande_id) AS les_commandes +FROM + commandes_lignes C +WHERE + C.commande_ligne_nom IN ( + SELECT + CL.commande_ligne_nom + FROM + commandes_lignes CL + GROUP BY + CL.commande_ligne_nom + HAVING + COUNT(*) > 1 + ) +GROUP BY + commande_ligne_nom +; + + +--4 Enregistrer le prix total à l’intérieur de chaque ligne des commandes, en fonction du prix unitaire et de la quantité. +UPDATE + commandes_lignes C +SET + ROUND(C.commande_ligne_prix_total,2) = C.commande_ligne_quantite * C.commande_ligne_prix_unitaire +; + + +--5 Obtenir le montant total pour chaque commande et y voir facilement la date associée à cette commande ainsi que le prénom et nom du client associé. +SELECT + C.commande_date_achat, + CL.client_prenom, + CL.client_nom, + ROUND(SUM(CML.commande_ligne_prix_total),2) AS commande_total +FROM + commandes C +JOIN + clients CL ON C.client_id = CL.client_id +JOIN + commandes_lignes CML ON C.commande_id = CML.commande_id +GROUP BY + C.commande_id +; + + +--6 Enregistrer le montant total de chaque commande dans le champ intitulé “cache_prix_total”. +UPDATE + commandes C +JOIN ( + SELECT + commande_id, + SUM(commande_ligne_prix_total) AS commande_total + FROM + commandes_lignes + GROUP BY + commande_id +) CL +ON + C.commande_id = CL.commande_id +SET + C.commande_cache_prix_total = ROUND(CL.commande_total,2) +; + + + +--7 Obtenir le montant global de toutes les commandes, pour chaque mois. +SELECT + MONTH(C.commande_date_achat) AS mois, + YEAR(C.commande_date_achat) AS annee, + ROUND(SUM(C.commande_cache_prix_total),2) AS montant_global +FROM + commandes C +GROUP BY + annee, + mois +; + + + +--8 Obtenir la liste des 10 clients qui ont effectué le plus grand montant de commandes, et obtenir ce montant total pour chaque client. +SELECT + CL.client_id, + CL.client_prenom, + CL.client_nom, + ROUND(SUM(C.commande_cache_prix_total), 2) AS total_commandes +FROM + commandes C +JOIN + clients CL ON C.client_id = CL.client_id +GROUP BY + CL.client_id +ORDER BY + total_commandes DESC +LIMIT + 10 +; + + + +--9 Obtenir le montant total des commandes pour chaque date. +SELECT + DATE_FORMAT(C.commande_date_achat, "%d/%m/%Y") AS la_date, + ROUND(SUM(C.commande_cache_prix_total),2) AS montant_journalier +FROM + commandes C +GROUP BY + la_date +; \ No newline at end of file diff --git a/TD2/ecommerce_2.sql b/TD2/ecommerce_2.sql new file mode 100644 index 0000000..23d65a9 --- /dev/null +++ b/TD2/ecommerce_2.sql @@ -0,0 +1,87 @@ +--1 Ajouter une colonne intitulée “categorie_id” à la table contenant les commandes. Cette colonne contiendra une valeur numérique. +ALTER TABLE + commandes +ADD + categorie_id INT(10) UNSIGNED DEFAULT NULL +; + + + + +--2 Enregistrer la valeur de la catégorie, en suivant les règles suivantes (en une seule requête) : +UPDATE commandes +SET categorie_id = + CASE + WHEN + commande_cache_prix_total < 200 + THEN 1 + WHEN + commande_cache_prix_total BETWEEN 200 AND 500 + THEN 2 + WHEN + commande_cache_prix_total BETWEEN 500 AND 1000 + THEN 3 + ELSE 4 + END +; + + + +--3 Créer une table intitulée “categories” qui contiendra le descriptif de ces catégories. +CREATE TABLE categories ( + categorie_id INT(10) UNSIGNED PRIMARY KEY, + categorie_description VARCHAR(255) +) +; + +INSERT INTO + categories ( + categorie_id, + categorie_description + ) +VALUES + (1, 'Moins de 200€'), + (2, 'Entre 200€ et 500€'), + (3, 'Entre 500€ et 1.000€'), + (4, 'Supérieures à 1.000€') +; + + +--4 Créer la clé étrangère entre la table “categories” et la colonne “categorie_id” de la table “commandes”. +SELECT +FROM +INNER JOIN +ON +WHERE +GROUP BY +ORDER BY +LIMIT +; + + + +--5 Insérer les 4 descriptifs de chaque catégorie au sein de la table précédemment créée. +SELECT +FROM +INNER JOIN +ON +WHERE +GROUP BY +ORDER BY +LIMIT +; + + + +--6 Supprimer toutes les commandes (et les lignes des commandes) inférieures au 1er février 2019. Cela doit être effectué en 2 requêtes maximum. +SELECT +FROM +INNER JOIN +ON +WHERE +GROUP BY +ORDER BY +LIMIT +; + + diff --git a/TD2/geographie.sql b/TD2/geographie.sql index f57bd7e..e73f375 100644 --- a/TD2/geographie.sql +++ b/TD2/geographie.sql @@ -43,9 +43,7 @@ SELECT FROM villes V JOIN - departements D -ON - V.departement_id = D.departement_id + departements D ON V.departement_id = D.departement_id ORDER BY ville_population_2012 DESC LIMIT @@ -62,9 +60,7 @@ SELECT FROM villes V JOIN - departements D -ON - V.departement_id = D.departement_id + departements D ON V.departement_id = D.departement_id GROUP BY D.departement_id ORDER BY @@ -80,9 +76,7 @@ SELECT FROM villes V JOIN - departements D -ON - V.departement_id = D.departement_id + departements D ON V.departement_id = D.departement_id GROUP BY D.departement_id ORDER BY @@ -144,9 +138,7 @@ SELECT FROM departements D JOIN - villes V -ON - V.departement_id = D.departement_id + villes V ON V.departement_id = D.departement_id GROUP BY D.departement_nom HAVING @@ -166,15 +158,4 @@ LIKE 'SAINT-%' ORDER BY V.ville_nom ASC -; - - ---template -SELECT -FROM -INNER JOIN -ON -WHERE -GROUP BY -ORDER BY -LIMIT +; \ No newline at end of file