CORSO di INFORMATICA e ARCHIVIAZIONE



Похожие документы
ESAME di INFORMATICA e ARCHIVIAZIONE

UNIVERSITÀ DEGLI STUDI DI UDINE Facoltà di Medicina e Chirurgia CORSO DI LAUREA IN TECNICHE DI RADIOLOGIA MEDICA PER IMMAGINI E RADIOTERAPIA ESAME

ESAME di INFORMATICA e ARCHIVIAZIONE

ESAME di INFORMATICA e ARCHIVIAZIONE

Basi di Dati Corso di Laura in Informatica Umanistica

Laboratorio di Basi di Dati Esercizio 8.4/9.1

GESTIONE DEI REPARTI DI UN OSPEDALE

Verifica di Informatica. Cognome e Nome: Classe 5ª Ci, Data

Basi di dati: appello 14/07/06

Concettuale. Giuseppe Amato

Esempio di database relazionale con l utilizzo del prodotto MySQL

Basi di Dati 1 Prof. L. Tanca e F. A. Schreiber APPELLO DEL 1 OTTOBRE 2015 Tempo: 2h30m

Esame di Basi di Dati, SOLUZIONE APPELLO 09/06/2009

SISTEMI INFORMATIVI E TELEMEDICINA INFORMATICA MEDICA. 3. Panoramica su SQL Prof. Mauro Giacomini

ESERCIZI SQL. Esercizio 1

Basi di dati: appello 04/07/06

BASE DI DATI. Esercizi Progettazione concettuale Progettazione logica. Informatica Umanistica Università di Pisa

Corso di. Basi di Dati I. 11. Esercitazioni in SQL: Altri esercizi

Basi di dati 8 settembre 2015 Esame Compito A Tempo a disposizione: due ore. Libri chiusi.

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

Soluzione esercitazione 01

BASE DI DATI. Esercizio: Campionato corse Progettazione concettuale Progettazione logica. Informatica Umanistica Università di Pisa

Basi di Dati. Esercitazione Algebra Relazionale e SQL. Ing. Paolo Cappellari. 15 maggio 2006

Basi di Dati Corso di Laura in Informatica Umanistica

SQL e ACCESS. Modello relazionale PROBLEMA ENTITA STUDENTE

Dichiarazione degli schemi in SQL DDL 1

Manuale SQL. Manuale SQL - 1 -

ESERCITAZIONE: Fornitore-Fornisce-Articolo

Basi di dati I Prova di autovalutazione 30 ottobre 2014

PROGETTAZIONE DI DATABASE Linguaggio SQL

Basi di dati: appello 07/02/06

Errata Corrige dell edizione 2007

Fondamenti di Informatica 2

SQL quick reference. piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013)

Universita di Milano Bicocca Corso di Basi di dati 1 in elearning C. Batini 6. SQL DDL 6.2 Data Description Language - 2

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL

BASE DI DATI. Esercizio: FACEBOOK Progettazione concettuale Progettazione logica. Informatica Umanistica Università di Pisa

Interrogazioni in SQL

Esprimere in algebra (ottimizzata), calcolo relazionale la seguente query:

Structured Query Language

Basi di dati I 8 luglio 2016 Esame Compito A Tempo a disposizione: un ora e trenta minuti.

Basi di dati: appello 28/02/06

Sommario. Introduzione... 13

SQL - Structured Query Language

Progettazione logica

Interrogazioni nidificate

Транскрипт:

