Laboratorio di Informatica
Medica
3. Panoramica su SQL
Prof. Mauro Giacomini
Sommario
◼ Introduzione
◼ Istruzione SELECT
◼ Tipi di Join
◼ Subquery
◼ Comandi DML
◼ Creazione delle tabelle
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Introduzione
◼ SQL: linguaggio di interrogazione standard per DBMS
relazionali
◼ Consente anche: manipolazione dati, riorganizzazione
dati, esecuzione di comandi amministrativi
◼ Non è un linguaggio di programmazione completo
◼ Utilizzabile in ambienti di programmazione
◼ Sono disponibili shell di interpretazione dei comandi
◼ Nato nei primi anni ’80 sulla spinta di IBM che ne ha
curato anche la standardizzazione, l’ultima versione è
ISO/IEC 9075-2:2003
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Istruzione SELECT
◼ Molto flessibile
◼ Restituisce una tabella temporanea
◼ Sintassi
◼ SELECT [ALL|DISTINCT]<lista attributi>
◼ FROM <lista tabelle>
◼ [WHERE <condizione>]
◼ [GROUP BY <lista attributi>]
◼ [HAVING <condizione>]
◼ [ORDER BY <lista attributi> [ASC|DESC]]
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Istruzione SELECT (2)
◼ SELECT: attributi da selezionare
◼ FROM: tabelle che contengono gli attributi
di cui sopra
◼ WHERE: condizione di scelta fra le righe
◼ GROUP BY: modo di raggruppamento
◼ HAVING: condizione sui gruppi
◼ ORDER BY: attributi di ordinamento ASC
cerscente DESC decrescente
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Proiezione
◼ Scelta di alcuni attributi da una tabella (*)
◼ Possibile ridenominazione (AS)
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Restrizione
◼ Opera sulle righe
◼ Ottiene un sottoinsieme delle righe della
tabella
◼ Dipende dalle condizioni specificate nel
WHERE
◼ Operatori (<, <=, =, >=, >, <>) e
connettori logici (AND, OR, NOT)
◼ Operatori BETWEEN, IN, IS NULL
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
LIKE
◼ Operatore per ricerche flessibili sulle stringhe
◼ Da usarsi con caratteri speciali
◼ % → una qualsiasi sequenza di caratteri o (*)
◼ _ → un singolo carattere qualsiasi o (?)
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Operazioni sulle colonne
◼ Nella lista delle colonne
◼ Operatori matematici
◼ Concatenazione di stringhe | o & o +
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Funzioni scalari di gruppo
◼ Restituiscono un singolo valore e sono
applicate su insiemi di righe
◼ Max | Min |AVG | SUM (attributo)
◼ COUNT ( * | Espressione) con * tutte le
righe, con Espressione conta solo quelle in
cui Espressione è <> NULL
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Raggruppamenti
◼ GROUP BY: raggruppa righe secondo la
lista degli attributi specificata
◼ HAVING: specifica delle condizioni sui
gruppi formati dagli attributi della
clausola GROUP BY
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Join
◼ Prodotto Cartesiano (CROSS JOIN)
◼ SELECT <lista attributi>
◼ FROM <tabella1>,<tabella2>
◼ Giunzione Naturale (NATURAL JOIN)
◼ SELECT <lista attributi>
◼ FROM <tab1>,<tab2>
◼ WHERE <[Link]> = <[Link]>
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Inner Join
◼ <tab1> INNER JOIN <tab2>
◼ [ON <condizione>]
◼ Non è limitato solo alle connessioni fra
le chiavi
◼ Non è solo di uguaglianza
◼ Non è limitato alle sole tabelle connesse
in fasi di costruzione dello schema
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Outer Join
◼ SELECT <lista attributi>
◼ FROM <tab1> [LEFT | RIGHT] JOIN
<tab2>
◼ ON <tab1.campo1> <opconf>
<tab2.campo2>
◼ <opconf> = < | > | = | <= | >=
◼ Fornisce tutte le righe anche quelle che
non hanno corrispondenze dal lato
indicato
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Self Join
◼ Join che lega due occorrenze presenti
nella stessa tabella
◼ Come i precedenti, solo che ha bisogno
di due istanze della stessa tabella nel
FROM con la ridenominazione
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Join su più tabelle
◼ Come quello su due tabelle
◼ Non serve che siano collegate
logicamente
◼ Bastano dei domini comuni a due a due
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Subquery scalari (1)
◼ Esempio: selezione di righe sulla base del risultato di
un’altra query
◼ Def. : una query racchiusa da parentesi () che può
essere inserita in un’altra istruzione SQL,
principalmente come parametro di una sezione di
WHERE
◼ SELECT matricola, cognome, nome, eta
◼ FROM Studente
◼ WHERE eta > (SELECT AVG(eta) FROM studente)
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Subquery scalari (2)
◼ Condizioni di uso
◼ Deve restituire un solo valore
◼ Deve comparire a destra dell’operatore di
confronto
◼ Non si possono confrontare due subquery
◼ Nella subquery non si possono usare
(GROUP BY e HAVING)
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Subquery e IN (1)
◼ Con la clausola IN si può controllare in un
insieme, quindi possiamo usare subquery che
restituiscono un vettore (colonna) di dati
◼ SELECT * FROM Impiegato
◼ WHERE [Link] IN
◼ (SELECT DISTINCT [Link]
FROM Familiare Where eta<18 AND
legame =‘F’)
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Subquery e IN (2)
◼ SELECT DISTINCT *
◼ FROM Impiegato, Familiare
◼ WHERE [Link] =
[Link] and
[Link]<18 and
[Link]=‘F’
◼ Da usare il Join se si vogliono in output
campi anche della tabella familiare
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Subquery annidate
◼ SELECT Filiale.*
◼ FROM Filiale
◼ WHERE codice IN
◼ (SELECT codice_filiale
◼ FROM Tariffa
◼ WHERE codice_categoria =
◼ (SELECT codice
◼ FROM Categoria
◼ WHERE descrizione = ‘Lusso’)
◼ AND prezzo<30)
Possibili problemi di efficienza
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Tipi di linguaggi per il DBMS
◼ Data Manipulation Language (DML): comandi
per inserire, modificare, cancellare occorrenze
in una tabella
◼ Data Definition Language (DDL): comandi per
la struttura del DB (creazione/eliminazione di
tabelle/attributi/vincoli/viste)
◼ Data Control Language (DCL): comandi per il
controllo sui dati, gestione degli utenti, diritti
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
INSERT (1)
◼ Inserimento di righe in tabelle
◼ Dati specificati nell’istruzione
◼ INSERT INTO <nome_tabella>
◼ [lista_colonne]
◼ VALUES <lista_valori>
◼ Es:
◼ INSERT INTO Studente
◼ (matricola, cognome, nome)
◼ VALUES (2523789, ‘Rossi’,’Mario’)
◼ Corrispondenza 1 a 1 fra lista colonne e lista valori
◼ Campi non presenti nella lista messi a NULL
◼ Se non c’è la lista colonne, i valori saranno assegnati ai campi
nell’ordine in cui compaiono nella tabella
◼ Il valore della chiave primaria deve sempre essere assegnato
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
INSERT (2)
◼ Accoppiata con una SELECT per
ottenere i dati da inserire
◼ INSERT INTO Studente_Laureato
◼ (SELECT * FROM Studente
◼ WHERE laureato = ‘S’)
◼ La tabella Studente_Laureato deve
essere già presente e deve avere la
stessa struttura di Studente
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
UPDATE
◼ Modifica i dati già presenti
◼ Sintassi
◼ UPDATE <nome_tabella>
◼ SET <colonna>=<espressione>
◼ [{,<colonna>=<espressione>}]
◼ [WHERE <condizione>]
◼ L’espressione può essere anche una
subquery scalare
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
DELETE
◼ Elimina tutte le righe che rispettano la
condizione scritta nella clausola WHERE
◼ Sintassi:
◼ DELETE FROM <nome_tabella>
◼ [WHERE <condizione>]
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
CREATE TABLE
◼ Comando per la creazione di tabelle
◼ Sintassi:
◼ CREATE TABLE <nome_tabella>
◼ ( { <nome_colonna> <tipo [ (dimensione) ] >
[NOT NULL | CONSTRAINT <nome_vincolo>
PRIMARY KEY | UNIQUE ] [,] } )
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Tipi di dati
◼ CHAR (n): sequenza alfanumerica di n caratteri
◼ CHAR VARYING (n): come sopra ma qui n è un
valore massimo
◼ DECIMAL (t,f) numero decimale di t cifre di cui f
decimali
◼ INTEGER numero intero (4 byte)
◼ SMALLINT intero corto (2 byte)
◼ FLOAT (n) numero a virgola mobile a precisione
variabile
◼ REAL / DOUBLE numeri a virgola mobile a precisione
fissa
◼ DATE
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Vincoli di integrità
◼ NOT NULL: attributo obbligatorio
(specificabile anche senza il predicato
CONSTRAINT)
◼ UNIQUE: valore che deve essere
diverso in tutte le righe
◼ PRIMARY KEY: indica la chiave primaria
della relazione, indicabile una sola volta
nella creazione della tabella
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21
Vincoli di integrità di tabella
◼ Chiave primaria composta di più attributi
◼ Da indicarsi alla fine della CREATE TABLE
◼ CONSTRAINT <vincolo> PRIMARY KEY (
{<attributo> [,] } )
◼ Chiavi esterne
◼ CONSTRAINT <vincolo> FOREIGN KEY
({<attributo_nella_tabella> [,] })
REFERENCES <nome_tabella_esterna>
({<attributo_esterno> [,] })
Lab. Inf. Med.- 2. Panoramica su
SQL - A.A. 2020-21