2024-BD-BUT1-Sen/Code/CorrectionsTP/TP3b.sql

194 lines
9.1 KiB
MySQL
Raw Normal View History

2024-11-14 15:57:14 +01:00
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);