Soit la BD suivante :
Client(cin, nom, email, age, adresse, tel)
Article (numarticle, libellé, PU, QteStock, DLC)
Commande(numcde, datecommande,datelivraison, #cin)
Details_cde(numligne,numcde#,numarticle#,qtecde)
Requête de projection
1- Afficher tous les clients.
SELECT * FROM Client;
Requêtes de sélection
2- Afficher les noms des clients qui habitent Tunis.
SELECT nom FROM Client
WHERE adresse=''Tunis''
3- Afficher tous les clients qui habitent Tunis par ordre croissant des noms.
SELECT * FROM Client
WHERE adresse=''Tunis''
ORDER BY Nom [ASC];
4- Afficher tous les clients qui habitent Tunis par ordre décroissant des noms.
SELECT * FROM Client
WHERE adresse=''Tunis''
ORDER BY Nom DESC;
5- Afficher les noms et les prénoms des clients habitant Tunis triés par ordre croissant des prénoms.
SELECT nom, prénom FROM Client SELECT nom, prénom FROM Client
WHERE adresse=''Tunis'' WHERE adresse=''Tunis''
ORDER BY prénom ASC; ORDER BY 2 ASC;
SELECT nom, prénom FROM Client SELECT nom, prénom FROM Client
WHERE adresse=''Tunis'' WHERE adresse=''Tunis''
ORDER BY prénom; ORDER BY 2;
6- Afficher les noms et les prénoms des clients habitant Tunis triés par ordre croissant des prénoms
puis par ordre décroissant des noms.
SELECT nom, prénom FROM Client SELECT nom, prénom FROM Client
WHERE adresse=''Tunis'' WHERE adresse=''Tunis''
ORDER BY prénom ASC, Nom DESC; ORDER BY 2 ASC, 1 DESC;
SELECT nom, prénom FROM Client SELECT nom, prénom FROM Client
WHERE adresse=''Tunis'' WHERE adresse=''Tunis''
ORDER BY prénom, Nom DESC; ORDER BY 2, 1 DESC;
7- Afficher les libellés et les prix totaux des articles (PU*QteStock) des articles triés par ordre
croissant de leurs Prix totaux.
SELECT libelle, (PU*QteStock) SELECT libelle, (PU*QteStock) AS PT
FROM Article FROM Article
ORDER BY (PU*QteStock) ; ORDER BY PT ;
1
8- Afficher les noms des clients dont le 2ème caractère est la lettre T.
SELECT nom FROM Client
WHERE nom LIKE ''_T%'';
9- Afficher tous les articles dont le mois de la DLC est 2 et l’année de la DLC est 2024.
SELECT * FROM Article
WHERE YEAR(DLC)=2024 AND MONTH(DLC)=2;
10- Afficher tous les articles dont la DLC est comprise entre 01/02/2025 et 30/04/205.
SELECT * FROM Article
WHERE DLC BETWEEN ''2025-02-01'' AND ''2025-04-30''.
11- Afficher les adresses des clients sans redondance.
SELECT DISTINCT (adresse) FROM Client;
12- Afficher les articles qui n’ont pas le libelle Farine.
SELECT *
FROM Article
WHERE libelle<>''Farine'';
13- Afficher les articles qui n’ont ni le libelle Farine ni le libelle Sucre ;
SELECT * SELECT *
FROM Article FROM Article
WHERE libelle not in (''Farine'', ''Sucre''); WHERE libelle<>''Farine'' AND libelle<>''Sucre''
SELECT * SELECT *
FROM Article FROM Article
WHERE not (libelle in (''Farine'', ''Sucre'')); WHERE not (libelle=''Farine'' OR libelle=''Sucre'');
14- Afficher les numcde dont la différence entre la date commande et la date livraison =2.
SELECT datecommande, datelivraison
FROM Article
WHERE DATEDIFF(datelivraison, datecommande)=2 ;
15- Afficher sans redondance les datecommande et les datelivraison correspondantes.
SELECT DISTINCT datecommande, datelivraison
FROM Commande ;
16- Afficher les datecommande du 1er de chaque mois.
SELECT datecommande FROM Commande
WHERE DAY(datecommande)=1 ;
17- Afficher le nombre de commandes.
SELECT COUNT(numcde) FROM Commande;
18- Afficher le nombre de villes des clients.
SELECT COUNT(DISTINCT(adresse)) FROM Client;
19- Afficher le nombre de clients qui n’ont pas des adresses email.
SELECT COUNT(*) FROM Client
WHERE email IS NULL ;
20- Afficher le nombre de commandes du client qui a pour cin=11111111.
SELECT COUNT(numcde) FROM Client
WHERE cin=111111111;
21- Afficher la somme des Qte Stock.
SELECT SUM(Qte Stock) FROM Article;
2
22- Afficher le maximum des QteStock.
SELECT MAX(Qte Stock) FROM Article;
23- Afficher le minimum des QteStock.
SELECT MIN(Qte Stock) FROM Article;
24- Afficher la moyenne (PU*QteStock).
SELECT AVG(PU*QteStock) AS PrixMoy FROM Article;
25- Afficher le libellé, la somme des Qte Stock par libellé.
SELECT libellé, SUM (Qte Stock) AS Somme
FROM Article
GROUP BY libellé;
26- Afficher le libéllé et la somme des Qte Stock>=20 par libellé.
SELECT libelle, SUM(QteStock) as Somme
from article
GROUP by libelle
HAVING SUM(QteStock)>=20;
SELECT libelle, SUM(QteStock) as Somme
from article
GROUP by libelle
HAVING Somme>=20;
27- Afficher les libellés et la somme des QteStock (Qte Stock>=20) par libelle (Seulement
les sommes QteStock>=100) triés par ordre croissant libellé.
SELECT libelle, Sum(QteStock) as Somme
FROM Article
WHERE QteStock>=20
GROUP BY libelle
HAVING Somme>=100
ORDER BY libelle;
28- Afficher le total des prix dépassant 20000.
SELECT SUM (PU*QteStock) AS PT
FROM Article
HAVIN PT≥20000.
Requêtes d’insertion
29- Ajouter un client dans la table Client avec les informations suivantes : cin=11111111,
nom=''SALHI'',
[email protected], age=18, adresse=Ben Arous, tel=12345678
INSERT INTO Client
VALUES (11111111, ''SALHI'', ''
[email protected]'', 18, ''Ben Arous'', 12345678)
INSERT INTO Client (cin, nom, email, age, adresse, tel)
VALUES (11111111, ''SALHI'', ''
[email protected]'', 18, ''Ben Arous'', 12345678)
INSERT INTO Client (nom, cin, age, email, tel, adresse)
VALUES (''SALHI'', 11111111, 18, ''
[email protected]'', 12345678, ''Ben Arous'')
30- Ajouter un article dans la table Article avec les informations suivantes :
numarticle=Numéro_auto, libellé=''Farine'', PU=1000, QteStock=500, DLC=10/11/2026
3
INSERT INTO Article (libellé, PU, DLC)
VALUES (''Farine'', 1000, ''10/11/2026'')
Les autres colonnes sont laissées soit à leurs valeurs par défaut ou NULL ou
elles sont auto_ increment.
Requêtes de Mise à jour
31- Augmenter de 50 tous les PU.
UPDATE Article
SET PU=PU+50 ;
32- Modifier l’adresse du client qui a pour nom ''SALHI'' de ''Ben Arous'' à ''Bizerte''.
UPDATE Client
SET adresse=''Bizerte''
WHERE nom= ''SALHI'';
33- Modifier l’adresse du client qui a pour nom ''SALHI'' de ''Ben Arous'' à ''Bizerte'' et
modifier son âge de 50 à 60.
UPDATE Client
SET adresse=''Bizerte'',
age=60
WHERE nom= ''SALHI'';
34- Modifier les adresses email de tous les clients ayant un nom de domaine ''@doo.com''
vers des emails vides.
UPDATE Client
SET email=''''
WHERE email LIKE ''%@doo.com'' ;
35- Ajouter 3 jours aux DLC.
UPDATE article
SET DLC=ADDDATE(DLC, INTERVAL 3 DAY).
36- Ajouter 1 mois aux DLC qui sont antérieures au 01/10/2024.
UPDATE article
SET DLC=ADDDATE(DLC, INTERVAL 1 MONTH)
WHERE DLC<''01/10/2024'';
37- Ajouter une année aux DLC qui sont antérieures au 01/10/2024 et QteStock>=100.
UPDATE article
SET DLC=ADDDATE(DLC, INTERVAL 1 YEAR)
WHERE DLC<''01/10/2024'' AND QteStock=100;
NOT (DLC>=''01/10/2024'' OR QteStock<>100)
Requêtes de suppression
38- Supprimer tous les produits dont l’année de la DLC est 2024.
DELETE FROM Article DELETE FROM Article
WHERE YEAR(DLC)=2024; WHERE DLC BETWEEN ''01/01/2024'' AND
''31/12/2024'';
39- Supprimer les clients dont les 3ème, 4ème et 5ème chiffres de leur numéro de téléphone
sont respectivement 100.
DELETE FROM Client
4
WHERE tel LIKE ''_ _100%'';
40- Supprimer les articles dont la QteStock<5.
DELETE FROM Article
WHERE QteStock<5;
41- Afficher les clients qui ont la même adresse que le client qui a le code 11111111.
Requête d’auto- jointure
SELECT c1.* FROM Client AS c1, Client c2
WHERE c1.adresse=c2.adresse and c2.code=11111111;
Requête imbriquée
SELECT * FROM Client
WHERE adresse=(SELECT adresse FROM Client WHERE cin=11111111);
42- Afficher les libellés des articles qui ont le prix minimal.
Requête imbriquée
SELECT libelle FROM Article
WHERE PU=(SELECT MIN(PU) FROM Article);
43- Afficher les libellés dont le PU est supérieur au PU moyen.
Requête imbriquée
SELECT libelle FROM Article
WHERE PU> (SELECT AVG(PU) FROM Article);
44- Afficher les quantités commandées de l’article dont le libellé est Farine.
Requête de jointure
SELECT qtecde FROM Details_cde D, Article A
WHERE D.numarticle=A.numarticle
AND libelle=''Farine'';
SELECT qtecde FROM Details_cde, Article
WHERE Details_cde.numarticle=Article.numarticle
AND libelle=''Farine'';
Requête imbriquée
SELECT qtecde FROM Details_cde
WHERE numarticle=(SELECT numarticle FROM Article WHERE libelle=''Farine'');
45- Afficher les clients qui n’ont pas passé une commande.
Requête imbriquée
SELECT * FROM Client
WHERE cin NOT IN (SELECT cin FROM Commande);
46- Afficher le total des qtecde par le client qui a pour nom Salah.
Requête de jointure
SELECT SUM(qtecde)
FROM Details_cde D, Commande C1, Client C2
WHERE D.numcde=C1.numcde
AND C1.cin=C2.cin
AND nom=''Salah'';
5
Remarque : Select DATE(ddn) from Client ;
Sachant que ddn est de type VARCHAR(10) la fonction DATE a pour rôle de retourner une
date extaite à partir d’une chaîne contenant une valeur en format DATE (aaaa-mm—jj) ou en
format DATETIME (aaaa-mm-jj hh :mm :ss)
Exemple : ddn=2024/12/12 15 :12 :03 DATE(ddn)= 2024-12-12