UNIVERSITÀ DEGLI STUDI DI UDINE Facoltà di Medicina e Chirurgia CORSO DI LAUREA IN TECNICHE DI RADIOLOGIA MEDICA PER IMMAGINI E RADIOTERAPIA CORSO di INFORMATICA e ARCHIVIAZIONE Caso di Studio - 2011 1 Progettazione di basi di dati Si vuole progettare il sistema informativo per la gestione dei dati di un centro di radiologia. Si vuole mantenere traccia delle informazioni relative ai diversi pazienti: codice fiscale, nome, cognome, data di nascita, indirizzo di residenza (via, numero, città, cap) e uno o più numeri di telefono. Per ogni paziente si vuole tener traccia delle informazioni relative alla tessera sanitaria con CRA, gruppo sanguigno, allergie di cui soffre (con codice e descrizione) e i vaccini somministrati con le date relative. Ad ogni visita radiologica, della quale si mantiene traccia della data e dell ora dell appuntamento, della sala in cui viene effettuata e del paziente a cui si riferiscono, viene associato un fascicolo (archivio cartaceo). Ogni fascicolo, a cui è associata anche la diagnosi, contiene diverse immagini radiologiche. Per ogni immagine si vuole mantenere traccia dell ora di esecuzione e della zona del corpo interessata. Per ogni sala si ha un numero identificativo e il macchinario in esso presente. Le immagini prodotte dal centro possono essere di due tipi: radiografia convenzionale (RX), tomografia computerizzata (TC). Nel caso di TC si mantiene traccia anche del tipo di esame (assiale, spirale o multistrato) e dell eventuale mezzo di contrasto (tipo e quantitativo). Progettazione concettuale Definire uno schema Entità-Relazioni che descriva il contenuto informativo del sistema, illustrando con chiarezza le eventuali assunzioni fatte. Lo schema dovrà essere completato con attributi ragionevoli per ciascuna entità (identificando le possibili chiavi) e relazione. Vanno specificati accuratamente i vincoli di cardinalità e partecipazione di ciascuna relazione. 1

Figura 1: Schema ER Progettazione logica Apportare le necessarie modifiche di ristrutturazione allo schema Entità-Relazioni prodotto e tradurlo nello schema logico relazionale. Ristrutturazione: 1. ridondanze: la relazione COMP OST A fra le entità CART ELLA e F ASCICOLO risulta essere una relazione ridondante in quanto la cartella non contiene altro che l insieme dei fascicoli associati allo stesso paziente a cui è associata 2. specializzazioni: supponendo che i dati relativi alle immagini siano acceduti indipendentemente dalla loro tipologia si decide di mantenere il genitore della specializzazione ed eliminare le figli, le cui proprietà vengono portate al padre con le dovute modifiche dei vincoli. 3. attributi composti: attributo indirizzo dell entità P AZIEN T E 4. attributi multivalore: attributo telef ono dell entità P AZIEN T E e attributo data della relazione SOMMINIST RAZIONE 2

Figura 2: Schema ER ristrutturato Lo schema ER ristrutturato è rappresentato in Figura 2. Inoltre, viste la presenza di diverse relazioni di tipo UNO A UNO in cui una delle due relazioni risulta avere nessuno a al più un attributo caratterizzante specifico risulta essere un passo immediato l accorpamento di diverse entità (passo che comunque potrebbe derivare dalla traduzione delle relazioni di tipo UNO A UNO): 1. entità P AZIENT E e CART ELLA; 2. entità P AZIENT E e T ESSERA SANIT ARIA ed 3. entità V ISIT A e F ASCICOLO; da cui è evidente la ridondanza della relazione composta. Inoltre, ritenendo che in ambito sanitario si faccia maggior riferimento al codice CRA che al codice fiscale, si opta per mantenere come identificatore primario l attributo CRA (i vincoli UNIQUE e NOT NULL dovranno comunque essere specificati sull attributo codicef iscale), da cui lo schema ER ristrutturato finale è rappresentato in Figura 3. Traduzione: 3

Figura 3: Schema ER ristrutturato 1. entità: P AZIEN T E(CRA, codicef iscale, nome, cognome, via, numero, citta, cap) codicefiscale, nome, cognome, via, numero, citta, cap NOT NULL codicefiscale UNIQUE ST AN ZA(numero, macchinario) V ISIT A(data, ora, stanza, diagnosi) IM M AGIN E(dataV, orav, stampa, ora, zonacorporea, tipot AC, tipocontrasto, quantitacontrasto) zonacorporea NOT NULL ALLERGIA(codice, nome, descrizione) nome NOT NULL 4

