Anteprima
Vedrai una selezione di 20 pagine su 95
Basi di dati in medicina Pag. 1 Basi di dati in medicina Pag. 2
Anteprima di 20 pagg. su 95.
Scarica il documento per vederlo tutto.
Basi di dati in medicina Pag. 6
Anteprima di 20 pagg. su 95.
Scarica il documento per vederlo tutto.
Basi di dati in medicina Pag. 11
Anteprima di 20 pagg. su 95.
Scarica il documento per vederlo tutto.
Basi di dati in medicina Pag. 16
Anteprima di 20 pagg. su 95.
Scarica il documento per vederlo tutto.
Basi di dati in medicina Pag. 21
Anteprima di 20 pagg. su 95.
Scarica il documento per vederlo tutto.
Basi di dati in medicina Pag. 26
Anteprima di 20 pagg. su 95.
Scarica il documento per vederlo tutto.
Basi di dati in medicina Pag. 31
Anteprima di 20 pagg. su 95.
Scarica il documento per vederlo tutto.
Basi di dati in medicina Pag. 36
Anteprima di 20 pagg. su 95.
Scarica il documento per vederlo tutto.
Basi di dati in medicina Pag. 41
Anteprima di 20 pagg. su 95.
Scarica il documento per vederlo tutto.
Basi di dati in medicina Pag. 46
Anteprima di 20 pagg. su 95.
Scarica il documento per vederlo tutto.
Basi di dati in medicina Pag. 51
Anteprima di 20 pagg. su 95.
Scarica il documento per vederlo tutto.
Basi di dati in medicina Pag. 56
Anteprima di 20 pagg. su 95.
Scarica il documento per vederlo tutto.
Basi di dati in medicina Pag. 61
Anteprima di 20 pagg. su 95.
Scarica il documento per vederlo tutto.
Basi di dati in medicina Pag. 66
Anteprima di 20 pagg. su 95.
Scarica il documento per vederlo tutto.
Basi di dati in medicina Pag. 71
Anteprima di 20 pagg. su 95.
Scarica il documento per vederlo tutto.
Basi di dati in medicina Pag. 76
Anteprima di 20 pagg. su 95.
Scarica il documento per vederlo tutto.
Basi di dati in medicina Pag. 81
Anteprima di 20 pagg. su 95.
Scarica il documento per vederlo tutto.
Basi di dati in medicina Pag. 86
Anteprima di 20 pagg. su 95.
Scarica il documento per vederlo tutto.
Basi di dati in medicina Pag. 91
1 su 95
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

SELECT V.DATA, “+AP.COGNOME AS PAZIENTE,

AP.NOME+”

AM.NOME+” “+AM.COGNOME AS MEDICO

FROM ANAGRAFICA AP, ANAGRAFICA AM, VISITE V

WHERE V.CF = AP.CF AND V.CFM = AM.CF

➔ Tutte le volte che devo prendere da una stessa tabella attributi che vado a mettere in colonne

diverse della tabella risultante devo raddoppiare la tabella di partenza

DECODIFICA DELLE INFORMAZIONI

• Esempio: voglio estrarre le informazioni decodificate (al posto del codice fiscale voglio ottenere

nome e cognome, al posto di codice professione voglio ottenere la professione), voglio vedere i

dati della tabella esercita_prof decodificati

➢ Tabella esercita_prof

CODICE_FISC CODICE_PROF DATA_INIZIO DATA_FINE

CF1 2.4.1.1 01.11.2019

CF1 1.3 03.03.1990 04.03.1995

CF2 2.4.1.4 01.01.2022 10.01.2022

➢ Oltre alla tabella esercita_prof devo prendere le tabelle con i dati decodificati, ovvero generale e

professioni

➢ Tabella generale

CODICE_FISC COGNOME NOME NASCITA SESSO CITTÀ TELEFONO

➢ Tabella professioni

CODICE DESCRIZIONE RETRIBUZIONE_BASE

➔ SELECT EP.CODICE_FISC,

