1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| CREATE TABLE ED_editeur(
ED_ident INT AUTO_INCREMENT,
ED_nom VARCHAR(128) NOT NULL,
PRIMARY KEY(ED_ident)
);
insert into ED_editeur (ED_nom)
values ('Gallimard')
, ('Seuil')
, ('Dargaud')
;
CREATE TABLE OE_oeuvre(
OE_ident INT AUTO_INCREMENT,
OE_titre VARCHAR(128) NOT NULL,
PRIMARY KEY(OE_ident)
);
insert into OE_oeuvre (OE_titre)
values ('Notre-Dame de Paris')
, ('Le rouge et le noir')
, ('Astérix le Gaulois')
, ('La serpe d''or')
;
CREATE TABLE EO_edition(
EO_ident INT AUTO_INCREMENT,
EO_date DATE NOT NULL,
OE_ident INT,
ED_ident INT NOT NULL,
PRIMARY KEY(EO_ident),
FOREIGN KEY(OE_ident) REFERENCES OE_oeuvre(OE_ident),
FOREIGN KEY(ED_ident) REFERENCES ED_editeur(ED_ident)
);
insert into EO_edition (EO_date, OE_ident, ED_ident)
values ('2020-06-25', 1, 1) -- Notre-Dame de Paris / Gallimard
, ('2015-11-03', 2, 2) -- Le rouge et le noir / Seuil
, ('2022-03-18', 1, 2) -- Notre-Dame de Paris / Seuil
, ('1961-04-12', 3, 3) -- Astérix le Gaulois / Dargaud
, ('1962-06-01', 4, 3) -- La serpe d'Or / Dargaud
, ('1975-01-20', null, 3) -- recueil / Dargaud
;
CREATE TABLE RE_recueil(
EO_ident INT,
RE_titre VARCHAR(50) NOT NULL,
PRIMARY KEY(EO_ident),
FOREIGN KEY(EO_ident) REFERENCES EO_edition(EO_ident)
);
insert into RE_recueil (EO_ident, RE_titre)
values (6, 'Asterix - T1&2')
;
CREATE TABLE CO_contenir(
OE_ident INT,
EO_ident INT,
PRIMARY KEY(OE_ident, EO_ident),
FOREIGN KEY(OE_ident) REFERENCES OE_oeuvre(OE_ident),
FOREIGN KEY(EO_ident) REFERENCES RE_recueil(EO_ident)
);
insert into CO_contenir(OE_ident, EO_ident)
values (3, 6)
, (4, 6)
;
-- contenu des recueils
select RE.RE_titre as "titre recueil"
, RE.EO_ident
, EO.EO_date as "edité le"
, ED.ED_nom as "éditeur"
, group_concat(OE.OE_titre separator ', ') as "oeuvres contenues"
from RE_recueil as RE
inner join EO_edition as EO
on EO.EO_ident = RE.EO_ident
inner join ED_editeur as ED
on ED.ED_ident = EO.ED_ident
inner join CO_contenir as CO
on CO.EO_ident = RE.EO_ident
inner join OE_oeuvre as OE
on OE.OE_ident = CO.OE_ident
group by RE.RE_titre
, RE.EO_ident
, EO.EO_date
, ED.ED_nom |
Partager