V ACCIN O(nome) T ELEF ON O(numero) DAT A(data) 2. relazioni UNO-A-MOLTI (estensione delle tabelle precedenti): relazione in: V ISIT A(data, ora, stanza, diagnosi) fk (stanza) references STANZA(numero) relazione fa: V ISIT A(data, ora, stanza, diagnosi, paziente) paziente NOT NULL fk (stanza) references STANZA(numero) fk (paziente) references PAZIENTE(CRA) relazione contiene: IM M AGIN E(dataV, orav, stanza, ora, zonacorporea, tipot AC, tipocontrasto, quantitacontrasto) zonacorporea NOT NULL fk (datav, orav, stanza) references VISITA(data, ora, stanza) 3. relazioni MOLTI-A-MOLTI (nuove tabelle): relazione hatel: ha(paziente, telef ono) fk (paziente) references PAZIENTE(CRA) fk (telefono) references TELEFONO(numero) relazione soffre: sof f re(paziente, allergia) fk (paziente) references PAZIENTE(CRA) fk (allergia) references ALLERGIA(codice) relazione somministrazione: somministrazione(paziente, vaccino, data) fk (paziente) references PAZIENTE(CRA) fk (vaccino) references VACCINO(nome) fk (data) references DATA(data) 5

2 Linguaggio SQL Creazione della base di dati Il sistema di gestione utilizzato è Oracle 10g nella versione Express Edition. Visti i domini messi a disposizione da tale sistema di gestione di basi di dati si è optato per considerare uniti gli attributi data ed ora con un dominio timestamp. CREATE TABLE PAZIENTE ( CRA CHAR( 6 ) PRIMARY KEY, cap CHAR( 5 ) NOT NULL, numero SMALLINT NOT NULL, c i t t a VARCHAR2( 2 0 ) NOT NULL, v i a VARCHAR2( 2 0 ) NOT NULL, c o d i c e F i s c a l e CHAR( 1 6 ) NOT NULL, cognome VARCHAR2( 2 0 ) NOT NULL, nome VARCHAR2( 2 0 ) NOT NULL, UNIQUE ( c o d i c e F i s c a l e ) CREATE TABLE ALLERGIA ( c o d i c e CHAR( 5 ), d e s c r i z i o n e VARCHAR2(200), PRIMARY KEY( c o d i c e ) ALTER TABLE ALLERGIA ADD nome VARCHAR2( 2 0 ) NOT NULL; CREATE TABLE VACCINO ( nome VARCHAR2( 1 0 ), PRIMARY KEY( nome) CREATE TABLE DATA ( data DATE, PRIMARY KEY( data ) CREATE TABLE TELEFONO ( t e l e f o n o VARCHAR2( 1 0 ), PRIMARY KEY( t e l e f o n o ) CREATE TABLE STANZA ( numero SMALLINT, macchinario VARCHAR2( 2 0 ), PRIMARY KEY( numero ) CREATE TABLE VISITA ( dataora TIMESTAMP, stanza SMALLINT, d i a g n o s i VARCHAR2(200), 6

p a z i e n t e CHAR( 6 ) NOT NULL, PRIMARY KEY( dataora, stanza ), FOREIGN KEY ( p a z i e n t e ) REFERENCES PAZIENTE, FOREIGN KEY ( stanza ) REFERENCES STANZA CREATE TABLE IMMAGINE ( dataorav TIMESTAMP, dataora TIMESTAMP, stanza SMALLINT, t i p o C o n t r a s t o VARCHAR2( 1 0 ), tipotc VARCHAR2( 1 0 ), quantitacontrasto NUMERIC( 5, 2 ), zonacorporea VARCHAR2( 1 0 ) NOT NULL, PRIMARY KEY( dataorav, dataora, stanza ), FOREIGN KEY ( dataorav, stanza ) REFERENCES VISITA CREATE TABLE s o f f r e ( a l l e r g i a CHAR( 5 ), p a z i e n t e CHAR( 6 ), PRIMARY KEY( a l l e r g i a, p a z i e n t e ), FOREIGN KEY ( a l l e r g i a ) REFERENCES ALLERGIA( c o d i c e ), FOREIGN KEY ( p a z i e n t e ) REFERENCES PAZIENTE(CRA) CREATE TABLE somministrazione ( data DATE, p a z i e n t e CHAR( 6 ), vaccino VARCHAR2( 1 0 ), PRIMARY KEY( data, paziente, vaccino ), FOREIGN KEY ( data ) REFERENCES DATA( data ), FOREIGN KEY ( p a z i e n t e ) REFERENCES PAZIENTE(CRA), FOREIGN KEY ( vaccino ) REFERENCES VACCINO(nome) CREATE TABLE hatel ( t e l e f o n o VARCHAR2( 1 0 ), p a z i e n t e CHAR( 6 ), PRIMARY KEY( t e l e f o n o, p a z i e n t e ), FOREIGN KEY ( t e l e f o n o ) REFERENCES TELEFONO( t e l e f o n o ), FOREIGN KEY ( p a z i e n t e ) REFERENCES PAZIENTE(CRA) Lo schema logico complessivo è sintetizzato graficamente in Figura 4. INSERT INTO STANZA ( numero, macchinario ) VALUES ( 1, macchinario per RX INSERT INTO STANZA ( numero, macchinario ) VALUES ( 2, macchinario per RX INSERT INTO STANZA ( numero, macchinario ) VALUES ( 3, macchinario per TC 7

Figura 4: Schema logico relazionale INSERT INTO ALLERGIA ( codice, nome, d e s c r i z i o n e ) VALUES ( 00001, pioppo, n u l l INSERT INTO ALLERGIA ( codice, nome) VALUES ( 10001, a c a r i INSERT INTO ALLERGIA ( codice, nome) VALUES ( 20001, l a t t e INSERT INTO ALLERGIA (nome, c o d i c e ) VALUES ( a s p i r i n a, 30001 INSERT INTO VACCINO (nome) VALUES ( tetano INSERT INTO VACCINO (nome) VALUES ( p e r t o s s e INSERT INTO VACCINO (nome) VALUES ( e p a t i t e b INSERT INTO VACCINO (nome) VALUES ( m o r b i l l o INSERT INTO VACCINO (nome) VALUES ( r o s o l i a INSERT INTO PAZIENTE (CRA, cap, numero, c i t t a, via, c o d i c e F i s c a l e, cognome, nome) VALUES ( MMM545, 33100, 5, Udine, Via Roma, RSSMRC77C60H816M, Rossi, Marco INSERT INTO PAZIENTE (CRA, cap, numero, c i t t a, via, c o d i c e F i s c a l e, cognome, nome) VALUES ( NNN545, 33010, 8, Tavagnacco, Via Udine, RSSNCL80H10H856H, Rossi, Nicola INSERT INTO PAZIENTE (CRA, cap, numero, c i t t a, via, c o d i c e F i s c a l e, cognome, nome) VALUES ( AAA545, 33100, 1, Udine, Via Roma, RSSANN77D60H654J, Rossi, Anna UPDATE PAZIENTE SET cognome= Bianchi, c o d i c e F i s c a l e= BNCANN77D60H654J WHERE CRA= AAA545 ; INSERT INTO s o f f r e ( a l l e r g i a, p a z i e n t e ) VALUES ( 00001, NNN545 INSERT INTO s o f f r e ( a l l e r g i a, p a z i e n t e ) VALUES ( 30001, NNN545 8

INSERT INTO s o f f r e ( a l l e r g i a, p a z i e n t e ) VALUES ( 10001, MMM545 INSERT INTO DATA( data ) VALUES ( t o d a t e ( 19800315, yyyymmdd ) INSERT INTO DATA VALUES ( t o d a t e ( 20010516, yyyymmdd ) INSERT INTO DATA VALUES ( t o d a t e ( 19900323, yyyymmdd ) INSERT INTO DATA VALUES ( t o d a t e ( 20050917, yyyymmdd ) INSERT INTO DATA VALUES ( t o d a t e ( 20041012, yyyymmdd ) INSERT INTO somministrazione ( data, paziente, vaccino ) VALUES ( t o d a t e ( 19800315, yyyymmdd ), MMM545, tetano INSERT INTO somministrazione ( data, paziente, vaccino ) VALUES ( t o d a t e ( 20010516, yyyymmdd ), MMM545, tetano INSERT INTO somministrazione ( data, paziente, vaccino ) VALUES ( t o d a t e ( 19900323, yyyymmdd ), NNN545, tetano INSERT INTO somministrazione ( data, paziente, vaccino ) VALUES ( t o d a t e ( 20050917, yyyymmdd ), NNN545, m o r b i l l o INSERT INTO somministrazione ( data, paziente, vaccino ) VALUES ( t o d a t e ( 20041012, yyyymmdd ), AAA545, e p a t i t e b INSERT INTO TELEFONO VALUES ( 0432676767 INSERT INTO TELEFONO VALUES ( 0432445566 INSERT INTO TELEFONO VALUES ( 0432676722 INSERT INTO TELEFONO VALUES ( 3472676722 INSERT INTO TELEFONO VALUES ( 3397779843 INSERT INTO hatel ( t e l e f o n o, p a z i e n t e ) VALUES ( 0432676722, MMM545 INSERT INTO hatel ( t e l e f o n o, p a z i e n t e ) VALUES ( 3397779843, MMM545 INSERT INTO hatel ( t e l e f o n o, p a z i e n t e ) VALUES ( 0432445566, NNN545 INSERT INTO hatel ( t e l e f o n o, p a z i e n t e ) VALUES ( 3472676722, NNN545 INSERT INTO hatel ( t e l e f o n o, p a z i e n t e ) VALUES ( 0432676767, AAA545 INSERT INTO VISITA ( dataora, stanza, d i a g n o s i, p a z i e n t e ) VALUES ( to timestamp ( 2010/04/01 1 0 : 0 0 : 0 0, YYYY/MM/DD HH: MI : SS ), 1, l i e v e c a l c i f i c a z i o n e a l l a s p a l l a dx, MMM545 INSERT INTO IMMAGINE ( dataora, dataorav, stanza, tipocontrasto, tipotc, quantitacontrasto, zonacorporea ) VALUES ( to timestamp ( 2010/04/01 1 0 : 1 0 : 0 5, YYYY/MM/DD HH: MI : SS ), to timestamp ( 2010/04/01 1 0 : 0 0 : 0 0, YYYY/MM/DD HH: MI : SS ), 1, n u l l, n u l l, n u l l, s p a l l a dx INSERT INTO IMMAGINE ( dataora, dataorav, stanza, tipocontrasto, tipotc, quantitacontrasto, zonacorporea ) VALUES ( to timestamp ( 2010/04/01 1 0 : 1 1 : 1 0, YYYY/MM/DD HH: MI : SS ), to timestamp ( 2010/04/01 1 0 : 0 0 : 0 0, YYYY/MM/DD HH: MI : SS ), 1, n u l l, n u l l, n u l l, s p a l l a sx INSERT INTO VISITA ( dataora, stanza, d i a g n o s i, p a z i e n t e ) 9

VALUES ( to timestamp ( 2011/04/01 1 1 : 0 0 : 0 0, YYYY/MM/DD HH: MI : SS ), 2, nessuna l e z i o n e, MMM545 INSERT INTO IMMAGINE ( dataora, dataorav, stanza, tipocontrasto, tipotc, quantitacontrasto, zonacorporea ) VALUES ( to timestamp ( 2011/04/01 1 1 : 0 9 : 4 5, YYYY/MM/DD HH: MI : SS ), to timestamp ( 2011/04/01 1 1 : 0 0 : 0 0, YYYY/MM/DD HH: MI : SS ), 2, n u l l, n u l l, n u l l, g i n o c c h i o INSERT INTO IMMAGINE ( dataora, dataorav, stanza, tipocontrasto, tipotc, quantitacontrasto, zonacorporea ) VALUES ( to timestamp ( 2011/04/01 1 1 : 1 1 : 2 4, YYYY/MM/DD HH: MI : SS ), to timestamp ( 2011/04/01 1 1 : 0 0 : 0 0, YYYY/MM/DD HH: MI : SS ), 2, n u l l, n u l l, n u l l, g i n o c c h i o INSERT INTO VISITA ( dataora, stanza, d i a g n o s i, p a z i e n t e ) VALUES ( to timestamp ( 2010/07/15 1 0 : 0 0 : 0 0, YYYY/MM/DD HH: MI : SS ), 3, l i e v e l e s i o n e, c o n s i g l i a t o r i p o s o, NNN545 INSERT INTO IMMAGINE ( dataora, dataorav, stanza, tipocontrasto, tipotc, quantitacontrasto, zonacorporea ) VALUES ( to timestamp ( 2010/07/15 1 0 : 1 5 : 0 2, YYYY/MM/DD HH: MI : SS ), to timestamp ( 2010/07/15 1 0 : 0 0 : 0 0, YYYY/MM/DD HH: MI : SS ), 3, l i q u i d o x, a s s i a l e,100, g i n o c c h i o INSERT INTO VISITA ( dataora, stanza, d i a g n o s i, p a z i e n t e ) VALUES ( to timestamp ( 2011/03/15 1 0 : 0 0 : 0 0, YYYY/MM/DD HH: MI : SS ), 2, l i e v e l e s i o n e, AAA545 INSERT INTO IMMAGINE ( dataora, dataorav, stanza, tipocontrasto, tipotc, quantitacontrasto, zonacorporea ) VALUES ( to timestamp ( 2011/03/15 1 0 : 1 3 : 5 4, YYYY/MM/DD HH: MI : SS ), to timestamp ( 2011/03/15 1 0 : 0 0 : 0 0, YYYY/MM/DD HH: MI : SS ), 2, n u l l, n u l l, n u l l, gomito dx INSERT INTO IMMAGINE ( dataora, dataorav, stanza, tipocontrasto, tipotc, quantitacontrasto, zonacorporea ) VALUES ( to timestamp ( 2011/03/15 1 0 : 2 1 : 3 4, YYYY/MM/DD HH: MI : SS ), to timestamp ( 2011/03/15 1 0 : 0 0 : 0 0, YYYY/MM/DD HH: MI : SS ), 2, n u l l, n u l l, n u l l, gomito dx INSERT INTO VISITA ( dataora, stanza, d i a g n o s i, p a z i e n t e ) VALUES ( to timestamp ( 2011/04/15 1 1 : 0 0 : 0 0, YYYY/MM/DD HH: MI : SS ), 3, n u l l, AAA545 Interrogazioni della base di dati Selezionare il nome e il cognome di tutti i pazienti. SELECT nome, cognome FROM p a z i e n t e Selezionare i cognomi di tutti i pazienti. SELECT cognome FROM p a z i e n t e 10

Selezionare i cognomi distinti di tutti i pazienti. s e l e c t DISTINCT cognome from p a z i e n t e Selezionare nome, cognome e codice fiscale di tutti i pazienti residenti a Udine in Via Roma. SELECT nome, cognome, c o d i c e f i s c a l e FROM p a z i e n t e WHERE v i a= Via Roma AND c i t t a= Udine Determinare i dati relativi alle immagini di tipo TC. SELECT FROM IMMAGINE WHERE t i p o t c IS NOT n u l l Determinare i dati relativi alle immagini di tipo RX. SELECT FROM IMMAGINE WHERE t i p o t c IS n u l l Determinare il codice delle allergie di cui soffre il sig. Marco Rossi. SELECT a l l e r g i a FROM paziente, s o f f r e WHERE cognome= Rossi AND nome = Marco AND cra=p a z i e n t e SELECT a l l e r g i a FROM p a z i e n t e JOIN s o f f r e ON cra=p a z i e n t e WHERE cognome= Rossi and nome = Marco Determinare il nome delle allergie di cui soffre il sig. Marco Rossi. SELECT a. nome FROM p a z i e n t e p, s o f f r e, a l l e r g i a a WHERE a l l e r g i a=c o d i c e AND cra=p a z i e n t e AND p. nome= Marco AND cognome= Rossi SELECT a l l e r g i a. nome FROM p a z i e n t e JOIN s o f f r e ON cra=p a z i e n t e JOIN a l l e r g i a ON a l l e r g i a=c o d i c e WHERE p a z i e n t e. nome= Marco AND cognome= Rossi Determinare i codici cra dei pazienti a cui è stato somministrato o il vacino del tetano o quello del morbillo. 11

SELECT DISTINCT p a z i e n t e WHERE vaccino= tetano OR vaccino= m o r b i l l o SELECT DISTINCT p a z i e n t e WHERE vaccino= tetano UNION SELECT DISTINCT p a z i e n t e WHERE vaccino= m o r b i l l o Determinare i codici cra dei pazienti a cui è stato somministrato sia il vaccino del tetano che quello del morbillo. SELECT DISTINCT p a z i e n t e WHERE vaccino= tetano INTERSECT SELECT DISTINCT p a z i e n t e WHERE vaccino= m o r b i l l o Determinare i codici cra dei pazienti a cui è stato somministrato solo il vaccino del tetano. SELECT DISTINCT p a z i e n t e WHERE vaccino= tetano MINUS SELECT DISTINCT p a z i e n t e WHERE vaccino<> tetano Determinare il codice cra, il nome e il cognome dei pazienti a cui è stato somministrato solo il vaccino del tetano. SELECT DISTINCT paziente, nome, cognome JOIN p a z i e n t e ON p a z i e n t e=cra WHERE vaccino= tetano MINUS SELECT DISTINCT paziente, nome, cognome JOIN p a z i e n t e ON p a z i e n t e=cra WHERE vaccino<> tetano s, p a z i e n t e p WHERE s. vaccino= tetano AND s. p a z i e n t e=p. cra AND s. p a z i e n t e NOT IN (SELECT p a z i e n t e WHERE vaccino<> tetano ) 12

s, p a z i e n t e p WHERE s. vaccino= tetano AND s. p a z i e n t e=p. cra AND NOT EXISTS (SELECT s i WHERE s i. vaccino<> tetano AND s. p a z i e n t e=s i. p a z i e n t e ) FROM p a z i e n t e WHERE cra IN (SELECT p a z i e n t e WHERE vaccino= tetano ) AND cra NOT IN (SELECT p a z i e n t e WHERE vaccino<> tetano ) SELECT cra, nome, cognome FROM p a z i e n t e WHERE EXISTS (SELECT WHERE vaccino= tetano AND cra=p a z i e n t e ) AND NOT EXISTS (SELECT WHERE vaccino<> tetano AND cra=p a z i e n t e ) Determinare il nome e il cognome dei pazienti che hanno fatto un immagine di tipo TC. SELECT DISTINCT P. nome, P. cognome FROM p a z i e n t e P, v i s i t a V, immagine I WHERE P. cra=v. p a z i e n t e AND V. dataora=i. dataorav AND V. stanza=i. stanza AND I. t i p o t c IS NOT NULL Determinare il numero delle visite programmate nella stanza 1. SELECT COUNT( ) FROM VISITA WHERE stanza=1 Determinare il numero delle visite programmate in ogni stanza. SELECT stanza, COUNT( ) FROM VISITA GROUP BY stanza 13

Determinare il numero delle stanze in cui sono state programmate almeno due visite. SELECT stanza, COUNT( ) FROM VISITA GROUP BY stanza HAVING COUNT( )>1 SELECT V1. stanza FROM v i s i t a V1, v i s i t a V2 WHERE V1. stanza=v2. stanza AND V1. dataora<v2. stanza Determinare il nome e il cognome dei pazienti che hanno programmato un unica visita. SELECT nome, cognome FROM PAZIENTE MINUS SELECT P. nome, P. cognome FROM v i s i t a V1, v i s i t a V2, p a z i e n t e P WHERE V1. p a z i e n t e=v2. p a z i e n t e AND (V1. dataora<>v2. dataora OR V1. stanza<>v2. stanza ) AND P. cra=v1. p a z i e n t e SELECT nome, cognome FROM PAZIENTE WHERE cra NOT IN ( SELECT V1. p a z i e n t e FROM v i s i t a V1, v i s i t a V2 WHERE V1. paziemte=v2. p a z i e n t e AND (V1. dataora<>v2. dataora OR V1. stanza<>v2. stanza ) ) 14