You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
4.9 KiB
142 lines
4.9 KiB
DROP TABLE IF EXISTS Medecin, Patient, Consultation, Medicament, Laboratoire ,Posologie ,Fournir;
|
|
|
|
\! clear;
|
|
|
|
CREATE TABLE Medecin (
|
|
id_medecin numeric PRIMARY KEY,
|
|
nom varchar NOT NULL,
|
|
prenom varchar NOT NULL
|
|
);
|
|
|
|
CREATE TABLE Patient (
|
|
num_pat numeric PRIMARY KEY,
|
|
nom varchar NOT NULL,
|
|
prenom varchar NOT NULL,
|
|
age numeric CHECK (age is NULL OR age > 0)
|
|
);
|
|
|
|
CREATE TABLE Consultation (
|
|
num_cons varchar PRIMARY KEY CHECK (num_cons LIKE 'C%'),
|
|
date date,
|
|
heure time,
|
|
id_medecin numeric,
|
|
num_pat numeric,
|
|
FOREIGN KEY (id_medecin) REFERENCES Medecin,
|
|
FOREIGN KEY (num_pat) REFERENCES Patient
|
|
);
|
|
|
|
|
|
CREATE TABLE Medicament (
|
|
num_med numeric PRIMARY KEY,
|
|
nom varchar NOT NULL UNIQUE,
|
|
prix numeric CHECK (prix > 0)
|
|
);
|
|
|
|
CREATE TABLE Posologie (
|
|
matin numeric CHECK (matin is NULL or matin > 0),
|
|
midi numeric CHECK (midi is NULL or midi > 0),
|
|
soir numeric CHECK (soir is NULL or soir > 0),
|
|
num_cons varchar,
|
|
num_med numeric,
|
|
PRIMARY KEY(num_cons, num_med),
|
|
FOREIGN KEY (num_med) REFERENCES Medicament,
|
|
FOREIGN KEY (num_cons) REFERENCES Consultation
|
|
);
|
|
|
|
CREATE TABLE Laboratoire (
|
|
num_lab numeric PRIMARY KEY,
|
|
nom varchar NOT NULL UNIQUE,
|
|
rue numeric,
|
|
code_postal numeric(5) CHECK ((code_postal IS NOT NULL) = (pays = 'France')), /*<=> (code_post IS NOT NULL AND pays IS 'France') OR (code_postal IS NULL AND Pays IS NOT 'France')*/
|
|
ville varchar,
|
|
pays varchar DEFAULT ('France')
|
|
);
|
|
|
|
CREATE TABLE Fournir (
|
|
num_lab numeric,
|
|
num_med numeric,
|
|
PRIMARY KEY (num_lab, num_med),
|
|
FOREIGN KEY (num_lab) REFERENCES Laboratoire,
|
|
FOREIGN KEY (num_med) REFERENCES Medicament
|
|
);
|
|
|
|
INSERT INTO Medecin VALUES (1, 'DUPONT', 'Jean');
|
|
INSERT INTO Medecin VALUES (2, 'DURAND', 'Pierre');
|
|
INSERT INTO Medecin VALUES (3, 'DUPOND', 'Paul');
|
|
INSERT INTO Medecin VALUES (4, 'DUPUIS', 'Jacques');
|
|
INSERT INTO Medecin VALUES (5, 'DUPONT', 'Pierre');
|
|
|
|
INSERT INTO Patient VALUES(1, 'Bertrand', 'François', 25);
|
|
INSERT INTO Patient VALUES(2, 'Diner', 'Jinette', 18);
|
|
INSERT INTO Patient VALUES(3, 'Bouhours', 'Patrick', 30);
|
|
INSERT INTO Patient VALUES(4, 'Framabour', 'Gerard', 28);
|
|
INSERT INTO Patient VALUES(5, 'Delobel', 'Matthieu', 50);
|
|
INSERT INTO Patient VALUES(6, 'Dufour', 'Jean', 15);
|
|
INSERT INTO Patient VALUES(7, 'Dufour', 'Pierre', 12);
|
|
|
|
INSERT INTO Consultation VALUES('C1', '2015-01-01', '10:00', 1, 1);
|
|
INSERT INTO Consultation VALUES('C2', '2015-01-01', '10:00', 1, 2);
|
|
INSERT INTO Consultation VALUES('C3', '2015-01-01', '10:00', 2, 3);
|
|
INSERT INTO Consultation VALUES('C4', '2015-01-01', '10:00', 3, 4);
|
|
INSERT INTO Consultation VALUES('C5', '2015-01-01', '10:00', 2, 5);
|
|
|
|
INSERT INTO Medicament VALUES(1, 'Aspirine', 10);
|
|
INSERT INTO Medicament VALUES(2, 'Paracétamol', 25);
|
|
INSERT INTO Medicament VALUES(6, 'Antistase', 48);
|
|
INSERT INTO Medicament VALUES(7, 'Marimosane', 98);
|
|
INSERT INTO Medicament VALUES(3, 'Doliprane', 115);
|
|
INSERT INTO Medicament VALUES(4, 'Maxilase', 100);
|
|
INSERT INTO Medicament VALUES(5, 'Amoxiciline', 125);
|
|
|
|
INSERT INTO Posologie VALUES(1, 1, 1, 'C1', 1);
|
|
INSERT INTO Posologie VALUES(2, 2, 0, 'C2', 2);
|
|
INSERT INTO Posologie VALUES(3, 3, 3, 'C3', 3);
|
|
INSERT INTO Posologie VALUES(4, 4, 4, 'C4', 4);
|
|
INSERT INTO Posologie VALUES(15, 5, 5, 'C5', 5);
|
|
|
|
INSERT INTO Laboratoire VALUES(1, 'Laboratoire A', 1, 75001, 'Paris', 'France');
|
|
INSERT INTO Laboratoire VALUES(2, 'Laboratoire B', 2, 75002, 'Paris', 'France');
|
|
INSERT INTO Laboratoire VALUES(3, 'Laboratoire C', 3, NULL, 'Paris', 'France');
|
|
INSERT INTO Laboratoire VALUES(4, 'Laboratoire D', 4, 69400, 'Lyon', 'France');
|
|
INSERT INTO Laboratoire VALUES(5, 'Laboratoire E', 5, 15000, 'Aurillac', 'France');
|
|
INSERT INTO Laboratoire VALUES(6, 'Laboratoire F', 6, NULL, 'Barcelone', 'Espagne');
|
|
INSERT INTO Laboratoire VALUES(7, 'Laboratoire G', 7, 63500, 'Bioude', 'France');
|
|
INSERT INTO Laboratoire VALUES(8, 'Laboratoire RU', 9, NULL, 'Londres', 'Royaume-Unis');
|
|
|
|
|
|
-- Question 3
|
|
SELECT * FROM Medecin ORDER BY nom, prenom ASC;
|
|
|
|
-- Question 4
|
|
SELECT * FROM Patient WHERE age < 18 ORDER BY nom, prenom DESC;
|
|
|
|
-- Question 5
|
|
SELECT Consultation.* FROM Consultation JOIN Posologie ON Consultation.num_cons = Posologie.num_cons WHERE soir IS NOT NULL;
|
|
|
|
-- Question 6
|
|
SELECT Consultation.* FROM Consultation JOIN Posologie ON Consultation.num_cons = Posologie.num_cons WHERE matin > (midi + soir);
|
|
|
|
-- Question 7
|
|
SELECT * FROM Laboratoire WHERE pays = 'France' AND code_postal IS NOT NULL;
|
|
|
|
-- Question 8-9 a revoir c'est les meme question ???!!!
|
|
-- Requette sql pour afficher les laboratoires qui ne sont pas en France ou dont le code postal ne commence pas par 63
|
|
SELECT * FROM Laboratoire WHERE pays != 'France' OR code_postal NOT LIKE '63%';
|
|
|
|
-- Question 10
|
|
SELECT * FROM Medicament WHERE prix > 50;
|
|
|
|
-- Question 11
|
|
SELECT * FROM Medicament WHERE prix * 1.1 > 50;
|
|
|
|
-- Question 12 à revoir c'est pas possible comme le dit la question !!
|
|
SELECT * FROM Medicament WHERE prix < 100 AND prix*1.2 > 125;
|
|
|
|
-- Question 13
|
|
|
|
|
|
-- Question 14 is good ??
|
|
SELECT DISTINCT pays FROM Laboratoire;
|
|
|
|
\d
|