Python.corso.putzu
Python.corso.putzu
Lezione 00
Introduzione e
Presentazione del corso
E' vietata la copia, la rielaborazione, la riproduzione in qualsiasi forma dei contenuti e immagini
presenti nelle lezioni. E' inoltre vietata la diffusione, la redistribuzione e la pubblicazione dei
contenuti e immagini, incluse le registrazioni delle videolezionicon qualsiasi modalità e mezzo non
autorizzate espressamente dall'autore o da Unica
• Canali di comunicazione
• e-mail: [email protected]
• Microsoft Teams, canale: Laboratorio di Informatica
• Appunti e slide
• Sul mio sito docente
https://www.unica.it/unica/it/ateneo_s07_ss01.page?con
tentId=SHD232124
• su Microsoft Teams
• Metodo II
• Frequenza almeno sopra la soglia
• 1 unica prova orale su tutto il programma
Lezione 01
Il linguaggio Python
E' vietata la copia, la rielaborazione, la riproduzione in qualsiasi forma dei contenuti e immagini
presenti nelle lezioni. E' inoltre vietata la diffusione, la redistribuzione e la pubblicazione dei
contenuti e immagini, incluse le registrazioni delle videolezionicon qualsiasi modalità e mezzo non
autorizzate espressamente dall'autore o da Unica
• Si compone di
• Shell
• Editor
eval(x)
• La funzione eval può quindi essere usata per “convertire” in valori numerici i dati
acquisiti mediante la funzione input.
Lezione 02
Il linguaggio Python
E' vietata la copia, la rielaborazione, la riproduzione in qualsiasi forma dei contenuti e immagini
presenti nelle lezioni. E' inoltre vietata la diffusione, la redistribuzione e la pubblicazione dei
contenuti e immagini, incluse le registrazioni delle videolezionicon qualsiasi modalità e mezzo non
autorizzate espressamente dall'autore o da Unica
if x > 0 :
print("La condizione è vera.")
else:
print("La condizione è falsa.")
while x < 2 :
print("Python")
x = 3
• A questo scopo si usa comunemente una alla quale prima dell’istruzione iterativa
si assegna un valore scelto dal programmatore (di norma, 1); tale valore viene poi
incrementato di una unità in ogni ripetizione dell’istruzione iterativa;
• l’espressione condizionale verificherà quindi che il valore della stessa variabile sia minore o
uguale al numero desiderato di ripetizioni.
• Poiché le variabili usate in questo modo hanno la funzione di tenere traccia del
(contare il) numero di iterazioni, vengono comunemente indicate con il termine
“contatori”.
Lorenzo Putzu Laboratorio D’Informatica 15
Istruzione iterativa
• Esempio
• Assumiamo di aver acqusito un input da tastiera e che vanga memorizzato nella
variabile x
• L’uso di istruzioni iterative nidificate può essere molto utile quando si lavora su
delle tabelle o matrici che quindi presentano delle righe e colonne
Lezione 03
Il linguaggio Python
E' vietata la copia, la rielaborazione, la riproduzione in qualsiasi forma dei contenuti e immagini
presenti nelle lezioni. E' inoltre vietata la diffusione, la redistribuzione e la pubblicazione dei
contenuti e immagini, incluse le registrazioni delle videolezionicon qualsiasi modalità e mezzo non
autorizzate espressamente dall'autore o da Unica
• Per concludere l’esecuzione di un’istruzione iterativa è anche possibile usare l’istruzione break.
Questa istruzione può essere usata solo all’interno di un’istruzione iterativa, in un qualsiasi punto
della sequenza di istruzioni da ripetere.
#questo è un commento
print(‘stampa qualcosa’) # anche questo è un commento
'''
Questo è un commento che si estende su più linee
'''
• Questo tipo di commenti si utilizza per una descrizione più generica e globale di
una serie di istruzione che seguono
4. Calcolare la somma dei primi 𝑛 termini della serie armonica per un dato intero non negativo 𝑛:
𝑛
1 1 1 1
= 1 + + +⋯+
𝑘 2 3 𝑛
𝑘=1
• Sono dette funzioni predefinite, o built-in e l’insieme di tali funzioni viene detto libreria.
• La funzione input può non ricevere argomenti, oppure può riceverne uno
• input() oppure input(arg)
• restituisce un valore di tipo stringa.
• La funzione print consente di stampare nella shell i valori di una o più espressioni:
• print(espressione) oppure print(espressione1,espressione2,. . . )
• non restituisce nessun valore: il suo unico scopo è stampare valori nella shell.
• Sintassi:
• def nome-funzione (par1, . . . , parn) :
corpo della funzione
• nome-funzione è un nome simbolico scelto dal programmatore, con gli stessi vincoli a cui sono soggetti
i nomi delle variabili
• par1, . . . , parn sono nomi (scelti dal programmatore) di variabili, dette parametri della funzione, alle
quali l’interprete assegnerà i valori degli argomenti che verranno indicati nella chiamata della funzione
• corpo della funzione è una sequenza di una o più istruzioni qualsiasi, ciascuna scritta in una riga
distinta, con un rientro di almeno un carattere, identico per tutte le istruzioni
• Come per le funzioni predefinite, anche per quelle definite dall’utente il numero di
argomenti indicati nella chiamata dovrà corrispondere al numero di argomenti previsti
nella definizione, cioè al numero dei parametri indicati nell’intestazione.
Lezione 04
Il linguaggio Python
E' vietata la copia, la rielaborazione, la riproduzione in qualsiasi forma dei contenuti e immagini
presenti nelle lezioni. E' inoltre vietata la diffusione, la redistribuzione e la pubblicazione dei
contenuti e immagini, incluse le registrazioni delle videolezionicon qualsiasi modalità e mezzo non
autorizzate espressamente dall'autore o da Unica
• Nelle istruzioni del corpo di una funzione possono comparire chiamate di altre
funzioni, sia predefinite che definite dall’utente. Se si vuole chiamare una
funzione predefinita appartenente a una delle librerie Python sarà necessario
inserire prima della chiamata la corrispondente istruzione from-import.
• Di norma l’istruzione from-import viene inserita all’inizio del file che contiene la
definizione delle proprie funzioni, non nel corpo di una di esse.
• Questo significa che se una funzione è chiamata da istruzioni che si trovano nel corpo di un’altra
funzione, ognuna di esse potrà accedere solo alle proprie variabili, e non potrà accedere a quelle
dell’altra funzione, né modificarle.
• Il fatto che le variabili definite in una funzione siano locali consente di definire nuove funzioni
senza preoccuparsi dell’eventuale presenza di variabili con lo stesso nome nei programmi che le
useranno.
• Le funzioni e le istruzioni del programma “principale” potranno trovarsi in uno o più file. Nel caso
di più file si dovranno prevedere opportune istruzioni from-import.
• Per eseguire il programma si dovrà eseguire il file che contiene le istruzioni del programma
“principale”.
• In alternativa, anche le istruzioni del programma “principale” potranno essere scritte sotto forma
di funzione. In questo caso il programma potrà essere avviato chiamando dalla shell tale funzione.
• Oltre alle stringhe, due dei principali tipi strutturati del linguaggio Python sono:
• le liste, che consentono di rappresentare sequenze ordinate di valori
qualsiasi
• i dizionari, che consentono di rappresentare collezioni (non ordinate) di valori
qualsiasi
Lezione 05
Il linguaggio Python
E' vietata la copia, la rielaborazione, la riproduzione in qualsiasi forma dei contenuti e immagini
presenti nelle lezioni. E' inoltre vietata la diffusione, la redistribuzione e la pubblicazione dei
contenuti e immagini, incluse le registrazioni delle videolezionicon qualsiasi modalità e mezzo non
autorizzate espressamente dall'autore o da Unica
• Esempio
for i, v in enumerate(lista) :
print("indice :", i)
print("elemento :" ,v)
• Per esempio, se la variabile stringa contenesse una stringa composta da una sequenza di numeri
separati da una virgola (senza spazi), potremmo suddividere la stringa con le seguenti istruzioni
stringa = "15,1,25,9,6,21"
stringa.split(",")
• otterremo la lista ["15", "1", "25", "9", "6", "21"]
• Plus: l’utente potrebbe anche chiamare la funzione principale (ad esempio ‘calcola’) come
segue
>>> calcola(‘fattoriale’,6)
Lezione 06
Il linguaggio Python
E' vietata la copia, la rielaborazione, la riproduzione in qualsiasi forma dei contenuti e immagini
presenti nelle lezioni. E' inoltre vietata la diffusione, la redistribuzione e la pubblicazione dei
contenuti e immagini, incluse le registrazioni delle videolezionicon qualsiasi modalità e mezzo non
autorizzate espressamente dall'autore o da Unica
s[i][j]
• Una delle possibili applicazioni delle liste è la rappresentazione di vettori e analogamente, le liste
nidificate possono essere convenientemente usate per rappresentare matrici, cioè entità
bidimensionali.
−3 1 4
2 5 −1
= [[-3, 1, 4], [2, 5, -1]]
1 2 3 ... 9 10
2 4 6 ... 18 20
... ... ...
10 20 30 ... 90 100
3. Definire una funzione che acquisisca come argomento una lista 𝐿 e restituisca una nuova lista contenente
tutti gli elementi che compaiono in 𝐿 una sola volta. Esempio: [3, 1, 5, 1, 6, 2, 9, 6] → [3, 5, 2, 9]
• Un altro caso comune nella pratica è quello in cui i valori dei dati da elaborare
siano rappresentabili come collezioni (insiemi) di valori più semplici e non
ordinati, ciascuno dei quali abbia un significato che possa essere descritto con un
nome simbolico.
• I dati aventi tali caratteristiche possono essere rappresentati in Python per mezzo
del tipo strutturato dizionario.
• La scelta delle strutture dati più opportune è un passo fondamentale in quanto influenza la
complessità del programma che si scriverà o ne pregiudica la codifica.
• Volendo memorizzare un singolo utente (come visto prima) la scelta di un dizionario potrebbe
essere sufficiente, ma dovendo memorizzare n utenti tale scelta diventerebbe troppo dispersiva,
dato che sarebbero necessarie n variabili di tipo dizionario
• inoltre n potrebbe non essere noto a priori
• l’uso di istruzioni iterative non sarebbe possibile
• Un dizionario però è preferibile in questo caso in quanto ad ogni valore corrisponde un’etichetta
chiara che consente infatti al programmatore di ricordare facilmente il significato di ciascun elemento
attraverso la chiave corrispondente, purché si usino chiavi mnemoniche
• L’uso di una lista invece richiederebbe una costante attenzione per ricordare (o consultare la porzione di
codice in cui è definita la lista) a quale componente equivale un determinato indice della lista
• persona_a = {"nome":"Ada", "cognome":"Neri", "età":25}
• persona_b = ["Ada", "Neri", 25]
Lezione 07
Il linguaggio Python
E' vietata la copia, la rielaborazione, la riproduzione in qualsiasi forma dei contenuti e immagini
presenti nelle lezioni. E' inoltre vietata la diffusione, la redistribuzione e la pubblicazione dei
contenuti e immagini, incluse le registrazioni delle videolezionicon qualsiasi modalità e mezzo non
autorizzate espressamente dall'autore o da Unica
• Lo stesso elemento non puo comparire più di una volta, per cui creare un insieme
a partire da una lista o una sequenza equivale ad eliminarne i duplicati
• Come le stringhe e le liste è un tipo sequenza per cui si possono utizzare tutte le
operazioni che abbiamo visto in precedenza per questo tipo di dato.
• Anche in questo caso è possibile utilizzare lo slicing per ottenere una porzione
della tupla
• Vengono create due tuple (tupla1 e tupla2) che contengono una tupla nidificata. Un ulteriore
modo per creare delle tuple nidificate è quello che viene chiamato impacchettamento in tupla, ad
esempio con l’istruzione
tupla3 = tupla, 10
• creiamo una nuova tupla che contiene una tupla nidificata. La stessa operazione si può usare per
impacchettare dati semplici in una tupla
tupla4 = 10, True
• La funzione dir invece permette di visualizzare l’elenco degli attributi e dei metodi disponibili per un
determinato tipo di dato che gli viene passato come argomento, come ad esempio
dir([]) #restituisce l’elenco dei metodi e attributi di una lista
dir({}) #restituisce l’elenco dei metodi e attributi di un dizionario
• La funzione help fornisce delle informazioni più precise su uno specifico metodo come ad esempio
help([].insert)
help(().count)
Lezione 08
Il linguaggio Python
E' vietata la copia, la rielaborazione, la riproduzione in qualsiasi forma dei contenuti e immagini
presenti nelle lezioni. E' inoltre vietata la diffusione, la redistribuzione e la pubblicazione dei
contenuti e immagini, incluse le registrazioni delle videolezionicon qualsiasi modalità e mezzo non
autorizzate espressamente dall'autore o da Unica
• Dal punto di vista di un programma Python un file consiste in una sequenza ordinata di valori. Più
precisamente, un file può essere:
• una sequenza di byte, che possono essere visti come numeri interi con valori nell’insieme {0,
1, . . . , 255}
• una sequenza di caratteri, che sono i classici file di testo che prenderemo in considerazione
in questo corso
• Questo consente di evitare ambiguità nel caso di nomi di file o directory che iniziano con il
carattere n, dato che nella stringa corrispondente comparirebbe la sequenza "\n" che Python
interpreta come newline, altrimenti si dovrebbe scrivere come nome del file assoluto:
"C:\\Users\\Lorenzo\\dati.txt“
• In alternativa (solo nel caso di funzioni non da Shell) si può usare il nome del file relativo, che nel
caso in cui la funzione che lo richiama sia scritta in un file memorizzato nella stessa directory
nella quale si trova il file da aprire, sarà
"dati.txt“
• Perciò assumendo che un file di nome dati.txt sia stato aperto in lettura con l’istruzione
f = open("dati.txt", "r")
• esso dovrà essere chiuso con la chiamata:
f.close()
• Mentre un file è aperto in scrittura la funzione write può essere chiamata più
volte per scrivere nel file diverse sequenze di caratteri. Qualsiasi chiamata di
write scrive la corrispondente sequenza di caratteri al termine del file, cioè dopo
gli eventuali caratteri già presenti al suo interno.
• Per poter eleborare ogni singola riga sarà quindi necessario un’istruzione iterativa
in modo simile a quanto visto per l’elaborazione delle liste
Lezione 09
Il linguaggio Python
E' vietata la copia, la rielaborazione, la riproduzione in qualsiasi forma dei contenuti e immagini
presenti nelle lezioni. E' inoltre vietata la diffusione, la redistribuzione e la pubblicazione dei
contenuti e immagini, incluse le registrazioni delle videolezionicon qualsiasi modalità e mezzo non
autorizzate espressamente dall'autore o da Unica
• dove nome_instanza indica il nome che vogliamo dare all’oggetto che stiamo
creando e invece nome_classe fa riferimento al nome che era stato assegnato
alla classe in precedenza
• valore1 invece indica un possibile argomento di input che verrà gestito
all’interno della classe
• Il numero di argomenti di input dipende dalla definizione della classe è può anche
essere vuoto
• Possiamo passare un'istanza come parametro ad una funzione nel solito modo. Ad esempio per
una stampa dei suoi attributi
def StampaRettangolo(rettangolo):
print(‘base’, rettangolo.base)
print(‘altezza’,rettangolo.altezza)
• Allo stesso tempo possiamo anche restituire un’istanza come valore di ritorno di una funzione, ad
esempio
def RaddoppiaRettangolo(rettangolo):
rettangolo.base *= 2
rettangolo.altezza *= 2
return rettangolo
Lezione 10
Basi Di Dati
E' vietata la copia, la rielaborazione, la riproduzione in qualsiasi forma dei contenuti e immagini
presenti nelle lezioni. E' inoltre vietata la diffusione, la redistribuzione e la pubblicazione dei
contenuti e immagini, incluse le registrazioni delle videolezionicon qualsiasi modalità e mezzo non
autorizzate espressamente dall'autore o da Unica
● Il linguaggio SQL
– creazione dello schema di una base di dati
2
Sistemi informativi e basi di dati
● Sistemi informativi
– dati (testuali/numerici), strumenti di archiviazione e gestione,
utenti, procedure di accesso, ...
– esempi: università, aziende, enti pubblici,
sistemi informativi geografici (GIS)
● Basi di dati (BD)
– strumenti informatici per la gestione di sistemi informativi
• Una base di dati è un insieme di dati che può essere gestito da un sistema DBMS
(Data Base Management System).
• Se la base di dati non è ben progettata, possono verificarsi problemi di integrità, ridondanza o
incoerenza, a cui è necessario provvedere attraverso appositi metodi di riconciliazione dei dati:
• Integrità: di solito dovuti ad errore umano o incompletezza nell’immissione di dati (referenziati tra
di essi) all’interno del database.
• Ridondanza: informazioni ripetute all’interno del database.
• Ambiguità: incoerenza; differenti descrizioni di uno stesso dato o informazione non coincidono.
• Un DBMS deve essere in grado di gestire basi di dati di grandi dimensioni (Big Data), persistenti
(cioè con un ciclo di vita indipendente dal programma che le utilizza) e condivise da più
utenti/sistemi/applicazioni.
• Un DBMS deve inoltre prevedere modalità di controllo differenziato di accesso ai dati, per
garantire la privacy e la sicurezza di eventuali dati sensibili, riservati e/o personali.
• Alcuni limiti:
• Non permettono visualizzazioni grafiche dei dati o delle strutture dati.
• Implementano funzionalità matematiche e statistiche elementari di base.
• Due funzionalità:
– Data Definition Language (DDL)
– progettista/amministratore di piccole BD
● Conoscenze di base
– progettazione concettuale: modello Entità-Relazione
– Oracle
– Microsoft
– ...
● Open-source
– PostgreSQL
– MySQL
– ...
● Durante l’installazione
dovrete inserire una password
della quale dovete tener
traccia in quanto verrà
richiesta in seguito
• Il programma pgAdmin fornisce
l’interfaccia grafica al DBMS
Lorenzo Putzu Laboratorio D’Informatica 14
Ambiente di lavoro
• L’interfaccia è composta da tre pannelli. In particolare,
il pannello a sinistra mostra l’organizzazione gerarchica
del DBMS PostgreSQL (il contenuto di ogni elemento
può essere mostrato o nascosto selezionando il simbolo
> alla sua sinistra):
• un gruppo di server predefinito di nome ‘Servers’
• un server predefinito nel gruppo ‘Servers’, di nome
‘PostgreSQL’
• Per poter accedere al contenuto di ‘PostgreSQL’ è
necessario inserire la password scelta durante
l’installazione se sceglierete di memorizzare
la password non verrà più richiesta in futuro.
Lorenzo Putzu Laboratorio D’Informatica 15
Ambiente di lavoro
• Dopo l’avvio del server ‘PostgreSQL’, al suo interno (nel pannello a
sinistra) verrà mostrato l’elemento ‘Databases’, che contiene le basi
di dati da esso gestite.
● Object-relational DBMS
● Architettura client-server
● Componenti principali:
– server (gestione DB, utenti)
– strumento di amministrazione: pgAdmin
Lorenzo Putzu Laboratorio D’Informatica 19
PostgreSQL: architettura client / server
client client
...
host client host client
client
pgAdmin ...
(amministratore)
client
PostgreSQL server
BD
host server
Lorenzo Putzu Laboratorio D’Informatica 20
Architettura di un DB PostgreSQL
server
...
23
Esempio
● Il corso di laurea in ABC eroga diversi insegnamenti che hanno un nome (es.:
Analisi Matematica 1), un codice univoco di cinque caratteri assegnato dalla
segreteria studenti, e un numero di crediti
● Al corso di laurea possono essere iscritti diversi studenti. Per ogni iscritto si
vogliono memorizzare nome, cognome, codice fiscale, data di nascita e numero di
matricola (una sequenza di cinque caratteri che identifica univocamente ogni
studente)
● Ogni studente ha un proprio piano di studi
● Per ogni esame superato da ogni studente si vogliono conoscere il voto (un intero
tra 18 e 30, oppure 30 e lode) e la data; un esame superato non può essere
ripetuto
24
Il modello logico relazionale
• Ideato negli anni ‘70 è tuttora il modello più utilizzato per rappresentare i
database
• Fondamenti: teoria degli insiemi.
• Componenti:
● base di dati relazionale: insieme di tabelle (relazioni) identificate da un nome
univoco
● tabella: insieme di righe (record, "tuple"), suddivise in un insieme di colonne
(campi, attributi) identificate da un nome univoco; ogni riga contiene dati su
un elemento di un dato insieme; l'ordine delle righe e delle colonne non è
definito; non possono esistere righe identiche
● valori di ogni colonna: appartengono a un dominio
Insegnamenti Esami
Nome Codice Crediti Studente Esame Data Voto Lode
Analisi I AMI01 9 00003 GEO01 10/9/2013 28 falso
Geometria GEO01 6 00001 AMI01 15/9/2013 24 falso
Fisica I FISI1 6 00003 AMI01 30/09/2013 27 falso
Chimica CHI01 6 00002 GEO01 28/9/2013 30 vero
Informatica INF01 6 00004 CHI01 19/9/2013 27 falso
Lezione 11
Basi Di Dati
E' vietata la copia, la rielaborazione, la riproduzione in qualsiasi forma dei contenuti e immagini
presenti nelle lezioni. E' inoltre vietata la diffusione, la redistribuzione e la pubblicazione dei
contenuti e immagini, incluse le registrazioni delle videolezionicon qualsiasi modalità e mezzo non
autorizzate espressamente dall'autore o da Unica
3
Esempio
● Il corso di laurea in ABC eroga diversi insegnamenti che hanno un nome (es.:
Analisi Matematica 1), un codice univoco di cinque caratteri assegnato dalla
segreteria studenti, e un numero di crediti
● Al corso di laurea possono essere iscritti diversi studenti. Per ogni iscritto si
vogliono memorizzare nome, cognome, codice fiscale, data di nascita e numero di
matricola (una sequenza di cinque caratteri che identifica univocamente ogni
studente)
● Ogni studente ha un proprio piano di studi
● Per ogni esame superato da ogni studente si vogliono conoscere il voto (un intero
tra 18 e 30, oppure 30 e lode) e la data; un esame superato non può essere
ripetuto
4
Il modello logico relazionale
• Ideato negli anni ‘70 è tuttora il modello più utilizzato per rappresentare i
database
• Fondamenti: teoria degli insiemi.
• Componenti:
● base di dati relazionale: insieme di tabelle (relazioni) identificate da un nome
univoco
● tabella: insieme di righe (record, "tuple"), suddivise in un insieme di colonne
(campi, attributi) identificate da un nome univoco; ogni riga contiene dati su
un elemento di un dato insieme; l'ordine delle righe e delle colonne non è
definito; non possono esistere righe identiche
● valori di ogni colonna: appartengono a un dominio
Insegnamenti Esami
Nome Codice Crediti Studente Esame Data Voto Lode
Analisi I AMI01 9 00003 GEO01 10/9/2013 28 falso
Geometria GEO01 6 00001 AMI01 15/9/2013 24 falso
Fisica I FISI1 6 00003 AMI01 30/09/2013 27 falso
Chimica CHI01 6 00002 GEO01 28/9/2013 30 vero
Informatica INF01 6 00004 CHI01 19/9/2013 27 falso
● Schema: struttura della BD, definita in fase di progettazione, costante nel tempo
– schema di una BD: schema delle sue tabelle, vincoli d'integrità tra tabelle
– schema di una tabella:
● nome della tabella
Insegnamenti
Nome Codice Crediti
Esami
Studente Esame Data Voto Lode
● impone che nella prima potranno essere inseriti solo numeri di matricola che
si trovano già nella seconda (in altre parole, si possono memorizzare solo
esami sostenuti da studenti che compaiono nella tabella "Studenti")
• Analogo discorso vale per il vincolo tra la colonna "Esame" della tabella "Esami" e
la colonna "Codice" della tabella "Insegnamenti".
● Vincolo di tupla: limita i valori che possono essere assunti da due o più colonne in
una stessa riga.
Esempio: colonne "Voto" (intero tra 18 e 30) e "Lode" (sì/no) di un esame: la lode
può essere assegnata (sì) solo se il voto è 30
• Interfacce:
– a "riga di comando" (es.: psql)
– grafiche (es.: pgAdmin)
• Sintassi:
CREATE TABLE "nome_tabella" (
"nome colonna" dominio ,
...
"nome colonna" dominio ,
PRIMARY KEY ("nome colonna", ..., "nome colonna")
);
Lezione 12
Basi Di Dati
E' vietata la copia, la rielaborazione, la riproduzione in qualsiasi forma dei contenuti e immagini
presenti nelle lezioni. E' inoltre vietata la diffusione, la redistribuzione e la pubblicazione dei
contenuti e immagini, incluse le registrazioni delle videolezionicon qualsiasi modalità e mezzo non
autorizzate espressamente dall'autore o da Unica
...
FOREIGN KEY ("nome colonna", ...)
REFERENCES "tabella referenziata" ("nome colonna", ...) ,
[ ON DELETE CASCADE / SET NULL / SET DEFAULT /
NO ACTION , ]
[ ON UPDATE CASCADE / SET NULL / SET DEFAULT /
NO ACTION , ]
...
• I comandi SQL che le realizzano fanno parte del data manipulation language
(DML).
● Trovare i nomi dei velisti che hanno prenotato almeno una barca
● Trovare i codici dei velisti che hanno prenotato una barca rossa, oppure una
barca verde
• Forma elementare:
● SELECT "nome_colonna", ..., "nome_colonna"
FROM "nome_tabella" ;
estrae da tutte le righe di una tabella i valori delle colonne indicate
● SELECT * FROM "nome_tabella" ;
restituisce l'intera tabella
• Esempi:
● Trovare il codice e il nome di tutti i velisti:
SELECT "vid","nome" FROM "Velisti";
● Trovare i dati su tutte le barche:
SELECT * FROM "Barche";
"Cognome"
● i valori costanti devono essere racchiusi tra apici singoli, per es.:
"Cognome" = 'Rossi'
"Data di nascita" >= '1990-01-01'
"età" > '25'
● i valori numerici (integer e real) possono anche essere scritti senza
● Trovare i nomi dei velisti con più di 40 anni, oppure con esperienza maggiore
di 7:
SELECT "vnome"
FROM "Velisti"
WHERE "età" > 40 OR "esperienza" > 7;
Velisti
vid vnome esperienza età
22 Dustin 7 45.0
31 Lubber 8 55.5 Barche
58 Rusty 10 35.0 bid bnome colore
Prenotazioni 101 Interlake blu
vid bid giorno 102 Interlake rosso
22 101 10/10/96 103 Clipper verde
58 103 11/12/96 104 Marine rosso
vnome
Rusty
1) SELECT B."colore"
FROM "Velisti" V, "Prenotazioni" P,
"Barche" B
WHERE V."vid" = P."vid" AND
P."bid" = B."bid" AND
V."vnome" = 'Lubber';
Lezione 13
Basi Di Dati
E' vietata la copia, la rielaborazione, la riproduzione in qualsiasi forma dei contenuti e immagini
presenti nelle lezioni. E' inoltre vietata la diffusione, la redistribuzione e la pubblicazione dei
contenuti e immagini, incluse le registrazioni delle videolezionicon qualsiasi modalità e mezzo non
autorizzate espressamente dall'autore o da Unica
SELECT *
FROM "Velisti"
WHERE "esperienza" > ANY
(SELECT "esperienza"
FROM "Velisti"
WHERE "vnome" = 'Lubber');
● Restituiscono un numero, contenuto in una tabella con una sola colonna e una
sola riga
colonne indicate
● SUM ([DISTINCT] "colonna"): calcola la somma dei valori di colonna nella
righe selzionate (se è presente DISTINCT, i valori duplicati vengono contati una
sola volta)
● AVG ([DISTINCT] "colonna"): come sopra (valor medio)
Lezione 14
Basi Di Dati
E' vietata la copia, la rielaborazione, la riproduzione in qualsiasi forma dei contenuti e immagini
presenti nelle lezioni. E' inoltre vietata la diffusione, la redistribuzione e la pubblicazione dei
contenuti e immagini, incluse le registrazioni delle videolezionicon qualsiasi modalità e mezzo non
autorizzate espressamente dall'autore o da Unica
● Relazioni (associazioni)
– grado
– vincoli di cardinalità
● Entità deboli
Impiegato Dipartimento
Impiegato Data_nascita
CF
Stipendio
Nome_batt
Sesso
Cognome Città Via N_civico
Impiegato
CF Data_nascita
Nome_batt Cognome
Città Via N_civico
Nome_batt Cognome
Città Via N_civico
Persona_a_carico
Note: per le entità Progetto e Dipartimento
esistono due identificatori distinti. L'entità
Sesso
Persona_a_carico non ha invece un
Nome Data_nascita Parentela
identificatore.
Nome_batt Cognome
i1 i2 i3 i4 i5 d1 d2 d3
i2 d1 i4 d3
Lavora_per i1 d1 i3 d2 i5 d3
... ...
Impiegato
Data_inizio_direzione
Dirige
Dipartimento
Lorenzo Putzu Laboratorio D’Informatica 13
Relazioni (associazioni)
• Una relazione può anche sussistere tra elementi di una stessa entità. Tali
relazioni si dicono ricorsive. Ad esempio: il supervisore di un impiegato è
anch'esso un impiegato dell'azienda.
• Per chiarezza, nelle relazioni ricorsive è utile indicare esplicitamente il ruolo di
ogni elemento dell'entità corrispondente (per es., usando frecce per legare la
relazione alle entità).
Impiegato
è supervisore di
Impiegato i1 i2 i3 i4 i5
massimo: N
● un dato impiegato quanti supervisori può avere?
è supervisore di
Impiegato
(0,N)
(0,1)
Supervisore
è supervisionato da
Impiegato Familiare
(0,N) Parentela
... (1,1)
CF
Persona_a_carico
Nome
Data_nascita Sesso
Nome_batt Cognome
Lorenzo Putzu Laboratorio D’Informatica 22
Schema E-R completo dell’azienda Città
(1,N) (1,1)
Lavora su Progetto Gestione
Ore
(1,N)
(1,N) Sede
Nome Codice
(0,N) (0,1) (1,1) (1,N)
Direzione (1,N)
Supervisore Impiegato (1,N)
Dipartimento Sedi
Data
(0,1)
(1,1) (1,N)
Afferenza
Nome CF Nome Codice
Stipendio Sesso Data_nascita Indirizzo
Nome_batt Cognome
(0,N)
Via Città N_civico Data_nascita
Familiare
(1,1) Nome_batt
Persona_a_carico
Parentela Cognome
Nome
Lorenzo Putzu Laboratorio D’Informatica Sesso 23
Schema E-R completo del corso di laurea
(0,N) (0,N)
Studente Esame Insegnamento
Nome
Matricola CF Data_nascita Voto Data Titolo Codice CFU
Cognome
Nome_batt
Lorenzo Putzu Laboratorio D’Informatica 24
Progettazione logica
• La progettazione logica può essere eseguita a partire al modello E-R,
traducendo quest'ultimo in un modello logico attraverso una sequenza di tre
passi:
1. traduzione delle entità forti
2. traduzione delle entità deboli
3. traduzione delle relazioni
• Il passo 3 dipende dal tipo di ciascuna relazione
• Una relazione R di tipo uno a uno tra le entità E1 e E2, associate alle tabelle T1 e T2,
può essere tradotta in tre modi (di seguito si indicano con c1 e c2 le cardinalità
minime di E1 e E2 in R):
• aggiungendo a T1 le colonne corrispondenti agli eventuali attributi semplici di R e
alla chiave primaria di T2 (suggerito se c1 = 1 e c2 = 0);
• aggiungendo a T2 le colonne corrispondenti agli eventuali attributi semplici di R e
alla chiave primaria di T1 (suggerito se c1 = 0 e c2 = 1);
• costruendo una nuova tabella T, con colonne corrispondenti agli eventuali
attributi semplici di R e alle chiavi primarie di T1 e T2 (suggerito se c1 = c2 = 0);
una qualsiasi delle chiavi esterne sarà la chiave primaria di T.
• Se c1 = c2 = 1, una qualsiasi delle scelte 1) e 2) è adeguata. I criteri indicati hanno lo
scopo di evitare la presenza di colonne in T1 o in T2 il cui valore sia NULL in qualche
riga.
Lorenzo Putzu Laboratorio D’Informatica 29
3. Traduzione delle relazioni uno a molti
• Una relazione R di tipo molti a molti tra le entità E1 e E2, associate alle tabelle T1 e
T2, si traduce costruendo una nuova tabella T, con colonne corrispondenti agli
eventuali attributi semplici di R, e alle chiavi primarie di T1 e T2.
• Tabelle:
● Impiegato (Nome_batt, Cognome, Sesso, Data_nascita, CF, Via, Città, N_civico, Stipendio, Dipartimento,
Supervisore)
● Dipartimento (Nome, Numero, Direttore, Data_inizio_direzione)
● Sede (Città)
● Progetto (Nome, Numero, Dipartimento, Sede)
● Persona_a_carico (Nome_batt, Cognome, Sesso, Data_nascita, Impiegato, Parentela)
● Sedi (Città, Dipartimento)
● Lavora_su (Impiegato, Progetto, Ore)
Nome_batt Cognome
Lorenzo Putzu Laboratorio D’Informatica 36
Soluzione: schema logico
• Tabelle:
● Disco (Codice, Titolo, Anno)
● Autore (Nome_batt, Cognome, Nome_arte, Data_nascita)
● Inciso_da (Autore, Disco)
● Brano (Titolo, Durata, Disco)
Degenza
CF (1,N)
Reparto)
● Pazienti (Nome_batt, Cognome, CF, Tessera_SSN, Data_nascita)