Représentation de représentants
[30 minutes]
Soit le schéma relationnel et le code SQL suivants :
REPRESENTANTS (#NR, NOMR, VILLE)
PRODUITS (#NP, NOMP, COUL, PDS)
CLIENTS (#NC, NOMC, VILLE)
VENTES (#NR=>REPRESENTANTS(NR), #NP=>PRODUITS(NP), #NC=>CLIENTS(NC), QT)
/* Les requêtes peuvent être testées dans un SGBDR, en créant une base de données avec le script SQL suivant */
/*
DROP TABLE VENTES ;
DROP TABLE CLIENTS ;
DROP TABLE PRODUITS ;
DROP TABLE REPRESENTANTS ;
*/
CREATE TABLE REPRESENTANTS (
NR INTEGER PRIMARY KEY,
NOMR VARCHAR,
VILLE VARCHAR
);
CREATE TABLE PRODUITS (
NP INTEGER PRIMARY KEY,
NOMP VARCHAR,
COUL VARCHAR,
PDS INTEGER
);
CREATE TABLE CLIENTS (
NC INTEGER PRIMARY KEY,
NOMC VARCHAR,
VILLE VARCHAR
);
CREATE TABLE VENTES (
NR INTEGER REFERENCES REPRESENTANTS(NR),
NP INTEGER REFERENCES PRODUITS(NP),
NC INTEGER REFERENCES CLIENTS(NC),
QT INTEGER,
PRIMARY KEY (NR, NP, NC)
);
INSERT INTO REPRESENTANTS (NR, NOMR, VILLE) VALUES (1, 'Stephane', 'Lyon');
INSERT INTO REPRESENTANTS (NR, NOMR, VILLE) VALUES (2, 'Benjamin', 'Paris');
INSERT INTO REPRESENTANTS (NR, NOMR, VILLE) VALUES (3, 'Leonard', 'Lyon');
INSERT INTO REPRESENTANTS (NR, NOMR, VILLE) VALUES (4, 'Antoine', 'Brest');
INSERT INTO REPRESENTANTS (NR, NOMR, VILLE) VALUES (5, 'Bruno', 'Bayonne');
INSERT INTO PRODUITS (NP, NOMP, COUL, PDS) VALUES (1, 'Aspirateur', 'Rouge', 3546);
INSERT INTO PRODUITS (NP, NOMP, COUL, PDS) VALUES (2, 'Trottinette', 'Bleu', 1423);
INSERT INTO PRODUITS (NP, NOMP, COUL, PDS) VALUES (3, 'Chaise', 'Blanc', 3827);
INSERT INTO PRODUITS (NP, NOMP, COUL, PDS) VALUES (4, 'Tapis', 'Rouge', 1423);
INSERT INTO CLIENTS (NC, NOMC, VILLE) VALUES (1, 'Alice', 'Lyon');
INSERT INTO CLIENTS (NC, NOMC, VILLE) VALUES (2, 'Bruno', 'Lyon');
INSERT INTO CLIENTS (NC, NOMC, VILLE) VALUES (3, 'Charles', 'Compiègne');
INSERT INTO CLIENTS (NC, NOMC, VILLE) VALUES (4, 'Denis', 'Montpellier');
INSERT INTO CLIENTS (NC, NOMC, VILLE) VALUES (5, 'Emile', 'Strasbourg');
INSERT INTO VENTES (NR, NP, NC, QT) VALUES (1, 1, 1, 1);
INSERT INTO VENTES (NR, NP, NC, QT) VALUES (1, 1, 2, 1);
INSERT INTO VENTES (NR, NP, NC, QT) VALUES (2, 2, 3, 1);
INSERT INTO VENTES (NR, NP, NC, QT) VALUES (4, 3, 3, 200);
INSERT INTO VENTES (NR, NP, NC, QT) VALUES (3, 4, 2, 190);
INSERT INTO VENTES (NR, NP, NC, QT) VALUES (1, 3, 2, 300);
INSERT INTO VENTES (NR, NP, NC, QT) VALUES (3, 1, 2, 120);
INSERT INTO VENTES (NR, NP, NC, QT) VALUES (3, 1, 4, 120);
INSERT INTO VENTES (NR, NP, NC, QT) VALUES (3, 4, 4, 2);
INSERT INTO VENTES (NR, NP, NC, QT) VALUES (3, 1, 1, 3);
INSERT INTO VENTES (NR, NP, NC, QT) VALUES (3, 4, 1, 5);
INSERT INTO VENTES (NR, NP, NC, QT) VALUES (3, 1, 3, 1);
Écrire en SQL les requêtes permettant d'obtenir les informations ci-après.
Question
Tous les détails de tous les clients.
Solution
SELECT *
FROM CLIENTS ;
Question
Les numéros et les noms des produits de couleur rouge et de poids supérieur à 2000.
Solution
SELECT NP, NOMP
FROM PRODUITS
WHERE COUL='Rouge'
AND PDS>2000 ;
Complément :
Si on ne sait pas comment la couleur a été saisie (minuscules/majuscules), il faut utiliser les fonctions de conversion de caractères telles que UPPER ou LOWER.
SELECT NP, NOMP
FROM PRODUITS
WHERE LOWER(COUL)='rouge'
AND PDS>2000 ;
Question
Les représentants ayant vendu au moins un produit.
Solution
SELECT NR
FROM VENTES ;
Les vendeurs représentés dans la table ventes ont vendu quelque chose.
SELECT DISTINCT NR
FROM VENTES
ORDER BY NR ;
On peut dédoublonner et trier le résultat.
Question
Les noms des clients de Lyon ayant acheté un produit pour une quantité supérieure à 180.
Solution
SELECT DISTINCT C.NOMC
FROM CLIENTS C, VENTES V
WHERE V.NC=C.NC
AND V.QT>180
AND C.VILLE='Lyon' ;
Question
Les noms des représentants et des clients à qui ces représentants ont vendu un produit de couleur rouge pour une quantité supérieure à 100.
Solution
SELECT DISTINCT R.NOMR, C.NOMC
FROM REPRESENTANTS R, CLIENTS C, PRODUITS P, VENTES V
WHERE V.NC=C.NC
AND V.NR=R.NR
AND V.NP=P.NP
AND V.QT>100
AND P.COUL='Rouge' ;