G.COGNOME,

G.NOME,

P.DESCRIZIONE,

EP.DATA_INIZIO,

EP.DATA_FINE

FROM ESERCITA_PROF EP, GENERALE G, PROFESSIONI P

WHERE EP.CODICE_FISC = G.CODICE_FISC

AND EP.CODICE_FISC = P.CODICE_FISC

ORDER BY EP.CODICE_FISC, EP.DATA_INIZIO

▪ Posso aggiungere gli alias AS e UCASE per migliorare la tabella risultante

• Esempio: mostrare i dati della tabella ricoveri con le loro decodifiche, ovvero id ricovero,

codice fiscale del paziente, nome e cognome del paziente, nome del reparto, data ingresso e data

uscita, descrizione della diagnosi ricovero, descrizione del DRG, codice fiscale del medico,

nome e cognome del medico

➢ Tabella ricoveri:

ID CODICE_FISC REPARTO DATA_I DATA_U DIAGNOSI_RIC DRG CF_MED

➔ SELECT R.ID_RICOVERO, R.CODICE_FISC, GP.NOME, GP.COGNOME, REP.NOME,

R.DATA_INGRESSO, R.DATA_USCITA, I.DESCRIZIONE, D.DESCRIZIONE, R.CF_MED,

GM.NOME, GM.COGNOME

FROM RICOVERI R, GENERALE GP, GENERALE GM, ICD9 I, DRG D, REPART REP

WHERE R.CODICE_FISC = GP.CODICE_FISC AND

R.DRG = D.CODICE AND

R.DIAGNOSI_RICOVERO = I.CODICE AND

R.CF_MED = GM.CF_MED AND

R.REPARTO = REP.CODICE

• Esempio: descrivere le prescrizioni mettendo il paziente a cui si riferisce, il nome del farmaco,

la data in cui è stata fatta la prescrizione

➢ Tabelle prescrizione

ID_PRESC ID_VISITA COD_FARMACO DATA_I DATA_F DOSE_GIORNO

➔ SELECT G.CODICE_FISC, G.NOME, G.COGNOME, F.DESCRIZIONE, V.DATA

FROM PRESCRIZIONE P, VISITE V, GENERALE G, FARMACI F

WHERE P.ID_VISITA = V.ID_VISITA AND

P.COD_FARMACO = F.CODICE AND

V.CF_PAZIENTE = G.CODICE_FISC

▪ Nella tabella farmaci il codice farmaco non è un numero, ma una stringa di testo che ha uno

spazientì davanti quindi devo andare a modificare il codice farmaco nella tabella prescrizione

andando ad aggiungere lo spazio

➔ Istruzione per togliere/ignorare gli spazi prima e dopo di una stringa: trim(attributo)

➔ Posso andare a modificare la query aggiungendo nella WHERE

AND TRIM(P.COD_FARMACO) = TRIM(F.CODICE)

• Esempio: ad ogni prescrizione che il medico fa ci si aspetta delle somministrazioni del farmaco

da parte degli infermieri; descrivere le somministrazioni mettendo il paziente a cui è stato dato il

farmaco, la data della prescrizione, la data della somministrazione, il farmaco somministrato, il

dosaggio e l’infermiere che ha effettuato la somministrazione

➢ Tabella somministrazione

ID_SOM ID_PRESC DATA_ORA DOSE_SOM EVENTUALI_PROB CF_INF

01.01.2000

1 1 5 - CF15

09:30:00

01.01.2000

2 1 5 Nausea CF13

20:00:00

02.01.2000 Il paziente rifiuta la

3 1 3 CF15

08:00:00 dose intera

03.01.2000

4 2 25 - CF15

12:00:00

▪ Attenzione: per riempire la tabella somministrazione fare riferimento alla tabella prescrizione

➔ SELECT GP.CODICE_FISC, GP.NOME, GP.COGNOME, S.DATAORA, F.DESCRIZIONE,

S.DOSESOMMINISTRATA, GI.CODICE_FISC, GI.NOME, GI.COGNOME

