This commit is contained in:
OMGiTzPomPom 2023-01-09 15:32:48 +01:00
parent 65464f66c0
commit 24867f08a8
3 changed files with 226 additions and 24 deletions

134
TD2/ecommerce_1.sql Normal file
View File

@ -0,0 +1,134 @@
--1 Obtenir lutilisateur ayant le prénom Muriel et le mot de passe test11, sachant que lencodage du mot de passe est effectué avec lalgorithme 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 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 à linté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
;

87
TD2/ecommerce_2.sql Normal file
View File

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

View File

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