27.06.2014 Views

INFORMATICA MEDICA

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>INFORMATICA</strong> <strong>MEDICA</strong><br />

3. Panoramica su SQL<br />

Prof. Mauro Giacomini


Sommario<br />

• Introduzione<br />

• Istruzione SELECT<br />

• Tipi di Join<br />

• Subquery<br />

• Comandi DML<br />

• Creazione delle tabelle<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


Introduzione<br />

• SQL: linguaggio di interrogazione standard per DBMS<br />

relazionali<br />

• Consente anche: manipolazione dati, riorganizzazione<br />

dati, esecuzione di comandi amministrativi<br />

• Non è un linguaggio di programmazione completo<br />

• Utilizzabile in ambienti di programmazione<br />

• Sono disponibili shell di interpretazione dei comandi<br />

• Nato nei primi anni ’80 sulla spinta di IBM che ne ha<br />

curato anche la standardizzazione, l’ultima versione è<br />

ISO/IEC 9075-2:2003<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


Istruzione SELECT<br />

• Molto flessibile<br />

• Restituisce una tabella temporanea<br />

• Sintassi<br />

• SELECT [ALL|DISTINCT]<br />

• FROM <br />

• [WHERE ]<br />

• [GROUP BY ]<br />

• [HAVING ]<br />

• [ORDER BY [ASC|DESC]]<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


Istruzione SELECT (2)<br />

• SELECT: attributi da selezionare<br />

• FROM: tabelle che contengono gli attributi<br />

di cui sopra<br />

• WHERE: condizione di scelta fra le righe<br />

• GROUP BY: modo di raggruppamento<br />

• HAVING: condizione sui gruppi<br />

• ORDER BY: attributi di ordinamento ASC<br />

cerscente DESC decrescente<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


Proiezione<br />

• Scelta di alcuni attributi da una tabella (*)<br />

• Possibile ridenominazione (AS)<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


Restrizione<br />

• Opera sulle righe<br />

• Ottiene un sottoinsieme delle righe della<br />

tabella<br />

• Dipende dalle condizioni specificate nel<br />

WHERE<br />

• Operatori (, ) e<br />

connettori logici (AND, OR, NOT)<br />

• Operatori BETWEEN, IN, IS NULL<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


LIKE<br />

• Operatore per ricerche flessibili sulle stringhe<br />

• Da usarsi con caratteri speciali<br />

• % una qualsiasi sequenza di caratteri o (*)<br />

• _ un singolo carattere qualsiasi o (?)<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


Operazioni sulle colonne<br />

• Nella lista delle colonne<br />

• Operatori matematici<br />

• Concatenazione di stringhe | o & o +<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


Funzioni scalari di gruppo<br />

• Restituiscono un singolo valore e sono<br />

applicate su insiemi di righe<br />

• Max | Min |AVG | SUM (attributo)<br />

• COUNT ( * | Espressione) con * tutte le<br />

righe, con Espressione conta solo quelle in<br />

cui Espressione è NULL<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


Raggruppamenti<br />

• GROUP BY: raggruppa righe secondo la<br />

lista degli attributi specificata<br />

• HAVING: specifica delle condizioni sui<br />

gruppi formati dagli attributi della<br />

clausola GROUP BY<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


Join<br />

• Prodotto Cartesiano (CROSS JOIN)<br />

• SELECT <br />

• FROM ,<br />

• Giunzione Naturale (NATURAL JOIN)<br />

• SELECT <br />

• FROM ,<br />

• WHERE = <br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


Inner Join<br />

• INNER JOIN <br />

• [ON ]<br />

• Non è limitato solo alle connessioni fra<br />

le chiavi<br />

• Non è solo di uguaglianza<br />

• Non è limitato alle sole tabelle connesse<br />

in fasi di costruzione dello schema<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


Outer Join<br />

• SELECT <br />

• FROM [LEFT | RIGHT] JOIN<br />

<br />

• ON <br />

<br />

• = < | > | = | =<br />

• Fornisce tutte le righe anche quelle che<br />

non hanno corrispondenze dal lato<br />

indicato<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


Self Join<br />

• Join che lega due occorrenze presenti<br />

nella stessa tabella<br />

• Come i precedenti, solo che ha bisogno<br />

di due istanze della stessa tabella nel<br />

FROM con la ridenominazione<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


Join su più tabelle<br />

• Come quello su due tabelle<br />

• Non serve che siano collegate<br />

logicamente<br />

• Bastano dei domini comuni a due a due<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


Subquery scalari (1)<br />

• Esempio: selezione di righe sulla base del risultato di<br />

un’altra query<br />

• Def. : una query racchiusa da parentesi () che può<br />

essere inserita in un’altra istruzione SQL,<br />

principalmente come parametro di una sezione di<br />

WHERE<br />

• SELECT matricola, cognome, nome, eta<br />

• FROM Studente<br />

• WHERE eta > (SELECT AVG(eta) FROM studente)<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


Subquery scalari (2)<br />