FROM GENERALE GP, GENERALE GI, SOMMINISTRAZIONE S, FARMACI F,

PRESCRIZIONE P, VISITE V

WHERE S.CF_INFERMIERE = GI.CODICE_FISC AND

S.ID_PRESC =VAL(P.ID_PRESC) AND

P.ID_VISITA = V.ID_VISITA AND

GP.CODICE-FISC = V.CF_PAZIENTE AND

P.COD_FARMACO = F.CODICE

▪ non corrispondente nell’espressione”

Error:“Tipo = in una qualche condizione, in una delle

uguaglianze si stanno confrontando due valori di tipo diverso

▪ L’ID della prescrizione nella tabella prescrizione è un carattere quindi uso l’istruzione val per

trasformarla in un numero SUBQUERY

• e significa “sta in”

Operatore in: sostituisce una serie di or

➢ Esempio: X IN (1,2,3,4) questa espressione equivale a scrivere X=1 OR X=2 OR X=3 OR X=4

▪ L’espressione significa “x sta in insieme”

➢ Esempio:

SELECT * FROM GENERALE

WHERE COGNOME IN (“VERDI”, “BIANCHI”)

▪ Questa query prende solo le righe della tabella generale con i pazienti che hanno cognome verdi

e Bianchi

• “non sta in”

Operatore not in: significa

➢ Esempio:

SELECT * FROM GENERALE

(“VERDI”, “BIANCHI”)

WHERE COGNOME NOT IN

Questa query prende tutte le righe della tabella generale escludendo i pazienti che hanno

cognome Verdi e Bianchi

• SUBQUERY = si tratta di una query all’interno di un’altra query che è al query principale e puó

essere usata per imporre delle condizioni anche su altre tabelle, altre rispetto alla from della

query principale

➢ Le subquery vengono usate nella where

➢ Quando si usano le query, anche se nella from abbiamo solo una tabella, è sempre meglio nella

per la tabella (vogliamo indicare a quale tabella quell’attribuzione si

select usare gli alias

riferisce)

➢ La subquery va sempre messa da parentesi

➢ Quando é possibile bisogna evitare le subquery perché dal punto di vista del calcolo sono più

onerose rispetto a una query unica: quando è possibile devo usare la join

➢ Quando dentro la subquery si usano attributi di una tabella presente nella query principale si

dice che la subquery e la query principale sono CORRELATE TRA LORO

➢ Nel momento in cui assegno l’alias a una tabella nella query principale, i suoi attributi possono

essere usati anche nella subquery

• Esempio: trovare le persone (ovvero CF, nome, cognome) che non sono mai state visitate

➢ Voglio trovare tutte le persone che sono presenti nella tabella generale ma che non compaiono

nella tabella visite in cui l’attributo che si riferisce alla persona è il codice fiscale

➢ Faccio una query principale in cui prendo CF, nome e cognome dalla tabella generale

➢ Faccio una subquery per imporre la condizione che il codice fiscale del paziente (in generale)

non si trovi nella tabella visite

SELECT G.CODICE_FISC, G.NOME, G.COGNOME

FROM GENERALE G

WHERE G.CODICE_FISC NOT IN (SELECT V.CF_PAZIENTE FROM VISITE V WHERE

V.CF_PAZIENTE IS NOT NULL)

▪ non funziona quindi devo aggiungere e un’altra

Attenzione: se ci sono dei valori nulli la not in

condizione

➢ Questo esercizio non è risolvibile con la join perché con la join posso solo eguagliare i codici

fiscali

• Esempio: trovare le persone che sono state visitate (prova questa)

SELECT G.CODICE_FISC, G.NOME, G.COGNOME

FROM GENERALE G

WHERE G.CODICE_FISC IN (SELECT V.CF_PAZIENTE FROM VISITE V)

➢ Posso risolvere il problema senza usare la subquery

SELECT DISTINCT G.CODICE_FISC, G.NOME, G.COGNOME

FROM GENERALE G, VISITE V

