From efbd70b8403f403de756697444201950382b64e2 Mon Sep 17 00:00:00 2001 From: pvalarcher Date: Thu, 14 Nov 2024 15:57:14 +0100 Subject: [PATCH] TP3 --- Code/CorrectionsTP/TP3b.sql | 193 ++++++++++++++++++++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 Code/CorrectionsTP/TP3b.sql diff --git a/Code/CorrectionsTP/TP3b.sql b/Code/CorrectionsTP/TP3b.sql new file mode 100644 index 0000000..17b8d09 --- /dev/null +++ b/Code/CorrectionsTP/TP3b.sql @@ -0,0 +1,193 @@ +create table Buveur ( +NumBuveur number primary key, +Nom Varchar2(25), +Prenom Varchar2(25), +Ville Varchar2(30)); + + +Create table Viticulteur ( + NumVitic Number Primary key, + Nom Varchar2(25) not null, + Prenom Varchar2(25), + Ville Varchar2 (30) not null ); + +Create table Vin ( + NumVin Number, + Cru Varchar2(15) not null, + Millesime Number not null, + Region Varchar2(15) not null, + NumVitic Number not null references Viticulteur, + Primary key (NumVin)); + +Create table Commande ( + NumCom Number Primary key, + NumBuveur Number not null references Buveur, + NumVin Number not null references Vin, + Qtte Number not null); + +-- on rajoute une colonne à la table commande (nom de l'attribut datecom, type date) +alter table commande add datecom date; + +Create table Livraison ( + NumCom Number not null references Commande, + Qtte Number not null, + DateLiv Date not null, + Primary key (NumCom, DateLiv)); + +Insert into BUVEUR (NUMBUVEUR,NOM,PRENOM,VILLE) values ('1400','GAUTHIER','ROBERT','PARIS'); +Insert into BUVEUR (NUMBUVEUR,NOM,PRENOM,VILLE) values ('1500','FRADET','PHILIPPE','MACON'); +Insert into BUVEUR (NUMBUVEUR,NOM,PRENOM,VILLE) values ('1300','JAMET','FLORENCE','VERSAILLES'); +Insert into BUVEUR (NUMBUVEUR,NOM,PRENOM,VILLE) values ('1100','COMBET','ALINE','DIJON'); +Insert into BUVEUR (NUMBUVEUR,NOM,PRENOM,VILLE) values ('1600','DUPOND','ALAIN','PARIS'); +Insert into BUVEUR (NUMBUVEUR,NOM,PRENOM,VILLE) values ('1700','COMBES','EDOUARD','PARIS'); +Insert into BUVEUR (NUMBUVEUR,NOM,PRENOM,VILLE) values ('1350','GRAVINEL','SOPHIE','NICE'); +Insert into BUVEUR (NUMBUVEUR,NOM,PRENOM,VILLE) values ('1450','PASCAL','YVES','MACON'); +Insert into BUVEUR (NUMBUVEUR,NOM,PRENOM,VILLE) values ('1750','DURIEUX','BLAISE','CHINON'); +Insert into BUVEUR (NUMBUVEUR,NOM,PRENOM,VILLE) values ('1200','MAURY','FRANCOIS','PARIS'); + +Insert into VITICULTEUR (NUMVITIC,NOM,PRENOM,VILLE) values ('1','MOULIN','JEAN','MACON'); +Insert into VITICULTEUR (NUMVITIC,NOM,PRENOM,VILLE) values ('3','MORIN','JULES','BENAIS'); +Insert into VITICULTEUR (NUMVITIC,NOM,PRENOM,VILLE) values ('5','COULIS DUTHEIL',null,'CHINON'); +Insert into VITICULTEUR (NUMVITIC,NOM,PRENOM,VILLE) values ('4','VALLEE','CLAUDE','SAINT NICOLAS'); +Insert into VITICULTEUR (NUMVITIC,NOM,PRENOM,VILLE) values ('10','PARENT','PIERRE','POMMARD'); +Insert into VITICULTEUR (NUMVITIC,NOM,PRENOM,VILLE) values ('15','BARANCOURT',null,'TOURS SUR MARNE'); +Insert into VITICULTEUR (NUMVITIC,NOM,PRENOM,VILLE) values ('16','JADOT','LOUIS','BEAUNE'); +Insert into VITICULTEUR (NUMVITIC,NOM,PRENOM,VILLE) values ('18','MEDEVILLE','CHARLES','PREIGNAC'); +Insert into VITICULTEUR (NUMVITIC,NOM,PRENOM,VILLE) values ('21','LYNCH-BAGES',null,'PAUILLAC'); +Insert into VITICULTEUR (NUMVITIC,NOM,PRENOM,VILLE) values ('22','CHATEAU MONBRISON',null,'MARGAUX'); +Insert into VITICULTEUR (NUMVITIC,NOM,PRENOM,VILLE) values ('23','CHATEAU MOULIN A VENT',null,'CASTELNAU DE MEDOC'); +Insert into VITICULTEUR (NUMVITIC,NOM,PRENOM,VILLE) values ('20','TISSOT','JACQUES','ARBOIS'); + +Insert into VIN (NUMVIN,CRU,MILLESIME,REGION,NUMVITIC) values ('160','BOURGUEIL','1984','LOIRE','3'); +Insert into VIN (NUMVIN,CRU,MILLESIME,REGION,NUMVITIC) values ('88','CHAMBERTIN','1980','BOURGOGNE','1'); +Insert into VIN (NUMVIN,CRU,MILLESIME,REGION,NUMVITIC) values ('170','BOUZY','1984','CHAMPAGNE','15'); +Insert into VIN (NUMVIN,CRU,MILLESIME,REGION,NUMVITIC) values ('175','MEURSAULT','1980','BOURGOGNE','16'); +Insert into VIN (NUMVIN,CRU,MILLESIME,REGION,NUMVITIC) values ('80','SAUTERNES','1982','BORDEAUX','18'); +Insert into VIN (NUMVIN,CRU,MILLESIME,REGION,NUMVITIC) values ('84','PAUILLAC','1982','BORDEAUX','21'); +Insert into VIN (NUMVIN,CRU,MILLESIME,REGION,NUMVITIC) values ('90','MARGAUX','1978','BORDEAUX','22'); +Insert into VIN (NUMVIN,CRU,MILLESIME,REGION,NUMVITIC) values ('98','MOULIS','1981','BORDEAUX','23'); +Insert into VIN (NUMVIN,CRU,MILLESIME,REGION,NUMVITIC) values ('86','CHINON','1978','LOIRE','4'); +Insert into VIN (NUMVIN,CRU,MILLESIME,REGION,NUMVITIC) values ('85','CHINON','1983','LOIRE','5'); +Insert into VIN (NUMVIN,CRU,MILLESIME,REGION,NUMVITIC) values ('120','CHINON','1985','LOIRE','4'); +Insert into VIN (NUMVIN,CRU,MILLESIME,REGION,NUMVITIC) values ('190','SAINT EMILION','1981','BORDEAUX','18'); +Insert into VIN (NUMVIN,CRU,MILLESIME,REGION,NUMVITIC) values ('128','BOURGUEIL','1985','LOIRE','4'); +Insert into VIN (NUMVIN,CRU,MILLESIME,REGION,NUMVITIC) values ('140','POMMARD','1976','BOURGOGNE','10'); +Insert into VIN (NUMVIN,CRU,MILLESIME,REGION,NUMVITIC) values ('150','MONTHELIE','1978','BOURGOGNE','10'); +Insert into VIN (NUMVIN,CRU,MILLESIME,REGION,NUMVITIC) values ('100','CHAMPAGNE BRUT','1988','CHAMPAGNE','15'); + +Insert into COMMANDE (NUMCOM,NUMBUVEUR,NUMVIN,QTTE,DATECOM) values ('8','1400','140','12',to_date('10/01/88','DD/MM/RR')); +Insert into COMMANDE (NUMCOM,NUMBUVEUR,NUMVIN,QTTE,DATECOM) values ('3','1500','88','24',to_date('10/09/87','DD/MM/RR')); +Insert into COMMANDE (NUMCOM,NUMBUVEUR,NUMVIN,QTTE,DATECOM) values ('2','1500','100','18',to_date('20/11/87','DD/MM/RR')); +Insert into COMMANDE (NUMCOM,NUMBUVEUR,NUMVIN,QTTE,DATECOM) values ('4','1600','175','6',to_date('12/02/87','DD/MM/RR')); +Insert into COMMANDE (NUMCOM,NUMBUVEUR,NUMVIN,QTTE,DATECOM) values ('5','1300','140','3',to_date('18/03/87','DD/MM/RR')); +Insert into COMMANDE (NUMCOM,NUMBUVEUR,NUMVIN,QTTE,DATECOM) values ('1','1600','90','6',to_date('10/06/87','DD/MM/RR')); +Insert into COMMANDE (NUMCOM,NUMBUVEUR,NUMVIN,QTTE,DATECOM) values ('6','1100','140','8',to_date('24/12/87','DD/MM/RR')); +Insert into COMMANDE (NUMCOM,NUMBUVEUR,NUMVIN,QTTE,DATECOM) values ('7','1200','88','3',to_date('24/12/87','DD/MM/RR')); +Insert into COMMANDE (NUMCOM,NUMBUVEUR,NUMVIN,QTTE,DATECOM) values ('11','1200','140','12',to_date('12/12/89','DD/MM/RR')); +Insert into COMMANDE (NUMCOM,NUMBUVEUR,NUMVIN,QTTE,DATECOM) values ('12','1100','120','6',to_date('13/12/89','DD/MM/RR')); +Insert into COMMANDE (NUMCOM,NUMBUVEUR,NUMVIN,QTTE,DATECOM) values ('10','1500','100','18',to_date('25/03/20','DD/MM/RR')); + + +insert into livraison (dateliv, qtte, numcom) values +(to_date('30/08/87', 'DD/MM/RR'), '12', '2'); +insert into livraison (dateliv, qtte, numcom) values +(to_date('15/07/87', 'DD/MM/RR'), '6', '1'); +insert into livraison (dateliv, qtte, numcom) values +(to_date('27/09/87', 'DD/MM/RR'), '6', '2'); +insert into livraison (dateliv, qtte, numcom) values +(to_date('20/11/87', 'DD/MM/RR'), '12', '3'); +insert into livraison (dateliv, qtte, numcom) values +(to_date('20/12/87', 'DD/MM/RR'), '6', '4'); +insert into livraison (dateliv, qtte, numcom) values +(to_date('28/12/87', 'DD/MM/RR'), '8', '6'); +insert into livraison (dateliv, qtte, numcom) values +(to_date('30/12/87', 'DD/MM/RR'), '3', '7'); + +-- Q1 +-- sql 89 +select distinct Nom, prenom, c.numbuveur +from Buveur b, commande c +where c.numbuveur = b.numbuveur +order by c.numbuveur; + +-- SQL 92 +select distinct Nom, prenom, numbuveur +from Buveur natural join commande +order by numbuveur; + +-- Q2 +-- sql89 +select v.numvitic, nom, ville +from viticulteur vi, vin v +where vi.numvitic = v.numvitic and + v.region = 'LOIRE' and v.millesime = '1983'; + +-- SQL92 +select numvitic, nom, ville +from viticulteur natural join vin v +where v.region = 'LOIRE' and v.millesime = '1983'; + +-- Q3 +-- SQL89 +-- SQL 89 +select distinct B.numbuveur, nom +from buveur b, commande c, vin v +where b.numbuveur = c.numbuveur and c.numvin=v.numvin and cru = 'POMMARD' ; + +-- SQL92 +select distinct numbuveur, nom +from buveur natural join commande natural join vin +where cru = 'POMMARD' ; + + +-- Q4 +-- SQL 92 +select distinct nom +from commande natural join vin natural join viticulteur +where numbuveur = 1600; + +select distinct nom +from viticulteur +where numvitic in (select numvitic + from vin + where numvin in (select numvin + from commande + where numbuveur = 1600)); + +select distinct t.nom +from (buveur b natural join commande natural join vin) + join viticulteur t using (numVitic) +where b.nom = 'DUPOND'; + +select distinct numvitic, t.nom , ville +from (buveur natural join commande natural join vin) + join viticulteur t using(numvitic, ville); + + +select distinct numvitic, nom , ville +from viticulteur t +where numvitic in (select numvitic + from vin + where numvin in (select numvin + from commande + where numbuveur in (select numbuveur + from buveur + where ville = t.ville))); + + +select * +from buveur +where ville in (select ville + from buveur + where numbuveur = 1400); + +select qtte + from commande + where numcom = 11 and numvin = 140; + + +select * +from commande +where numvin = 140 and qtte < Any (select qtte + from commande + where numcom = 11 and numvin = 140);