2023-01-09 15:32:48 +01:00
|
|
|
|
--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
|
2023-01-19 09:11:42 +01:00
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
---trigger 7
|
|
|
|
|
|
|
|
|
|
DELIMITER //
|
|
|
|
|
CREATE TRIGGER before_insert_commandes_lignes
|
|
|
|
|
BEFORE INSERT
|
|
|
|
|
ON commandes_lignes FOR EACH ROW
|
|
|
|
|
BEGIN
|
|
|
|
|
SET NEW.commande_ligne_prix_total = NEW.commande_ligne_quantite * NEW.commande_ligne_prix_unitaire;
|
|
|
|
|
END //
|
|
|
|
|
DELIMITER ;
|
|
|
|
|
DELIMITER //
|
|
|
|
|
CREATE TRIGGER before_update_commandes_lignes
|
|
|
|
|
BEFORE UPDATE
|
|
|
|
|
ON commandes_lignes FOR EACH ROW
|
|
|
|
|
BEGIN
|
|
|
|
|
SET NEW.commande_ligne_prix_total = NEW.commande_ligne_quantite * NEW.commande_ligne_prix_unitaire;
|
|
|
|
|
END //
|
|
|
|
|
DELIMITER ;
|