Professional Documents
Culture Documents
Departament d’Ensenyament
Institut Obert de Catalunya
Executeu el guió hospital.sql que crea una base de dades per a gestionar un centre hospitalari i que
trobareu a l'aula. Dissenyeu una consulta SQL per cadascuna de les següents preguntes. Enganxeu el codi
SQL que heu utilitzat en cada cas en l'espai destinat a la resposta.
I el model relacional:
Versió: 02 2252M02_RPS3_Solucio
Formació professional
AREA (numArea, nomArea)
PROVA (codProv, descr)
PLANTA (numPl, numHab)
LLIT (numPl, numLlit)
ON {numPl} REFERENCIA PLANTA
PACIENT (dni, nom, cognoms, dataAlta, numP, numL)
ON {numP,numL} REFERENCIA LLIT (numPl,numLlit)
METGE (codMetge, nom, cognoms, sou, numArea)
ON {numArea} REFERENCIA AREA
INFERMER (codInf, nom, cognoms, numArea)
ON {numArea} REFERENCIA AREA
VISITA (dniPac, codMetge, data, diagnostic)
ON {dniPac} REFERENCIA PACIENT(dni)
i {codMetge} REFERENCIA METGE
REALITZACIO (codProv, dniPac, data, resultat)
ON {codProv} REFERENCIA PROVA
i {dniPac} REFERENCIA PACIENT(dni)
SELECT codMetge, nom, cognoms, sou, numArea FROM metge;
SELECT * FROM metge;
2. Comencem amb el WHERE: Obteniu un llistat de tots els metges assignats a l'àrea 1.
SELECT * FROM metge WHERE numArea=1;
Versió: 02 2252M02_RPS3_Solucio
Formació professional
SELECT * FROM pacient WHERE numP=2;
4. Expressió més complexa al WHERE: Obteniu les dades del pacient al qual se li hagi assignat el llit
1 de la planta 1.
SELECT * FROM pacient WHERE numP=1 AND numL=1;
5. Utilització d'expressions en el select: Obteniu un llistat dels metges (nom, cognoms i sou). El sou
emmagatzemat és l'anual i ha de sortir el mensual (dividit per 14 ja que hi ha dues pagues extres).
SELECT nom, cognoms, sou/14 FROM metge;
Versió: 02 2252M02_RPS3_Solucio
Formació professional
6. Àlies a les columnes: Obteniu un llistat dels metges (nom, cognoms i sou) mostrant el sou
mensual (dividit per 14) i definit un àlies per la columna sou.
SELECT nom, cognoms, sou/14 AS souMensual FROM metge;
7. Ordenació de dades: Obteniu un llistat de tots els pacients (nom, cognom i dataAlta) assignats a la
planta 2 i ordenats per nom.
SELECT nom, cognoms, dataAlta FROM pacient WHERE numP=2 ORDER BY nom;
Versió: 02 2252M02_RPS3_Solucio
Formació professional
8. Predicat per a cadenes de caràcters i patrons: Obteniu un llistat de les pacients (totes les dades)
amb el nom començant per 'A'.
SELECT * FROM pacient WHERE nom LIKE 'A%';
9. Els dos caràcters fonamentals dels patrons: Obteniu un llistat dels pacients (totes les dades)
amb el nom que tingui com a segona lletra la 'a'.
SELECT * FROM pacient WHERE nom LIKE '_a%';
10. Altres predicats: Obteniu un llistat de les visites realitzades entre l'1 de març del 2014 i el 10 de
març del 2014 (ambdós inclosos).
SELECT * FROM visita WHERE data BETWEEN '20140301' AND '20140310';
SELECT * FROM visita WHERE data>='20140301' AND data<='20140310';
Versió: 02 2252M02_RPS3_Solucio
Formació professional
11. Altres predicats: Obteniu un llistat dels metges (totes les dades) no assignats a cap àrea.
SELECT * FROM metge WHERE numArea IS NULL;
12. Altres predicats: Obteniu un llistat dels metges (totes les dades) assignats a les àrees 1, 3 o 5.
SELECT * FROM metge WHERE numArea in (1,3,5);
SELECT * FROM metge WHERE numArea=1 OR numArea=3 OR numArea=5;
1. Funcions incorporades a Mysql (apartat 2.1): Obteniu un llistat dels metges (nom, cognoms i
sou). El sou emmagatzemat és l'anual i ha de sortir el mensual arrodonit a dos decimals (dividit per
14 ja que hi ha dues pagues extres).
SELECT nom, cognoms, ROUND(sou/14,0) AS souMensual FROM metge;
SELECT nom, cognoms, ROUND(sou/14) AS souMensual FROM metge;
Versió: 02 2252M02_RPS3_Solucio
Formació professional
2. Funcions incorporades a Mysql (apartat 2.1): Obteniu un llistat dels metges (nom i cognom) on
aparegui el nom complet com cognom, nom tal com surt al resultat i en majúscules.
SELECT UPPER(CONCAT(cognoms,',',nom)) AS Cognoms_Nom FROM metge;
3. Funcions incorporades a Mysql (apartat 2.1): Obteniu un llistat de les visites programades en
dilluns. La consulta ha de mostrar també que són en Dilluns o bé Monday (més fàcil).
SELECT *, IF (DAYNAME(data) LIKE 'Monday','Dilluns', NULL) AS Dia_Setmana FROM
visita WHERE DAYNAME(data) LIKE 'Monday';
4. Funcions incorporades a Mysql (apartat 2.1): Obteniu un llistat de les visites de l'1 al 15 d'abril
de 2014 ambdós inclosos on la data ha de sortir tal com s'indica al resultat.
Versió: 02 2252M02_RPS3_Solucio
Formació professional
5. Ordenació de files (apartat 2.2): Obteniu un llistat dels pacients (cognom, nom) assignats a la
planta 2 ordenada primer per cognom i després per nom en ordre descendent.
SELECT cognoms, nom FROM pacient WHERE numP=2 ORDER BY cognoms DESC, nom DESC;
6. Excloure files repetides (apartat 2.3): Obteniu un llistat de les àrees (numArea) on hi ha infermers
assignats.
SELECT DISTINCT numArea FROM infermer;
7. Agrupament de files (apartat 2.4): Obteniu un llistat de les àrees amb la quantitat de metges a
cada àrea. Atenció que hi ha un metge que no està assignat a cap àrea.
Versió: 02 2252M02_RPS3_Solucio
Formació professional
8. Agrupament de files (apartat 2.4): Obteniu un llistat de les plantes amb la quantitat de pacients a
cada planta.
SELECT numP, COUNT(*) as QuantitatPacients FROM pacient GROUP BY numP;
9. Agrupament de files (apartat 2.4): Obteniu un llistat de les àrees on aparegui el sou màxim, el sou
mínim, el sou mitjà i la suma dels sous dels metges assignats a cada àrea. Atenció que hi ha un
metge que no està assignat a cap àrea.
10. Agrupament de files (apartat 2.4): Obteniu un llistat de les plantes (número planta i nombre
pacients) on hi hagi més de 4 pacients.
SELECT numP, COUNT(*) FROM pacient GROUP BY numP HAVING COUNT(*)>4;
Versió: 02 2252M02_RPS3_Solucio
Formació professional
11. Unió, intersecció i diferència de sentències select (apartat 2.5): Obteniu un llistat (codi, nom i
cognoms) de tot el personal de l'hospital (metges i infermers).
SELECT codMetge, nom, cognoms FROM metge
UNION
SELECT codInf, nom, cognoms FROM infermer;
12. Combinacions entre taules (apartat 2.6). Obteniu un llistat dels metges amb la informació de
l'àrea on pertanyen.
SELECT m.*, a.nomArea FROM metge m, area a WHERE m.numArea=a.numArea;
SELECT m.*, a.nomArea FROM metge m JOIN area a USING (numArea);
13. Combinacions entre taules (apartat 2.6). Obteniu un llistat de les visites afegint el nom i cognoms
del pacient realitzades pel metge Carles Vila ordenada per cognoms i nom.
Versió: 02 2252M02_RPS3_Solucio
Formació professional
SELECT p.nom, p.cognoms, v.data, v.diagnostic
FROM pacient p, visita v, metge m
WHERE p.dni=v.dniPac AND v.codMetge=m.codMetge
AND m.nom LIKE 'Carles' AND m.cognoms LIKE 'Vila'
ORDER BY p.cognoms, p.nom;
SELECT p.nom, p.cognoms, v.data, v.diagnostic
FROM pacient p JOIN visita v ON (p.dni=v.dniPac) JOIN metge m USING (codMetge)
WHERE m.nom LIKE 'Carles' AND m.cognoms LIKE 'Vila'
ORDER BY p.cognoms, p.nom;
14. Combinacions entre taules (apartat 2.6). Obteniu un llistat dels metges amb la informació de
l'àrea on treballen. La consulta ha de mostrar tots els metges encara que no estiguin assignats a
cap àrea.
SELECT m.*, a.nomArea
FROM metge m LEFT JOIN area a USING (numArea);
SELECT m.*, a.nomArea
FROM area a RIGHT JOIN metge m USING (numArea);
15. Subconsultes (apartat 2.7) Obteniu un llistat dels metges que cobren més que el Carles Vila.
SELECT * FROM metge WHERE sou > (SELECT sou FROM metge WHERE nom LIKE 'Carles'
AND cognoms LIKE 'Vila');
Versió: 02 2252M02_RPS3_Solucio
Formació professional
16. Subconsultes (apartat 2.7) Obteniu un llistat dels metges que cobren més que la mitjana de
l'hospital.
SELECT * FROM metge WHERE sou > (SELECT AVG(sou) FROM metge);
Versió: 02 2252M02_RPS3_Solucio