diff --git a/BDD/tp/tp8/tp8.sql b/BDD/tp/tp8/tp8.sql new file mode 100644 index 0000000..e108a60 --- /dev/null +++ b/BDD/tp/tp8/tp8.sql @@ -0,0 +1,235 @@ +DROP TABLE REPAS; +DROP TABLE AMOUR; +DROP TABLE DRAGON; +DROP TABLE NOURRITURE; +DROP TABLE TERRITOIRE; + +\! clear + +CREATE TABLE TERRITOIRE( + num_terr char(3) PRIMARY KEY, + nom varchar(30) UNIQUE, + longitude numeric NOT NULL CHECK (longitude <= 180 AND longitude >= -180), + latitude1 numeric NOT NULL CHECK (latitude1 <= 90), + latitude2 char(1) NOT NULL CHECK (latitude2 ='S' OR latitude2 ='N') +); +CREATE TABLE DRAGON( + numD char(5) PRIMARY KEY, + nom varchar(30) UNIQUE, + longeur numeric NOT NULL CHECK (longeur > 0), + sexe char(1) NOT NULL CHECK (sexe ='F' OR sexe ='M'), + nb_ecailles numeric CHECK (nb_ecailles > 0), + date_naissance date, + en_amour varchar(20) NOT NULL CHECK (en_amour ='macho' AND sexe='M' OR en_amour='timide' OR en_amour='sincere' OR en_amour='volage'), + crache_feu char(1) CHECK (crache_feu ='O' OR crache_feu ='N'), + num_terr char(4) REFERENCES TERRITOIRE +); + +CREATE TABLE NOURRITURE( + numN char(5)PRIMARY KEY, + nom varchar(30) UNIQUE, + calories numeric NOT NULL CHECK (calories >0) + +); +CREATE TABLE AMOUR ( + force varchar(20) CHECK (force='un peu' OR force='beaucoup' OR force='passionnement' OR force='a la folie'), + numDragon1 char(5) REFERENCES DRAGON, + numDragon2 char(5) REFERENCES DRAGON, + PRIMARY KEY (numDragon1,numDragon2) +); + +CREATE TABLE REPAS( + date_repas date, + qte numeric NOT NULL CHECK (qte >0), + numD char(5) REFERENCES DRAGON, + numN char(5) REFERENCES NOURRITURE, + PRIMARY KEY (numD,numN) +); + +INSERT INTO TERRITOIRE VALUES('T01', 'terre brûlées', 92, 40, 'S'); +INSERT INTO TERRITOIRE VALUES ('T02', 'Terre de fleurs', 98, 48, 'S'); +INSERT INTO TERRITOIRE VALUES ('T03', 'Fleur de naiges', 100, 8, 'N'); + +INSERT INTO DRAGON VALUES('D0001', 'Smeagol', 152, 'M', 1857,'14/06/1985', 'macho', 'O', 'T02'); +INSERT INTO DRAGON VALUES ('D0002', 'Birduth', 258, 'M', 4787, '05/05/1989', 'timide', 'N', 'T01'); +INSERT INTO DRAGON VALUES ('D0003', 'Negueth', 128,'F',1582,'08/08/1992', 'sincere', 'O', 'T02'); +INSERT INTO DRAGON VALUES ('D0004', 'Miss Toc', 183,'F',2781,'04/07/2020', 'volage', NULL, 'T01'); +INSERT INTO DRAGON VALUES ('D0005', 'Bolong', 213,'M',754,'06/05/2010', 'macho', 'N', 'T01'); +INSERT INTO DRAGON VALUES ('D0006', 'Miloch', 83,'M',718,'29/04/2015', 'timide', 'O', 'T02'); +INSERT INTO DRAGON VALUES ('D0007', 'Nessie', 168,'M',1721,'12/12/2005', 'macho', 'O', 'T02'); +INSERT INTO DRAGON VALUES ('D0008', 'Tarak', 123,'F',851,'15/04/2009', 'timide', 'N', 'T03'); +INSERT INTO DRAGON VALUES ('D0009', 'Solong', 173,'M',1481,'04/08/2021', 'timide', NULL, 'T01'); + +INSERT INTO NOURRITURE VALUES ('P0001', 'Pomme', '7'); +INSERT INTO NOURRITURE VALUES ('P0002', 'Cacahuète', '10'); +INSERT INTO NOURRITURE VALUES ('P0003', 'Orange', '25'); +INSERT INTO NOURRITURE VALUES ('P0004', 'Oeuf', '15'); +INSERT INTO NOURRITURE VALUES ('P0005', 'Ver', '3'); +INSERT INTO NOURRITURE VALUES ('P0006', 'Poisson', '35'); + +INSERT INTO AMOUR VALUES ('passionnement', 'D0001', 'D0008'); +INSERT INTO AMOUR VALUES ('beaucoup', 'D0002', 'D0003'); +INSERT INTO AMOUR VALUES ('a la folie', 'D0003', 'D0006'); +INSERT INTO AMOUR VALUES ('a la folie', 'D0006', 'D0003'); +INSERT INTO AMOUR VALUES ('un peu', 'D0008', 'D0005'); +INSERT INTO AMOUR VALUES ('beaucoup', 'D0005', 'D0008'); +INSERT INTO AMOUR VALUES ('un peu', 'D0007', 'D0008'); + +INSERT INTO REPAS VALUES ('10/09/2021', 1000, 'D0001', 'P0002'); +INSERT INTO REPAS VALUES ('10/09/2021', 16, 'D0001', 'P0001'); +INSERT INTO REPAS VALUES ('11/09/2021', 4, 'D0005', 'P0004'); +INSERT INTO REPAS VALUES ('10/09/2021', 6, 'D0003', 'P0003'); +INSERT INTO REPAS VALUES ('11/09/2021', 1, 'D0003', 'P0004'); +INSERT INTO REPAS VALUES ('10/09/2021', 53, 'D0006', 'P0005'); +INSERT INTO REPAS VALUES ('11/09/2021', 100, 'D0006', 'P0002'); +INSERT INTO REPAS VALUES ('10/09/2021', 20, 'D0007', 'P0006'); +INSERT INTO REPAS VALUES ('10/09/2021', 10, 'D0008', 'P0001'); +INSERT INTO REPAS VALUES ('11/09/2021', 10, 'D0008', 'P0003'); +INSERT INTO REPAS VALUES ('10/09/2021', 1, 'D0009', 'P0006'); +INSERT INTO REPAS VALUES ('11/09/2021', 2, 'D0009', 'P0003'); +INSERT INTO REPAS VALUES ('12/09/2021', 8, 'D0009', 'P0004'); +INSERT INTO REPAS VALUES ('25/09/2021', 20, 'D0006', 'P0003'); + +SELECT * FROM TERRITOIRE; +SELECT * FROM DRAGON; +SELECT * FROM NOURRITURE; +SELECT * FROM AMOUR; +SELECT * FROM REPAS; + +/* TP5 a mettre dans le terminale */ + +/* Question 1 */ +/* SELECT nom FROM DRAGON WHERE crache_feu = 'O'; */ + +/* Question 2 */ +/* SELECT nom FROM DRAGON WHERE crache_feu = 'O' AND en_amour = 'timide'; */ + +/* Question 3 */ +/* SELECT * FROM DRAGON WHERE sexe = 'F' ORDER BY longeur DESC; */ + +/* Question 4 */ +/* SELECT longeur/nb_ecailles FROM DRAGON; */ + +/* Question 5 */ +/* SELECT DISTINCT numDragon1 FROM AMOUR; */ + +/* Question 6 */ +/* SELECT numDragon1 FROM AMOUR WHERE numDragon2 = 'D0003'; */ + +/* Question 7 */ +/* SELECT numDragon2 FROM AMOUR WHERE numDragon1 = 'D0005'; */ + +/* Question 8 */ +/* SELECT numDragon1 FROM AMOUR WHERE force = 'un peu'; */ + +/* Question 9 */ +/* SELECT numDragon1, force, numDragon2 FROM AMOUR WHERE force = 'passionnement'; */ + +/* Question 10 */ +/* SELECT * FROM NOURRITURE WHERE calories < 10; */ + +/* Question 11 */ +/* SELECT * FROM REPAS JOIN NOURRITURE ON REPAS.numN = NOURRITURE.numN WHERE NOURRITURE.nom = 'Oeuf'; */ + +/* Question 12 */ +/* SELECT distinct(numD) FROM REPAS; */ + +/* Question 13 */ +/* SELECT * FROM DRAGON WHERE num_terr = 'T01'; */ + +/* Question 14 */ +/* SELECT * FROM TERRITOIRE WHERE latitude2 = 'S'; */ + + + +/* TP7*/ + +/* Question 1 */ +/* SELECT * FROM DRAGON WHERE nom LIKE 'S%'; */ + +/* Question 2 */ +/* SELECT numDragon1 || ' aime ' || numDragon2 || ' de manière : ' || force FROM Amour; */ + +/* Question 3 */ +/* SELECT nom, char_length(nom) FROM TERRITOIRE; */ + +/* Question 4 */ +/* SELECT lower(nom) FROM NOURRITURE; */ + +/* Question 5 */ +/* SELECT substr(nom, 1, 3) FROM DRAGON; */ + +/* Question 6 */ +/* SELECT to_char(current_date, 'YYYY-MM-DD'); */ + +/* Question 7 */ +/* SELECT current_date -10 as "date il y a 10 jours"; */ + +/* Question 8 */ +/* SELECT (CURRENT_DATE - '2004-01-12'::date) / 365 as age, round((current_date - '2004-01-12'::date) / 365::numeric, 3) as age_reel; */ + +/* Question 9 */ +/* SELECT ceil((current_date-'2004-01-12'::date)/365::numeric); */ + +/* Question 10 */ +/* SELECT trunc((current_date-'2004-01-12'::date)/365::numeric,1); + SELECT floor((current_date-'2004-01-12'::date)/365::numeric);*/ + +/* Question 11 */ +/* SELECT round((current_date-date_naissance::date)/365::numeric,3) FROM DRAGON; */ + +/* Question 12 */ +/* SELECT * FROM DRAGON WHERE round((current_date-date_naissance::date)/365::numeric,3)<3;*/ + +/* Question 13 */ +/* SELECT * FROM REPAS WHERE to_char(date_repas, 'MON') = 'SEP'; */ + +/* TP8*/ + +UPDATE DRAGON SET num_terr = 'T03' WHERE numD = 'D0008'; + +/* Question 1 */ +/* SELECT DRAGON.nom FROM DRAGON JOIN TERRITOIRE ON DRAGON.num_terr = TERRITOIRE.num_terr WHERE TERRITOIRE.latitude2 = 'S'; */ + +/* Question 2 */ +/* SELECT DRAGON.nom FROM DRAGON JOIN AMOUR ON DRAGON.numD = AMOUR.numDragon1 WHERE AMOUR.force = 'un peu'; */ + +/* Question 3 */ +/* SELECT DRAGON.nom FROM DRAGON JOIN REPAS ON DRAGON.numD = REPAS.numD JOIN NOURRITURE ON REPAS.numN = NOURRITURE.numN WHERE NOURRITURE.nom = 'Oeuf'; */ + +/* Question 4 */ +/* SELECT TERRITOIRE.NOM, TERRITOIRE.longitude, TERRITOIRE.latitude1 FROM TERRITOIRE JOIN DRAGON ON TERRITOIRE.num_terr = DRAGON.num_terr JOIN REPAS ON DRAGON.numD = REPAS.numD JOIN NOURRITURE ON REPAS.numN = NOURRITURE.numN WHERE NOURRITURE.nom = 'Orange'; */ + +/* Question 5 */ +/* SELECT REPAS.date_repas, REPAS.qte, NOURRITURE.nom, NOURRITURE.calories FROM REPAS JOIN NOURRITURE ON REPAS.numN = NOURRITURE.numN WHERE REPAS.numD = 'D0008' ORDER BY REPAS.date_repas; */ + +/* Question 6 */ +/* SELECT NOURRITURE.numn, NOURRITURE.nom, TERRITOIRE.num_terr FROM NOURRITURE JOIN REPAS ON NOURRITURE.numn = REPAS.numn JOIN DRAGON ON REPAS.numd = DRAGON.numd JOIN TERRITOIRE ON DRAGON.num_terr = TERRITOIRE.num_terr ORDER BY TERRITOIRE.num_terr; */ + +/* Question 7 */ +/* SELECT DRAGON.nom FROM DRAGON JOIN TERRITOIRE ON DRAGON.num_terr = TERRITOIRE.num_terr JOIN REPAS ON DRAGON.numD = REPAS.numD JOIN NOURRITURE ON REPAS.numN = NOURRITURE.numN WHERE DRAGON.crache_feu = 'O' AND TERRITOIRE.num_terr = 'T02' AND NOURRITURE.nom = 'Oeuf' OR NOURRITURE.nom = 'Orange' ; */ + +/* Question 8 */ +/* SELECT AMOUR.force, DRAGON.nom FROM DRAGON JOIN AMOUR ON DRAGON.numD = AMOUR.numDragon1; */ + +/* Question 9 */ +/* SELECT DRAGON.nom FROM DRAGON JOIN AMOUR ON DRAGON.numD = AMOUR.numDragon1 JOIN TERRITOIRE ON TERRITOIRE.num_terr = DRAGON.num_terr WHERE DRAGON.crache_feu='O' AND 85200 AND AMOUR.force = 'un peu'; */ + +/* Question 12 */ +/* SELECT DRAGON.nom FROM DRAGON JOIN AMOUR ON DRAGON.numD = AMOUR.numDragon1 */ + +/* Question 13 */ +/* SELECT DISTINCT DRAGON.nom FROM DRAGON JOIN REPAS ON DRAGON.numD = REPAS.numD JOIN NOURRITURE ON REPAS.numN = NOURRITURE.numN WHERE NOURRITURE.nom = 'Oeuf' AND DRAGON.numD NOT IN (SELECT DRAGON.numD FROM DRAGON JOIN REPAS ON DRAGON.numD = REPAS.numD JOIN NOURRITURE ON REPAS.numN = NOURRITURE.numN WHERE NOURRITURE.nom = 'Orange'); */ + +/* Question 14 */ +/* + + + +\d diff --git a/BDD/tp/tpAlchimiste/tpAlchimiste.sql b/BDD/tp/tpAlchimiste/tpAlchimiste.sql index e786e51..154684d 100755 --- a/BDD/tp/tpAlchimiste/tpAlchimiste.sql +++ b/BDD/tp/tpAlchimiste/tpAlchimiste.sql @@ -2,7 +2,7 @@ DROP TABLE CONTENIR; DROP TABLE POTION; DROP TABLE OBTENIR; DROP TABLE INGREDIENT; -DROP TABLE SOURCESS; +DROP TABLE SOURCES; \! clear @@ -18,7 +18,7 @@ CREATE TABLE SOURCES( CREATE TABLE INGREDIENT( idIngredient char(4) PRIMARY KEY, designation varchar(50) NOT NULL UNIQUE, - idSOURCESs char(4) REFERENCES SOURCES + idSOURCES char(4) REFERENCES SOURCES ); CREATE TABLE POTION( @@ -34,7 +34,7 @@ CREATE TABLE CONTENIR( ); CREATE TABLE OBTENIR( - transformation char(10), + transformation char(10) DEFAULT 'Issues', idIngredientBase char(4) REFERENCES INGREDIENT, idIngredientObtenue char(4) REFERENCES INGREDIENT ); @@ -42,24 +42,30 @@ CREATE TABLE OBTENIR( INSERT INTO SOURCES VALUES ('S001','Abeille sauvage','plaines verdoyantes','22/09/2021'); INSERT INTO SOURCES VALUES ('S002','Branchiflore','marais sombre','08/09/2021'); INSERT INTO SOURCES VALUES ('S003','Licorne','montagne dorée','16/04/2020'); -INSERT INTO SOURCES VALUES ('S004','Mandragore','forêt de l Est','2/10/2021'); +INSERT INTO SOURCES VALUES ('S004','Mandragore','forêt de l Est','12/10/2021'); INSERT INTO SOURCES VALUES ('S005','Pin bleu','forêt de l Est','10/10/2021'); INSERT INTO SOURCES VALUES ('S006','Sirène','mer d opale','03/02/2021'); -INSERT INTO SOURCES VALUES ('S007','Tortue géante','mer d opale','03/11/2022'); +INSERT INTO SOURCES VALUES ('S007','Tortue géante','mer d opale','03/02/2021'); INSERT INTO INGREDIENT VALUES('I001', 'poudre de Mandragore', 'S004'); INSERT INTO INGREDIENT VALUES('I002', 'larmes de Sirene', 'S006'); INSERT INTO INGREDIENT VALUES('I003', 'Miel', 'S001'); INSERT INTO INGREDIENT VALUES('I004', 'poils de Licorne', 'S003'); INSERT INTO INGREDIENT VALUES('I005', 'seve de Pin', 'S005'); -INSERT INTO INGREDIENT VALUES('I006', 'Branchiflore', 'S002'); +INSERT INTO INGREDIENT VALUES('I006', 'graines de Branchiflore', 'S002'); INSERT INTO INGREDIENT VALUES('I007', 'ecailles de tortues', 'S007'); -INSERT INTO INGREDIENT VALUES('I008', 'racine de Mandragore', 'S002'); +INSERT INTO INGREDIENT VALUES('I008', 'racine de Mandragore', 'S004'); INSERT INTO INGREDIENT VALUES('I009', 'rayon de miel d Abeille sauvage', 'S001'); +INSERT INTO INGREDIENT VALUES('I010', 'Pins bleus', 'S005'); +INSERT INTO INGREDIENT VALUES('I011', 'Branchiflores', 'S002'); +INSERT INTO INGREDIENT VALUES('I012', 'Tortues géantes', 'S007'); +INSERT INTO INGREDIENT VALUES('I013', 'Mandragore', 'S004'); +INSERT INTO INGREDIENT VALUES('I014', 'Sirene', 'S006'); +INSERT INTO INGREDIENT VALUES('I015', 'Licorne', 'S003'); + INSERT INTO POTION VALUES ('P001','Invisibilité'); INSERT INTO POTION VALUES ('P002','Force'); -INSERT INTO POTION VALUES ('P003'); INSERT INTO CONTENIR VALUES ('P001','I001',20,'g'); INSERT INTO CONTENIR VALUES ('P001','I002',2,'u'); @@ -70,23 +76,35 @@ INSERT INTO CONTENIR VALUES ('P002','I006',3,'u'); INSERT INTO CONTENIR VALUES ('P002','I007',12,'g'); INSERT INTO CONTENIR VALUES ('P002','I008',1,'u'); -INSERT INTO OBTENIR VALUES ('I008','I001','Broyage'); -INSERT INTO OBTENIR VALUES ('I003','I009','Extraction'); +INSERT INTO OBTENIR VALUES ('Broyage', 'I008','I001'); +INSERT INTO OBTENIR VALUES ('Extraction', 'I008', 'I003'); +INSERT INTO OBTENIR VALUES (NULL, 'I013', 'I008'); +INSERT INTO OBTENIR VALUES (NULL, 'I014', 'I002'); +INSERT INTO OBTENIR VALUES (NULL, 'I015', 'I004'); +INSERT INTO OBTENIR VALUES (NULL, 'I010', 'I005'); +INSERT INTO OBTENIR VALUES (NULL, 'I011', 'I006'); +INSERT INTO OBTENIR VALUES (NULL, 'I012', 'I007'); + SELECT * FROM CONTENIR; SELECT * FROM POTION; SELECT * FROM OBTENIR; SELECT * FROM INGREDIENT; -SELECT * FROM SOURCESS; +SELECT * FROM SOURCES; /* Question 3 */ /* SELECT * FROM POTION ORDER BY effet; */ /* Question 4 */ -/* SELECT DISTINCT lieu FROM SOURCESS; */ +/* SELECT DISTINCT lieu FROM SOURCES; */ /* Question 5 */ /* */ +SELECT DISTINCT lieu FROM Source JOIN Ingredient ON Source.idSource=Ingredient.idSource WHERE EXISTS(SELECT idSource from Ingredient WHERE Source.idSource = Ingredient.idSource); +SELECT idIngredient2, transformation FROM Transformation WHERE idIngredient='I009'; +SELECT idSource, nom FROM Source WHERE (current_date-dateCollecte > 45); +SELECT round(quantite, 2) || ' ' || upper(unite) || ' ' || idIngredient AS tkt FROM Contenir WHERE idPotion='P001'; +SELECT idIngredient, designation FROM Ingredient WHERE designation LIKE '%Poudre%'; \d \ No newline at end of file