Re-re-représentation de représentants
[1 h]
Soit la base de données suivante :
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);
INSERT INTO VENTES (NR, NP, NC, QT) VALUES (3, 1, 5, 1);
Écrire en SQL les requêtes permettant d'obtenir les informations suivantes.
Question
On souhaite les numéros des produits vendus à un client de Lyon par un représentant de Lyon.
Indice
np
----
1
4
3
Question
On souhaite les noms des produits vendus à un client par un représentant issu de la même ville.
Indice
nomp
------------
Aspirateur
Chaise
Tapis
Question
On souhaite les noms des représentants qui n'ont jamais rien vendu.
Proposez deux solutions sans sous-requête (et sans vue) et deux solutions avec des sous-requêtes.
Indice
nomr
-------
Bruno
Indice
Pour une solution sans vue, utilisez une jointure externe.
Indice
Pour une solution sans vue, utilisez une différence.
Question
On souhaite les numéros des clients ayant acheté quelque chose à au moins un représentant issu de la même ville.
Proposez une solution avec et une solution sans sous-requête.
Indice
nc
----
1
2
Question
On souhaite les numéros de tous les produits tels qu'il n'en existe aucun autre ayant un poids plus faible.
Proposez une solution avec une vue, une solution avec une sous-requête dans la clause FROM et une solution avec une sous-requête dans la clause WHERE.
Indice
np
----
2
4