WHERE G.CODICE_FISC = V.CF_PAZIENTE

▪ Attenzione: siccome un paziente può fare più visite, questo compare tante volte (nel prodotto

cartesiano la stessa riga di un paziente nella tabella generale viene appaiata più volte con le

righe del paziente nella tabella visite). Per risolvere il problema posso usare distinct che elimina

i doppioni dal risultato

• Esempio: trovare le persone che sono state ricoverate ma non hanno subito un intervento

chirurgico

➢ Tabella interventi

ID_INTERVENTO CODICE_FISC DATA_INT CODICE_INT CF_CHIRURGO

1 CF1 14.05.2000 98.13 CF10

2 CF1 02.04.2022 98.12 CF10

3 CF2 05.12.2001 98.14 CF10

➢ Il testo dell’esercizio è ambiguo perché potrebbe essere interpretata in due modi:

1. Trovare le persone che sono state ricoverata ma non hanno mai subito un intervento chirurgico

2. Trovare le perone che, durante un ricovero, non hanno mai subito un intervento

➢ Richieste dell’esercizio:

1. Per la domanda 1 voglio CF, nome e cognome

2. Per la domanda 2 voglio CF, nome, cognome e data del ricovero senza intervento (per quella

stessa persona può esserci anche un ricovero in cui è stata operata, ma noi prendiamo solo quelli

in cui non è stata operata)

➢ Risoluzione dell’esercizio:

1. Per la domanda 1 possiamo fare una join in cui cerchiamo le persone che sono in generale e in

ricoveri e poi facciamo un and specificando che il codice fiscale del paziente non deve trovarsi

nella tabella interventi

SELECT DISTINCT G.CODICE_FISC, G.NOME, G.COGNOME

FROM GENERALE G, RICOVERI R

WHERE G.CODICE_FISC AND R.CODICE_FISC AND G.CODICE_FISC NOT IN

(SELECT I.CODICE_FISC

FROM INTERVENTI I

WHERE I.CODICE_FISC IS NOT NULL)

▪ Con la prima condizione della where ho preso le persone che sono state ricoverate, quindi il cui

codice fiscale si torva sia nella tabella generale sia nella tabella ricoveri

▪ messa dopo l’and

Con la seconda condizione della where prendo i pazienti che non hanno mai

subito un intervento, quindi il cui codice fiscale non si trova nella tabella interventi

▪ Meglio mettere anche la distinct perché una persona può essere ricoverata tante volte

▪ Attenzione: se ho la not in devo aggiungere la condizione where codice_fisc is non null

2. Per la domanda 2 voglio i pazienti che hanno subito un ricovero e dentro a quel ricovero non

hanno subito l’intervento: devo quindi escludere i pazienti la cui data dell’intervento, presente

nella tabella interventi, si trova tra la data di ingresso e la data di uscita, presenti invece nella

tabella ricoveri

SELECT G.CODICE_FISC, G.NOME, G.COGNOME, R.DATA_INGRESSO AS

RICOVERO_SENZA_INTERVENTO

FROM GENERALE G, RICOVERI R

WHERE G.CODICE_FISC = R.CODICE_FISC AND G.CODICE_FISC NOT IN

(SELECT I.CODICE_FISC

FROM INTERVENTI I

WHERE I.DATA_INTERVENTO BETWEEN R.DATA_INGRESSO AND R.DATA_USCITA)

▪ La subquery in questo caso è una subquery correlata perché usa attributi definiti nella query

principale

▪ Dato che nella query principale ho definito la tabella ricoveri con l’alias R i suoi attributi li ho

potuti usare anche nella subquery

• Esempio: trovare i pazienti che durante le vis

Dettagli
Publisher
A.A. 2022-2023
95 pagine
SSD Ingegneria industriale e dell'informazione ING-INF/06 Bioingegneria elettronica e informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher srbs02 di informazioni apprese con la frequenza delle lezioni di Basi di dati in medicina e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Pavia o del prof Quaglini Silvana.