3. Donner pour chaque service, son nom, son bâtiment, ainsi que les ON [Link]= R.
no_docteur) K
prénom, nom et spécialité de son directeur. WHERE [Link]=[Link]
select [Link], batiment, [Link], [Link] from service S, employe E, docte GROUP BY [Link], [Link];
ur D
Where [Link]= [Link] And [Link] = directeur; 3 tuples 12. Bâtiment et numéro des chambres occupées par au moins un malade
(hospitalisé).
4. Donner pour chaque lit occupé du bâtiment « B » de l’hôpital occupé SELECT [Link],H.no_chambre
par un malade affilié à une mutuelle dont le nom commence par « MN... », FROM Service S,Hospitalisation H
le numéro du lit, le numéro de la chambre, le nom du service ainsi que le WHERE EXISTS (SELECT H.no_chambre WHERE [Link]=H.code_service)
prénom, le nom et la mutuelle du malade l’occupant. GROUP BY [Link],H.no_chambre; 23 Tuples
SELECT lit, H.no_chambre, [Link], [Link], [Link], mutuelle FROM serv
ice S, malade M, 13. Bâtiment et numéro des chambres vides (aucun malade n’y est
hospitalisation H hospitalisé).
WHERE batiment ='B' AND mutuelle like 'MN%' AND [Link] = H.no_ma A | 106
lade AND [Link] = code_service; 3 tuples. SELECT DISTINCT [Link], C.no_chambre
FROM service S, chambre C
5. Quelle est la moyenne des salaires des infirmiers(ères) par service ? WHERE C.code_service=[Link]
CAR 1588.42, CHG 1472.38, REA 1370.58 AND NOT EXISTS ( SELECT * FROM hospitalisation H
SELECT [Link], AVG(salaire) FROM infirmier, service S WHERE code_service WHERE H.no_chambre=C.no_chambre and
=[Link] GROUP BY [Link] H.code_service=C.code_service);
6. Pour chaque service du bâtiment "A" de l’hôpital, quel est le nombre
moyen de lits
Les patients soignées par des cardiologues, vue définie par
SELECT [Link], AVG(nb_lits) FROM service S, chambre C
WHERE batiment='A'AND [Link]=code_service GROUP BY [Link]; 2 Tuples. le schéma suivant: PatientCardio(NomMed, NomPat,
PrenomPat, Tel,Adresse,Mutuelle)
7. Pour chaque malade soigné par plus de 3 médecins donner le nombre
total de ses médecins ainsi que le nombre correspondant de spécialités CREATE VIEW PatientsCardio (Nom_Med, Nom_Pat,
Prenom_Pat, Tel, Adresse, Mutuelle)
médicales concernées.
AS SELECT [Link], [Link], [Link], [Link],
SELECT [Link], [Link], COUNT(S.no_docteur), [Link],[Link]
COUNT (DISTINCT [Link]) FROM Malade M, soigne s, docteur D FROM employe E, malade M,docteur D,soigne S
WHERE S.no_docteur= [Link] AND S.no_malade= [Link] GROUP B WHERE [Link]= [Link] AND
Y [Link] HAVING COUNT (s.no_docteur)>3 ; 8 tuples [Link]='Cardiologue'
AND [Link]= S.no_malade
8. Pour chaque service quel est le rapport entre le nombre AND [Link]=S.no_docteur;
d’infirmier(ères) affecté(es) au service et le nombre de malades
hospitalisés dans le service ?
Nombre de malades hospitalisés par service .
Cardiologie 0.8889
SERVICE_SOIGNE(NomService, Directeur, NbSoigné)
Chirurgie generale 0.6500
Reanimation et Traumatologie 0.7000 CREATE VIEW Service_Soigne ( Nom_Service,
SELECT [Link], COUNT (DISTINCT [Link])::float/COUNT (DISTINCT H.no_ Directeur, Nb_Soigné)
malade) AS SELECT [Link], directeur, Count(H.no_malade)
FROM service S, hospitalisation H, infirmier I FROM Service S, Hospitalisation H
WHERE [Link]=I.code_service and H.code_service=[Link] WHERE Code_service= [Link]
GROUP BY [Link],directeur;
GROUP BY [Link];
9. Prénom et nom des docteurs ayant au moins un malade hospitalisé. Utilisation Recursive de vues. Nombre de patients hospitalisés
SELECT [Link], [Link] from employe E, docteur D, soigne S, hospitalisat par médecin. Vous devez utiliser la vue définie par la question
ion H 1. MED-SOIGNE(Nom, NbPatient)
WHERE [Link]=[Link] and H.no_malade=S.no_malade and S.no_do
CREATE VIEW MED_SOIGNE (Nom, Nb_patient)
cteur=[Link] AS SELECT Nom_med, Count(Distinct Nom_pat)
GROUP BY [Link], [Link] HAVING COUNT( H.no_malade)>=1 ;26 Tuples FROM PatientsCardio, hospitalisation H, malade M
WHERE Nom_pat=[Link]
10. Prénom et nom des docteurs n’ayant aucun malade hospitalisé. AND [Link]= H.no_malade
SELECT [Link], [Link] GROUP BY Nom_med;
FROM employe E, docteur D
WHERE [Link]=[Link] AND
Utilisation Simple. Donner les noms des patients vues par le Dr.
NOT EXISTS (SELECT * FROM soigne S, hospitalisation H
Albert.
WHERE H.no_malade=S.no_malade and S.no_docteur=[Link]);6 Tuples
SELECT P.Nom_Pat
11. Pour chaque docteur, retrouver le nombre de ses malades hospitalisés, FROM PatientsCardio P
y compris ceux dont le nombre est 0. WHERE P.Nom_Med='Albert';
SELECT [Link], [Link], COUNT( H.no_malade) Malade_Hospitalisés
FROM employe E, hospitalisation H, soigne S Utilisation d’une vue aggregat. Donner le nombre de malades
WHERE [Link]= S.no_docteur AND H.no_malade= S.no_malade soignés en "pédiatrie".
GROUP BY [Link], [Link]
UNION SELECT nom_service, PS.Nb_soigné
SELECT DISTINCT [Link], [Link], 0 FROM SERVICE_SOIGNE PS
WHERE PS.nom_service='Chirurgie generale';
FROM employe E, docteur D
WHERE [Link]=[Link]
AND [Link] NOT IN (SELECT S.no_docteur FROM soigne S,hospitalisatio
nH
WHERE S.no_malade=H.no_malade);
*****----------------2eme--methode----------------*****
SELECT [Link], [Link], COUNT(*) Malades_hospitalilsés
FROM employe E, (docteur D LEFT JOIN ( soigne S JOIN hospitalisation H on
H.no_malade = S.no_malade)R
1
4°) Requete SQL
SELECT [Link], [Link], [Link]é
FROM Satation S, Activité A WHERE [Link]=’Alpes’ AND
S.N°station=A.N°Station;
5°).
Station Activité
/
Région= ‘Alpes »
N°Station=N°Station
Nom / Altitude / Nom_Activité
6°) SELECT [Link], [Link] FROM Hotel H, Altitude A
WHERE A.N°Station NOT IN (Select A.N° station FROM Activité A WHERE
[Link]é=’Snowboard”)
AND [Link]é=’SKI’ AND A.N°station = H.N°Station;
7°) SELECT [Link]
FROM Hotel H, Station S WHERE H.N°station= S.N°station
AND [Link] <(SELECT AVG ([Link]) FORM Station S);
8°) SELECT Act_NomActivité, COUNT (DISTINCT H.N°Hotel), Act
Hotel : 1°) Nom_Station
FROM ACT_STA Act, Hotel H, Station S
Station Hotel
1-n 1-1 WHERE [Link]= S.nom_stat AND S.N°Station=H.N°station
1-n
E
*nom station n
*nom hotel GROUP BY Act_NomActivité HAVING COUNT (DISTINCT H.N°Hotel) >=5 ;
t
o
*Altitude u
*Adresse hot/*Tel *1----------**********-------------------*****
*Région *Categor/*nbr chambr CREATE TABLE Medecin (Nom VARCHAR NOT NULL, Specialite VARCHAR
NOT NULL, Nombre_pat INTEGER);
1-n INSERT INTO Medecin VALUES ('House', 'Pediatrie', 38); ----- Insertion
P Tuple par tuple
r D
é INSERT INTO Medecin (Nom,Specialite,Nombre_pat)
1-1 VALUES ('Baggio','Cardiologie',12), ('Batistuta','Psychiatrie',25),
('Platini','Chirurgie géneral',10),; -Insert de plusiers tuples en m^m temps.
Activité Prix_Chambre
Insert into Medecin
1-1
SELECT [Link],[Link], count (Distinct H.no_malade)
*nom Activité *Prix / *type chambre
from docteur D, employe E, hospitalisation H, Malade M, Soigne SO
*Typ client /* Saison WHERE [Link]=H.no_malade and SO.no_malade=H.no_malade
AND SO.no_docteur=[Link]
AND [Link]=[Link]
Group by [Link],[Link];
2°) CREATE TABLE HOTEL (Nom_Hot VARCHAR NOT NULL,
UPDATE medecin
Adrese_Hot VARCHAR NOT NULL, Tel VARCHAR NOT NULL
SET Nombre_pat=Nombre_pat-10
Categorie VARCHAR NOT NULL, Nb_Chambre INTEGER) WHERE Nombre_pat>10
AND Specialite='Cardiologie';
CHECK (Nb_chambre <=100) CHECK ( Categorie =’*’ or ‘**’ or ‘***’);
3°) schema physique on rajoute “PRIX_chambre »up.