EMSI – Rabat
TP 1 : Le langage SQL
Considérons le schéma relationnel suivant :
III) Interrogation de la base de données
Ecrire les requêtes SQL qui permettent de lister :
1) Tous les patients.
select * from pat;
2) Le nom et l’âge des patients de Rabat.
select nompat, agepat from pat where villepat='Rabat';
3) Les patients de Casablanca dont le nom est ‘Touzani’.
select * from pat where villepat='Casablanca' and nompat='Touzani';
4) Les patients dont le nom est soit ‘Naciri’ soit ‘Ansari’.
select * from pat where nompat in ('Naciri','Ansari');
5) Les noms des patients dont le nom contient par ’d'.
select * from pat where nompat like '%d%';
6) Les ordonnances de 2021 classées dans l’ordre décroissant des numéros
d’ordonnance.
1
select * from ord where dateord between '01/01/2021' and '31/12/2021' order by
numord desc;
7) Les RDVs qui n’ont pas de motif.
select * from RDV where motif is null;
8) Les noms des patients ayant pris au moins un médicament de prix supérieur à 80DH.
Select Distinct [Link] from PAT P, ORD O, DET D, MED M where [Link]=[Link]
and [Link]=[Link] and [Link]=[Link] and Prix>=80;
9) Les noms des patients n’ayant pas pris un médicament de prix supérieur à 80 DH.
select Distinct [Link] from PAT P where [Link] NOT IN (Select [Link] From
ORD O, DET D, MED M where [Link]=[Link] and [Link]=[Link] and
Prix>=80);
10) Le nombre de RDV par docteur en 2021.
select NumDoc, Count(*) "Nb RDV 2021" from RDV Where DateRDV Between '01-JAN-
2021' and '31-DEC-2021' Group by numDoc;
or
select NumDoc, Count(*) "Nb RDV 2021" from RDV WHERE EXTRACT(YEAR FROM
DateRDV) = 2021 Group by numDoc;
11) Les numéros d’ordonnances et leur montant total.
select numORD, SUM(Qte*Prix) "Montant total" from DET D, MED M where
[Link]=[Link] Group by [Link];
12) Les patients sans RDV en 2021
select * from PAT P where [Link] NOT IN (Select [Link] from RDV R Where
[Link] Between '01/01/2021' and '31/12/2021');
13) Les patients ayant eu des RDV avec tous les docteurs
Select * from PAT P Where (select COUNT(Distinct [Link]) from RDV R Where
[Link]=[Link]) = (Select COUNT(*) From DOC);
14) Les docteurs ayant eu des RDV avec tous les patients
Select * from DOC D Where (select COUNT(Distinct [Link]) from RDV R Where
[Link]=[Link]) = (Select COUNT(*) From PAT);
15) Les patients ayant eu des RDV avec les mêmes docteurs que le patient N°10.
Select * from PAT P
Where NOT EXISTS((Select Distinct [Link] From RDV R1 Where
[Link]=[Link]) MINUS (Select Distinct [Link] From RDV R2 Where
[Link]=10))
AND NOT EXISTS ((Select Distinct [Link] From RDV R3 Where [Link]=10)
MINUS (Select Distinct [Link] From RDV R4 Where [Link]=[Link]))
And [Link]<>10;
16) Les médicaments les plus prescrits en 2021.
Select [Link] From (Select [Link], COUNT(*) Nb from ORD O1, DET D1
where [Link]=[Link] and [Link] Between ‘01/01/2021’ and
‘31/12/2021’ group by [Link]) T1 Where [Link] = (select MAX(T2.Nb2) from
(Select [Link], COUNT(*) Nb2 from ORD O2, DET D2 where
[Link]=[Link] and [Link] Between ‘01/01/2021’ and ‘31/12/2021’
group by [Link]) T2) ;