• Condizioni di uso<br />

• Deve restituire un solo valore<br />

• Deve comparire a destra dell’operatore di<br />

confronto<br />

• Non si possono confrontare due subquery<br />

• Nella subquery non si possono usare<br />

(GROUP BY e HAVING)<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


Subquery e IN (1)<br />

• Con la clausola IN si può controllare in un<br />

insieme, quindi possiamo usare subquery che<br />

restituiscono un vettore (colonna) di dati<br />

• SELECT * FROM Impiegato<br />

• WHERE Impiegato.matricola IN<br />

• (SELECT DISTINCT Familiare.matricola<br />

FROM Familiare Where eta


Subquery e IN (2)<br />

• SELECT DISTINCT *<br />

• FROM Impiegato, Familiare<br />

• WHERE Impiegato.matricola =<br />

Familiare.matricola and<br />

Familiare.eta


Subquery annidate<br />

• SELECT Filiale.*<br />

• FROM Filiale<br />

• WHERE codice IN<br />

• (SELECT codice_filiale<br />

• FROM Tariffa<br />

• WHERE codice_categoria =<br />

• (SELECT codice<br />

• FROM Categoria<br />

• WHERE descrizione = ‘Lusso’)<br />

• AND prezzo


Tipi di linguaggi per il DBMS<br />

• Data Manipulation Language (DML): comandi<br />

per inserire, modificare, cancellare occorrenze<br />

in una tabella<br />

• Data Definition Language (DDL): comandi per<br />

la struttura del DB (creazione/eliminazione di<br />

tabelle/attributi/vincoli/viste)<br />

• Data Control Language (DCL): comandi per il<br />

controllo sui dati, gestione degli utenti, diritti<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


INSERT (1)<br />

• Inserimento di righe in tabelle<br />

• Dati specificati nell’istruzione<br />

• INSERT INTO <br />

• [lista_colonne]<br />

• VALUES <br />

• Es:<br />

• INSERT INTO Studente<br />

• (matricola, cognome, nome)<br />

• VALUES (2523789, ‘Rossi’,’Mario’)<br />

• Corrispondenza 1 a 1 fra lista colonne e lista valori<br />

• Campi non presenti nella lista messi a NULL<br />

• Se non c’è la lista colonne, i valori saranno assegnati ai campi<br />

nell’ordine in cui compaiono nella tabella<br />

• Il valore della chiave primaria deve sempre essere assegnato<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


INSERT (2)<br />

• Accoppiata con una SELECT per<br />

ottenere i dati da inserire<br />

• INSERT INTO Studente_Laureato<br />

• (SELECT * FROM Studente<br />

• WHERE laureato = ‘S’)<br />

• La tabella Studente_Laureato deve<br />

essere già presente e deve avere la<br />

stessa struttura di Studente<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


UPDATE<br />

• Modifica i dati già presenti<br />

• Sintassi<br />

• UPDATE <br />

• SET =<br />

• [{,=}]<br />

• [WHERE ]<br />

• L’espressione può essere anche una<br />

subquery scalare<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


DELETE<br />

• Elimina tutte le righe che rispettano la<br />

condizione scritta nella clausola WHERE<br />

• Sintassi:<br />

• DELETE FROM <br />

• [WHERE ]<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


CREATE TABLE<br />

• Comando per la creazione di tabelle<br />

• Sintassi:<br />

• CREATE TABLE <br />

• ( { <br />

[NOT NULL | CONSTRAINT <br />

PRIMARY KEY | UNIQUE ] [,] } )<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


Tipi di dati<br />

• CHAR (n): sequenza alfanumerica di n caratteri<br />

• CHAR VARYING (n): come sopra ma qui n è un<br />

valore massimo<br />

• DECIMAL (t,f) numero decimale di t cifre di cui f<br />

decimali<br />

• INTEGER numero intero (4 byte)<br />

• SMALLINT intero corto (2 byte)<br />

• FLOAT (n) numero a virgola mobile a precisione<br />

variabile<br />

• REAL / DOUBLE numeri a virgola mobile a precisione<br />

fissa<br />

• DATE<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


Vincoli di integrità<br />

• NOT NULL: attributo obbligatorio<br />

(specificabile anche senza il predicato<br />

CONSTRAINT)<br />

• UNIQUE: valore che deve essere<br />

diverso in tutte le righe<br />

• PRIMARY KEY: indica la chiave primaria<br />

della relazione, indicabile una sola volta<br />

nella creazione della tabella<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14


Vincoli di integrità di tabella<br />

• Chiave primaria composta di più attributi<br />

• Da indicarsi alla fine della CREATE TABLE<br />

• CONSTRAINT PRIMARY KEY (<br />

{ [,] } )<br />

• Chiavi esterne<br />

• CONSTRAINT FOREIGN KEY<br />

({ [,] })<br />

REFERENCES <br />

({ [,] })<br />

Inf. Med.- 3. Panoramica su SQL -<br />

A.A. 2013-14

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!