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.
100 lines
2.5 KiB
100 lines
2.5 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
|
|
);
|
|
|
|
/* Q3 */
|
|
SELECT * FROM Medecin ORDER BY nom, prenom ASC;
|
|
|
|
/* Q4 */
|
|
SELECT * FROM Patient WHERE age < 18 ORDER BY nom, prenom DESC;
|
|
|
|
/* Q5 */
|
|
SELECT Consultation.* FROM Consultation JOIN Posologie ON Consultation.num_cons = Posologie.num_cons WHERE soir IS NOT NULL;
|
|
|
|
/* Q6 */
|
|
SELECT Consultation.* FROM Consultation JOIN Posologie ON Consultation.num_cons = Posologie.num_cons WHERE matin > (midi + soir);
|
|
|
|
/* Q7 */
|
|
SELECT * FROM Laboratoire WHERE pays = 'France';
|
|
|
|
/* Q8 */
|
|
SELECT * FROM Laboratoire WHERE pays <> 'France' OR code_postal = '75000';
|
|
|
|
/* Q9 */
|
|
SELECT * FROM Laboratoire WHERE pays <> 'France' AND code_postal = '75000';
|
|
|
|
/* Q10 */
|
|
SELECT * FROM Medicament WHERE prix > 50;
|
|
|
|
/* Q11 */
|
|
SELECT * FROM Medicament WHERE prix* 1.1 > 50;
|
|
|
|
/* Q12 */
|
|
SELECT * FROM Medicament WHERE prix < 100 AND prix * 1.2 > 125;
|
|
|
|
/* Q13 */
|
|
SELECT * FROM Medicament WHERE prix < 100 OR prix * 1.2 > 125;
|
|
|
|
/* Q14 */
|
|
SELECT * FROM Medicament WHERE prix < 100 OR prix * 1.2 > 125 AND prix * 1.2 < 150;
|
|
|
|
\d
|