tp2
This commit is contained in:
parent
65464f66c0
commit
24867f08a8
134
TD2/ecommerce_1.sql
Normal file
134
TD2/ecommerce_1.sql
Normal file
@ -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
|
||||||
|
;
|
87
TD2/ecommerce_2.sql
Normal file
87
TD2/ecommerce_2.sql
Normal 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
|
||||||
|
;
|
||||||
|
|
||||||
|
|
@ -43,9 +43,7 @@ SELECT
|
|||||||
FROM
|
FROM
|
||||||
villes V
|
villes V
|
||||||
JOIN
|
JOIN
|
||||||
departements D
|
departements D ON V.departement_id = D.departement_id
|
||||||
ON
|
|
||||||
V.departement_id = D.departement_id
|
|
||||||
ORDER BY
|
ORDER BY
|
||||||
ville_population_2012 DESC
|
ville_population_2012 DESC
|
||||||
LIMIT
|
LIMIT
|
||||||
@ -62,9 +60,7 @@ SELECT
|
|||||||
FROM
|
FROM
|
||||||
villes V
|
villes V
|
||||||
JOIN
|
JOIN
|
||||||
departements D
|
departements D ON V.departement_id = D.departement_id
|
||||||
ON
|
|
||||||
V.departement_id = D.departement_id
|
|
||||||
GROUP BY
|
GROUP BY
|
||||||
D.departement_id
|
D.departement_id
|
||||||
ORDER BY
|
ORDER BY
|
||||||
@ -80,9 +76,7 @@ SELECT
|
|||||||
FROM
|
FROM
|
||||||
villes V
|
villes V
|
||||||
JOIN
|
JOIN
|
||||||
departements D
|
departements D ON V.departement_id = D.departement_id
|
||||||
ON
|
|
||||||
V.departement_id = D.departement_id
|
|
||||||
GROUP BY
|
GROUP BY
|
||||||
D.departement_id
|
D.departement_id
|
||||||
ORDER BY
|
ORDER BY
|
||||||
@ -144,9 +138,7 @@ SELECT
|
|||||||
FROM
|
FROM
|
||||||
departements D
|
departements D
|
||||||
JOIN
|
JOIN
|
||||||
villes V
|
villes V ON V.departement_id = D.departement_id
|
||||||
ON
|
|
||||||
V.departement_id = D.departement_id
|
|
||||||
GROUP BY
|
GROUP BY
|
||||||
D.departement_nom
|
D.departement_nom
|
||||||
HAVING
|
HAVING
|
||||||
@ -167,14 +159,3 @@ LIKE
|
|||||||
ORDER BY
|
ORDER BY
|
||||||
V.ville_nom ASC
|
V.ville_nom ASC
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
--template
|
|
||||||
SELECT
|
|
||||||
FROM
|
|
||||||
INNER JOIN
|
|
||||||
ON
|
|
||||||
WHERE
|
|
||||||
GROUP BY
|
|
||||||
ORDER BY
|
|
||||||
LIMIT
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user