SlideShare a Scribd company logo
1 of 77
Management Analytics
Excel e Basi Dati
Giovanni Della Lunga
giovanni.dellalunga@gmail.com
MASTER BIG DATA, ANALYTICS AND TECHNOLOGIES FOR MANAGEMENT
Fonti Dati per Excel
Una breve introduzione
Di cosa stiamo parlando?
3
The Web
Relational
Databases
Automated Data
Acquisition using VBA
Data
Models
Non Relational
Databases
Mongo Query Json file
Nozioni di base
»Un database è un insieme integrato di informazioni omogenee, che
fornisce una serie di strumenti, come tabelle, query, maschere e
report, per la catalogazione, l’ordinamento e la ricerca dei dati.
»Prima di entrare nel vivo della presentazione è necessario introdurre i
termini più importanti che è indispensabile conoscere per affrontare
la gestione dei database…
Nozioni di base
» Gli elementi costitutivi di un database sono i seguenti :
» I campi : un campo è uno spazio nel database che contiene un’unità
d’informazione, come un nome, un numero di telefono, una data. Quando si crea
un database è necessario includere un campo per ogni categoria di dati a cui si è
interessati.
» I record : un record è costituito da un insieme di campi riferiti ad un singolo
soggetto. In un database che raccoglie i dati dei clienti, per esempio, tutte le
informazioni relative a uno stesso cliente sono registrate in un record.
» Le tabelle : una tabella è un elenco che visualizza più record
contemporaneamente. Più precisamente, ogni riga di una tabella di un database è
costituita da un record, ognuno dei quali è suddiviso in vari campi che
costituiscono le colonne.
Nozioni di base
»Il database può essere pensato come una serie di tabelle, ognuna
delle quali contiene informazioni omogenee.
»In un database relazionale i dati non sono memorizzati in un’unica
grande tabella, ma in più tabelle tutte in relazione tra loro, tanto che
le informazioni di diverse tabelle possono essere unite ed è possibile
eseguire ricerche in più tabelle contemporaneamente.
 Definizione : un database relazionale è un database in grado di gestire più
tabelle correlate ed estrarre informazioni da più tabelle
contemporaneamente.
Excel Data Retrival
»Siamo in grado di recuperare i dati in Excel da diverse fonti esterne:
7
Excel Data Retrival
»In generale possiamo recuperare dati nelle diverse forme, utilizzando
diverse tecniche. In queste lezioni approfondiremo l’utilizzo dei
seguenti approcci:
•ADO, RecordSets (rs), and SQL statements
•HTTP Request
•Usare MongoDB
8
ADO VBA Programming
ActiveX Data Object
Che cos’è ADO
» ADO è l'interfaccia piu' usata per accedere ai
database sotto Windows, non solo mediante ASP,
ma anche mediante Visual Basic, C/C++ ed altri
ambienti di sviluppo.
» Con ADO si utilizza un data provider che fa da
tramite fra la sorgente dati e l’applicativo
consentendo, indipendentemente dal linguaggio
di programmazione scelto e dalla fonte dati, di
utilizzare sempre lo stesso criterio di
consultazione;
» ADO viene distribuito con Excel-VBA tramite una
libreria che si chiama ADODB (Microsoft ActiveX
Data Object 6.1 Library) e che comprende tutti gli
oggetti ADO adattandosi quindi alla maggior parte
dei progetti
ADO per DB
» Il modello ADO consiste di numerosi oggetti; di
questi i più importanti sono
 Oggetto CONNECTION: contiene informazioni
riguardanti il fornitore dei dati e lo schema del
database;
 Oggetto RECORDSET: contiene tutti o parte dei
records di una tabella del database indicato
nell’oggetto Connection;
 Oggetti FIELD: si trovano all’interno degli oggetti
Recordset e rappresentano le colonne delle tabelle
del database;
 Oggetti COMMAND: permettono di eseguire
direttamente varie tipologie di comandi incluse
query SQL;
ADO per DB
»Per far sapere al Visual Basic di quali
oggetti stiamo parlando occorre
preliminarmente aprire la finestra di
dialogo Riferimenti dal menu Strumenti
dell’editor VBA e far scorrere il
lunghissimo elenco di elementi fino ad
arrivare ai due componenti che ci
servono che si chiamano:
 Microsoft ActiveX Data Objects 6.1 Library
 Microsoft ActiveX Data Objects Recordset
2.8 Library
ADO – L’oggetto CONNECTION
»Il sistema per poter accedere ad un’origine dati (database, file di
testo, cartelle di Excel, etc …) è rappresentato dalla connection, la
quale ha come requisito principale l’appoggio ad un data-provider
OLE-DB, la cui funzione è quella di colloquiare in modo diretto e
corretto con la fonte dati prescelta;
»L’oggetto connection contiene solo le informazioni necessarie per
poter accedere alla fonte dati quali, ad esempio, il percorso, la
password, il nome dell’utente, il nome del DNS per ODBC, etc... Ed
una volta aperto, cioè a connessione avvenuta, è possibile iniziare a
colloquiare con il contenitore prescelto;
ADO – L’oggetto CONNECTION
»La sequenza di utilizzo è la seguente:
 Configurazione della connessione
 Apertura della connessione
 Elaborazione Dati
 Chiusura della connessione
ADO – L’oggetto CONNECTION
»La sequenza di utilizzo è
la seguente:
 Configurazione della
connessione
 Apertura della
connessione
 Elaborazione Dati
 Chiusura della
connessione
Step 1: Dichiare una variabile di tipo oggetto
ADODB.Connection e istanziare una nuova connessione
Dim cn As ADODB.Connection
Set cn= New ADODB.connection
Step 2: Specificare la Stringa di Connessione
cn.ConnectionString = "Data Source=" & ThisWorkbook.Path
& "newsvendor.mdb“
Step 3: Specificare il Data Provider
cn.Provider = "Microsoft Jet 4.0 OLE DB Provider"
Recordset
»Un recordset è semplice un insieme di records (rows);
ȏ assimilabile ad una tabella di database temporanea che contiene il
risultato di una query;
»Una tipica sequenza operativa con l’oggetto recordset è la seguente:
 Apertura di un recordset (attraverso una connessione)
 Elaborazione dati
 Chiusura del recordset
Recordset
»Una tipica sequenza
operativa con l’oggetto
recordset è la seguente:
 Apertura di un recordset
(attraverso una connessione)
 Elaborazione dati
 Chiusura del recordset
Step 1: Dichiarare una variabile di tipo Recordset ed
istanziare l’oggetto (si noti l’uso della parola chiave set)
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Step 2: Specificare la connessione
rs.Open “Tabella", cn
Dove “Tabella” è il nome della tabella che intendiamo
scaricare.
Recordset
»Metodi dell’oggetto RECORDSET
 AddNew – aggiunge un nuovo record vuoto alla fine del RECORDSET;
 CancelUpdate – cancella tutte le modifiche fatte nel RECORD corrente;
 Delete – cancella il RECORD corrente;
 MoveFirst – Sposta il puntatore del record al primo record del RECORDSET;
 MoveNext – Muove il puntatore del record al record successivo a quello
correntemente in uso;
 Update – Salva le modifiche del record corrente;
Recordset
»La funzione EOF
 EOF esegue un test per
verificare se siamo giunti alla
fine del RECORDSET
 La funzione EOF ritorna un
valore logico VERO se il
puntatore del record è
posizionato oltre la fine del
RECORDSET; altrimenti la
funzione ritorna FALSO;
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open “Demand", cn
Do Until rs.EOF
count = count + 1
rs.MoveNext
Loop
Questo esempio permette di contare il numero di record
presenti nel RECORDSET. Il flusso del programma esce dal
ciclo condizionale quando la fine del RECORDSET viene
raggiunta. Si noti l’utilizzo del metodo MoveNext per
avanzare di un record all’interno del ciclo.
Metodo Close
»Un oggetto di tipo RECORDSET dovrebbe venire chiuso quando non
risulta più necessario
rs.Close
»In maniera analoga, una volta terminato l’utilizzo di una connessione,
anche questa dovrebbe essere chiusa per non lasciare connessioni
appese al database
cn.Close
ADO VBA Programming
Alcuni semplici esempi con MS Access
Semplice Esempio (1/8)
Dim dbPath As String
Dim dbFile As String
dbPath = "C:UsersUserGoogle DriveSeminari e Lezioni2017Uni Firenze - MABIDAdata"
dbFile = "esempi_modulo_2.accdb"
'declare conn to be a Connection -
Dim conn As ADODB.Connection
' make a connection object -
Set conn = New ADODB.Connection
' specify what kind of data provider it is -
conn.Provider = "Microsoft.ACE.OLEDB.12.0"
' open the connection on one database -
conn.Open dbPath & dbFile
' declare a recordset -
Dim myTableRS As ADODB.Recordset
' make one -
Set myTableRS = New ADODB.Recordset
' open it using a table in the database, and the connection
myTableRS.Open "Titoli", conn, adOpenDynamic, adLockPessimistic
Semplice Esempio (2/8)
' go to start of recordset -
myTableRS.MoveFirst: k = 1
' until we reach the end..
Do Until myTableRS.EOF
' display the 'Titolò field in current cell
Cells(k, 1).Value = myTableRS.Fields("Titolo")
' move next row
myTableRS.MoveNext: k = k + 1
Loop
'close the recordset
myTableRS.Close
Set myTableRS.ActiveConnection = Nothing
' and the connection
conn.Close
Set conn = Nothing
Semplice Esempio (3/8)
Dim wanted As String
' note the use of "'"
wanted = "'Adams, Pat'"
'wanted = InputBox("Text to be searched", "Input search")
myTableRS.Find "Autore = " & wanted
If Not myTableRS.EOF Then
MsgBox myTableRS.Fields("Autore")
Else
MsgBox "Not found"
End If
»Il metodo FIND
Semplice Esempio (4/8)
myTableRS.Open "myTable", conn, adOpenStatic, adLockOptimistic
myTableRS.MoveFirst
Do While Not myTableRS.EOF
myTableRS.Fields("PhoneNumber") = myTableRS.Fields("PhoneNumber") + 1
myTableRS.Update
myTableRS.MoveNext
Loop
»Il metodo UPDATE
Semplice Esempio (5/8)
myTableRS.Open "myTable", conn, adOpenStatic, adLockOptimistic
myTableRS.MoveFirst
Do While Not myTableRS.EOF
myTableRS.Fields("PhoneNumber") = myTableRS.Fields("PhoneNumber") + 1
myTableRS.MoveNext
Loop
myTableRS.Updatebatch
»Il metodo UPDATEBATCH
Semplice Esempio (6/8)
»Inserimento di nuove righe
»Cancellazione di righe
myTableRS.AddNew
myTableRS.Fields("Autore") = "Della Lunga, Giovanni"
myTableRS.Fields("ID_Au") = 1000
myTableRS.Update
I nuovi record sono aggiunti alla fine della tabella.
In un database relazione l’ordine dei record nelle tabelle non
riveste particolare importanza
myTableRS.Find "ID = 1000"
If Not myTableRS.EOF Then
myTableRS.Delete
myTableRS.Update
MsgBox ("Record deleted")
Else
MsgBox ("No matching record")
End If
Questo frammento di codice cancella
una riga il cui ID field è uguale al valore
inserito (1000)
.delete cancella il record corrente dopo
aver eseguito l’istruzione update
Semplice Esempio (7/8)
myTableRS.Open "Select ID_Au, Autore From Autori", conn, adOpenDynamic,
adLockPessimistic
'
Dim i As Integer
Do While Not myTableRS.EOF
For i = 1 To myTableRS.Fields.Count
Debug.Print myTableRS.Fields(i - 1),
Next
Debug.Print
myTableRS.MoveNext
Loop
»Utilizziamo un pò di SQL (anche se ancora non sappiamo cos’è!)
Semplice Esempio (8/8)
Dim myCommand As ADODB.Command
Set myCommand = New ADODB.Command
myCommand.ActiveConnection = conn
myCommand.CommandText = "INSERT INTO Autori (ID_Au, Autore) VALUES (1000, 'Della
Lunga, Giovanni')“
myCommand.Execute
»L’oggetto Command
In questo esempio il CommandText è un’istruzione SQL Standard
Non sono necessari oggetti di tipo RecordSet
Il cursore
» Il cursore rappresenta una
sorta di puntatore al record
correntemente attivo;
» Esistono diversi tipi di cursori
con diversi effetti;
» La scelta del cursore viene
fatta prima di aprire il record
set;
» Accanto vediamo una
sintetica descrizione dei vari
tipi di cursore disponibili
(fonte Microsoft).
» Static. Is snapshot – changes by other users are
invisible. adOpenStatic
» ForwardOnly. Like the above but you can only
move forward through rows – more efficient.
adOpenForwardOnly
» Dynamic. Changes by others seen, move
anywhere. adOpenDynamic
» Keyset. Like dynamic, but can't see rows added
by others. adOpenKeyset
» Nei nostri esempi abbiamo sempre utilizzato il
tipo Dynamic.
Data Locking
» Qualora due o più utenti
processino lo stesso database
nello stesso tempo, potrebbero
sovrascrivere i dati l’un l’altro;
» Per prevenire questa possibilità si
utilizzano i ‘lock’;
» Il primo utente pone un lock sui
dati che sta utilizzando
prevenendo così la possibilità che
un secondo utente possa
modificare i dati nello stesso
tempo;
» adLockReadOnly - you are only reading
records so they are not locked
» adLockPessimistic – record locked when
you access it, released when finished
» adLockOptimistic – record only locked
when you update it – might go wrong
» adLockBatchOptimistic - only locked
when do batch update
ADO VBA Programming
Accesso ad una base dati SQL Server
Acquisire dati da Microsoft SQL Server
» Excel è già predisposto per una rapida connessione ad un DB SQL Server…
Acquisire dati da Microsoft SQL Server
» Acquisire la stringa di connessione
 Selezioniamo nel nostro computer il file con
estensione .odc che viene salvato al termine
del collegamento con SQL Server;
 Editiamo il file con un editor di testo
qualunque;
 Scorriamo il testo senza modificarlo fino a
raggiungere la sezione individuata dai tag
<odc:ConnectionString> …
</odc:ConnectionString>;
 Selezioniamo tutto il blocco di caratteri che si
trova fra queste due stringhe e facciamone
una copia da incollare nel nostro modulo vba;
 Ai fini del risultato che ci interessa, alcuni degli
elementi non sono necessari per cui, volendo,
la stringa può anche essere semplificata;
Acquisire dati da Microsoft SQL Server
' dichiariamo connDati come ADODB.Connection
Dim connDati As ADODB.Connection
' rsDati indica il nostro recordset
Dim rsDati As ADODB.Recordset
' la variabile lstrConnection conterrà la stringa di connessione
Dim lstrConnection As String
' infine lstrSQL il comando SQL da utilizzare
Dim lstrSQL As String
lstrConnection = "Provider=SQLOLEDB.1;" & _
"Integrated Security=SSPI;" & _
"Data Source=laptop-cirfa6ne;" & _
"Workstation ID=LAPTOP-CIRFA6NE;" & _
"Initial Catalog=SQL_EXCEL"
La sintassi della stringa di
connessione varia da un DB
all'altro. Essenzialmente può
essere composta da:
Provider: Il tipo di provider OLE-
Db usato per la connessione
Initial File Name o Data Source: Il
path fisico del DataBase
(compreso il nome del file)
Initial Catalog: Il nome del
database
User ID: L'user name necessario
per la connessione
Password: La password per il
nome utente specificato
ADO VBA Programming
Accesso ad una base dati MySQL
Acquisire Dati da MySQL
»Possiamo ottenere gli stessi servizi in Excel con VBA anche
interfacciandoci con un database MySQL a condizione di aver
predisposto un’adeguata connessione ODBC;
»Le funzionalità ODBC in MySQL non sono integrate nello strumento
come in SQL Server ma vanno installate deliberatamente scaricando
un file di sistema dal sito web di MySQL e istallandolo;
»Nome File (per Windows a 64 bit!)
 mysql-connector-odbc-5.3.8-winx64.msi
»Download
 https://dev.mysql.com/downloads/connector/odbc/
Acquisire Dati da MySQL
» Che cos’è ODBC
 ODBC è l’acronimo di Open Database Connectivity, è una API standard per la connessione ai DBMS.
 Questa API è indipendente dai linguaggi di programmazione dai sistemi di database e dal sistema
operativo.
 L’ API è un insieme di procedure disponibili al programmatore, di solito raggruppate a formare un set di
strumenti specifici per un determinato compito.
 Le API permettono di evitare ai programmatori di scrivere tutte le funzioni dal nulla.
 In aggiunta al software ODBC, c’è bisogno di un driver specifico per poter accedere ad ogni diverso tipo
di DBMS.
 ODBC permette ai programmi che lo usano di inviare ai database stringhe SQL senza che ci sia bisogno
di conoscerne le API proprietarie. Genera automaticamente richieste che il sistema di database
utilizzato sia in grado di capire. Questo è un fattore molto positivo in quanto i programmi possono
connettersi a diversi tipi di database utilizzando più o meno lo stesso codice.
Acquisire Dati da MySQL
» Come Impostare un ODBC
 Per impostare un nuovo ODBC andare
su Pannello di controllo, poi Strumenti
di amministrazione, Origine dati (
ODBC ); aprire la finestra DNS di
sistema e premere sul pulsante
aggiungi.
 Arrivati a questo punto bisogna
selezionare su che tipo di database si
vuole lavorare (nel nostro caso MySQL
ANSI driver)
 Naturalmente è presente anche la
versione UNICODE!
Acquisire Dati da MySQL
» Al termine della procedura di installazione del
driver ODBC, nella finestra di dialogo riportata
a fianco, dobbiamo inserire
 Un nome convenzionale per il connettore ODBC
che stiamo creando;
 Una descrizione (facoltativa) che aiuti a ricordare a
che cosa serve quel connettore;
 Il nome del server, dell’utente e della password di
accesso a MySQL;
 Il nome del database MySQL col quale stabilire la
connessione;
Acquisire Dati da MySQL
lstrConnection = "DSN=ConnMySQL"
lstrSQL = " SELECT DISTINCT Titolo FROM sql_excel_biblioteca.Titoli " & _
" ORDER BY Titolo "
Set rsDati = New ADODB.Recordset
Set connDati = New ADODB.Connection
connDati.Open lstrConnection
rsDati.Open lstrSQL, connDati
ActiveSheet.Range("E2").CopyFromRecordset rsDati
rsDati.Close
Set rsDati = Nothing
connDati.Close
Set connDati = Nothing
Structured Query Language
Un’introduzione molto informale
Introduzione a SQL
» Prima di occuparci di cos’è e come si usa SQL cerchiamo di capire cosa si intende
con la parola database, che spesso in italiano viene tradotta come “base di dati”.
» Un database è una collezione di dati che viene gestita e organizzata da un
software specifico, il DBMS (DataBase Management System, Sistema di Gestione
di DataBase).
» Un DBMS è sostanzialmente uno strato software che si frappone fra l’utente ed i
dati veri e propri.
» Grazie a questo strato intermedio l’utente e le applicazioni non accedono ai dati
cosi’ come sono memorizzati effettivamente, cioè alla loro rappresentazione
fisica, ma ne vedono solamente una rappresentazione logica.
Introduzione a SQL
» Ciò permette un elevato grado di indipendenza fra le applicazioni e la
memorizzazione fisica dei dati. L’amministratore del database, se ne sente la
necessità, può decidere di memorizzare i dati in maniera differente o anche di
cambiare il DBMS senza che le applicazioni, e quindi gli utenti, ne risentano.
» La cosa importante è che non venga cambiata la rappresentazione logica di quei
dati, che è la sola cosa che i loro utilizzatori conoscono.
» Questa rappresentazione logica viene chiamata ‘Schema del databasè ed è la
forma di rappresentazione dei dati piu’ a basso livello a cui un utente del
database può accedere.
Database Relazionali
»Database relazionali: i database appartenenti a questa categoria si
basano sul modello relazionale la cui struttura principale è la
relazione, cioè una tabella bidimensionale composta da righe e
colonne.
»Ciascuna riga, che in terminologia relazionale viene chiamata tupla,
rappresenta un’entità che noi vogliamo memorizzare nel database.
»Le caratteristiche di ciascuna entità sono definite invece dalle colonne
delle relazioni, che vengono chiamate attributi.
»Entità con caratteristiche comuni, cioè descritti dallo stesso insieme di
attributi, faranno parte della stessa relazione.
Database Relazionali
» La struttura fondamentale del modello relazionale è appunto la “relazione”, cioè una tabella
bidimensionale costituita da righe (tuple) e colonne (attributi).
» Le relazioni rappresentano le entità che si ritiene essere interessanti nel database.
» Ogni istanza dell’entità troverà posto in una tupla della relazione, mentre gli attributi della
relazione rappresenteranno le proprietà dell’entità.
» Ad esempio, se nel database si dovranno
rappresentare delle persone, si potrà definire
una relazione chiamata “Persone”, i cui
attributi descrivono le caratteristiche delle
persone.
» Ciascuna tupla della relazione “Persone”
rappresenterà una particolare persona.
Chiavi Primarie
» Le tuple in una relazione sono un insieme nel senso matematico del termine, cioè
una collezione non ordinata di elementi differenti.
» Per distinguere una tupla da un’altra si ricorre al concetto di “chiave primaria”,
cioè ad un insieme di attributi che permettono di identificare univocamente una
tupla in una relazione.
» Naturalmente in una relazione possono esserci piu’ combinazioni di attributi che
permettono di identificare univocamente una tupla (“chiavi candidate”), ma fra
queste ne verra’ scelta una sola da utilizzare come chiave primaria.
» Gli attributi della chiave primaria non possono assumere il valore null (che
significa un valore non determinato), in quanto non permetterebbero piu’ di
identificare una particolare tupla in una relazione.
» Questa proprieta’ delle relazioni e delle loro chiavi primarie va sotto il nome di
integrita’ delle entita’ (entity integrity).
Creiamo il nostro Database di Esempio
» In pratica la creazione del database consiste nella creazione delle tabelle che lo
compongono.
» In realtà prima di poter procedere alla creazione delle tabelle normalmente
occorre creare in effetti il database, il che di solito significa definire uno spazio dei
nomi separato per ogni insieme di tabelle.
» In questo modo per un DBMS è possibile gestire più database indipendenti
contemporaneamente, senza che ci siano dei conflitti con i nomi che vengono
utilizzati in ciascuno di essi.
» La sintassi utilizzata dai più diffusi DBMS, è la seguente:
Creazione delle Tabelle
» Una volta creato il database è possibile creare le tabelle che lo compongono.
» L’istruzione SQL preposta a questo scopo è:
» nome_colonna: è il nome della colonna che compone la tabella. I nomi devono
iniziare con un carattere alfabetico.
» tipo_colonna: è l’indicazione del tipo di dato che la colonna potrà contenere.
Creazione delle Tabelle
» I principali tipi previsti dallo standard SQL sono:
» CHARACTER(n)
Una stringa a lunghezza fissa di esattamente n caratteri. CHARACTER può essere abbreviato con CHAR
» CHARACTER VARYING(n)
Una stringa a lunghezza variabile di al massimo n caratteri. CHARACTER VARYING può essere abbreviato con VARCHAR o CHAR VARYING.
» INTEGER
Un numero intero con segno. Può essere abbreviato con INT. La precisione, cioè la grandezza del numero intero che può essere memorizzato in una
colonna di questo tipo, dipende dall’implementazione del particolare DBMS.
» SMALLINT
Un numero intero con segno con precisione non superiore a INTEGER.
» FLOAT(p)
Un numero a virgola mobile, con precisione p. Il valore massimo di p dipende dall’implementazione del DBMS. è possibile usare FLOAT senza
indicazione della precisione, utilizzando quindi la precisione di default, anch’essa dipendente dall’implementazione. REAL e DOUBLE PRECISION sono
dei sinonimi per un FLOAT con una particolare precisione. Anche in questo caso le precisioni dipendono dall’implementazione, con il vincolo che la
precisione del primo non sia superiore a quella del secondo.
» DECIMAL(p,q)
Un numero a virgola fissa di almeno p cifre e segno, con q cifre dopo la virgola. DEC è un’abbreviazione per DECIMAL. DECIMAL(p) è un’abbreviazione
per DECIMAL(p,0). Il valore massimo di p dipende dall’implementazione.
» INTERVAL
Un periodo di tempo (anni, mesi, giorni, ore, minuti, secondi e frazioni di secondo).
» DATE, TIME e TIMESTAMP
Un preciso istante temporale. DATE permette di indicare l’anno, il mese e il giorno. Con TIME si possono specificare l’ora, i minuti e i secondi.
TIMESTAMP è la combinazione dei due precedenti. I secondi sono un numero con la virgola, permettendo cosi’ di specificare anche frazioni di
secondo.
Creazione delle Tabelle
Creazione delle Tabelle
Creazione delle Tabelle
Popolazione del Database
» INSERT, inserire una riga in una tabella
 L’istruzione SQL che effettua l’inserimento di una nuova riga in una tabella è INSERT. La
sintassi con cui essa viene usata più comunemente è:
» Popoliamo le nostre tabelle a partire dai dati in formato Excel…
SELECT, interrogare il database
»Nella lezione precedente abbiamo esaminato i costrutti che SQL
mette a disposizione per inserire i dati in un database relazionale.
»In questa e nelle prossime lezioni ci concentreremo sulle istruzioni
che ci permettono di estrarre i dati che ci interessano.
»L’istruzione SQL preposta a tale scopo è SELECT.
»L’interrogazione è la funzionalità più usata di un database e le
clausole di cui dispone l’istruzione SELECT sono numerose e a volte
possono dar luogo a combinazioni piuttosto complicate.
SELECT, interrogare il database
»La sintassi completa è la seguente:
SELECT [DISTINCT ] lista_elementi_selezione
FROM lista_riferimenti_tabella
[ WHERE espressione_condizionale ]
[ GROUP BY lista_colonne ]
[ HAVING espressione_condizionale ]
[ ORDER BY lista_colonne ]
SELECT, interrogare il database
» Come si vede, le uniche clausole obbligatorie sono SELECT e FROM. Quest’ultima,
detta clausola di selezione, stabilisce da quale tabella (o da quali) estrarre i dati,
mentre la prima è detta clausola di proiezione e stabilisce quali colonne devono
essere riportate nel risultato finale.
» La clausola WHERE definisce invece un filtro sulle righe che verranno analizzate,
mentre ORDER BY indica l’ordinamento da applicare al risultato finale. Se WHERE
non viene specificata, non viene applicato alcun filtro sulle righe, che quindi
vengono esaminate tutte. Se invece non viene specificato alcun ordinamento, le
righe vengono restituite senza un ordine definito, generalmente così come
vengono trovate in tabella.
SELECT, interrogare il database
» SELECT * FROM sql_excel_biblioteca.titoli;
» SELECT Titolo FROM sql_excel_biblioteca.titoli;
» SELECT Titolo, ISBN as Codice FROM sql_excel_biblioteca.titoli;
»Le possibili espressioni utilizzabili sono moltissime e dipendono in
gran parte dal database utilizzato, quindi spesso le stesse funzioni
hanno nomi o sintassi diverse in MySQL, Oracle o SQL Server.
Purtroppo ciò limita la portabilità delle espressioni tra i vari database.
Per i dettagli è quindi necessario ricorrere alla documentazione
ufficiale dei singoli database.
SELECT, interrogare il database
» DISTINCT, eliminare i duplicati
» La prima query che abbiamo visto restituirebbe righe duplicate nel caso in cui
nella tabella fossero presenti libri con lo stesso titolo. Per evitare ciò occorre
specificare l’opzione DISTINCT:
» SELECT DISTINCT Titolo FROM sql_excel_biblioteca.titoli;
» Questa opzione fa sì che nel risultato non ci siano righe uguali tra loro, ed è utile
soprattutto quando si lavora con i join. Un join (congiunzione) è una funzione che
stabilisce come combinare righe di due tabelle diverse per ottenere una tabella
unica. Si distinguono generalmente tre tipi di join, che vediamo di seguito.
SELECT, interrogare il database
» La clausola ORDER BY
 La clausola ORDER BY dell'SQL imposta l'ordinamento ascendente o discendente di una query. Per default
l'ordinamento è ascendente.
 La sintassi base è la seguente:
SELECT * FROM nome_tabella ORDER BY nome_campo
 In questo modo l'ordinamento è ascendente; per specificarlo è necessario utilizzare la clausola ASC:
SELECT * FROM nome_tabella ORDER BY nome_campo ASC
 Per specificare l'ordinamento decrescente, invece, è necessario utilizzare la clausola DESC:
SELECT * FROM nome_tabella ORDER BY nome_campo DESC
Le funzioni
» Lo standard SQL prevede numerose funzioni, che sono classificate in due grandi
famiglie:
» Funzioni di Aggregazione, operano su un insieme di valori (per esempio tutta
una colonna) e restituiscono un unico valore riepilogativo; si possono usare solo
all’interno di istruzioni SELECT;
» Funzioni Scalari, agiscono su un solo valore (l’argomento) e restituiscono un
valore basato sull’argomento;
 vedi esempi di funzioni scalari
Le funzioni
» Quelle che abbiamo visto finora sono funzioni scalari, che agiscono su un solo
valore;
» Le funzioni di aggregazione producono un risultato diverso rispetto alle funzioni
scalari;
» Non generano righe modificate ma producono un unico valore ottenuto
prendendo in considerazione tutta la colonna o le colonne indicate come
argomento;
» Vediamo un semplice esempio: vogliamo conoscere l’età media e l’anzianità di
servizio media degli impiegati i cui dati si trovano nella tabella Dipendenti…
Le funzioni
» Per ottenere la media delle età e delle anzianità
di servizio, possiamo usare la funzione di
aggregazione AVG()
Le funzioni
» La funzione AVG() agisce sull’argomento che viene inserito fra parentesi tonde,
che può essere il nome di una colonna oppure un’espressione;
» Oltre ad AVG() fanno parte dello standard SQL anche le funzioni SUM, COUNT,
MAX e MIN che sono recepite in tutte le implementazioni di SQL;
» In particolare la funzione COUNT consente tre formulazioni diverse
 COUNT(*) Conteggia tutte le righe di una tabella, comprese quelle che contengono valori
NULL
 COUNT(espressione) Conteggia tutte le righe che hanno valori diversi da NULL nella colonna
specificata con l’espressione;
 COUNT(DISTINCT espressione) Conteggia il numero di righe nella colonna indicata
dall’espressione che non contengono valori NULL e che hanno valori diversi.
La clausola GROUP BY
»In molti casi si usano le funzioni di aggregazione insieme con la
clausola GROUP BY;
»Quando si utilizza tale clausola si deve segnalare sia in SELECT sia in
GROUP BY la stessa(e) colonna(e) ;
»Esempio:
La clausola HAVING
»Non è consentito in SQL di ricorrere alla clausola WHERE per stabilire
un criterio di selezione riferito a valori raggruppati mediante la
clausola GROUP BY;
»Per ottenere il risultato che ci interessa dobbiamo servirci della
clausola HAVING che svolge correttamente il ruolo di WHERE in
riferimento ad un valore ottenuto mediante la clausola di
raggruppamento;
Lavorare con più tabelle
»Iniziamo dalla relazione uno a molti;
INDIRIZZI
TELEFONI
Chiave primaria Chiave esterna
Chiave primaria
Lavorare con più tabelle
»Nella terminologia SQL si chiama join (congiunzione, collegamento o
relazione) sia il risultato di una query eseguita su più tabelle, sia il
meccanismo che caratterizza la relazione fra le tabelle;
»Il collegamento è reso possibile dal fatto che le tabelle messe in
relazione hanno un campo in comune che viene richiamato
espressamente nella clausola WHERE;
»Questo campo può avere lo stesso nome nelle tabelle messe in join
ma non necessariamente (come nell’esempio appena visto);
»E’ essenziale però che la join avvenga fra colonne che hanno lo stesso
tipo di dati;
Lavorare con più tabelle
»Attenzione a specificare la join!!
»Senza specifica quello che si ottiene è il prodotto cartesiano delle
tabelle ed è un’insidia sempre latente quando si fanno le join;
»Esempio di query sbagliata:
Si noti l’assenza della clausola
WHERE
Lavorare con più tabelle
»La clausola JOIN
»Una query che utilizza un INNER JOIN restituisce tutte le righe che si
accoppiano e soltanto quelle;
Lavorare con più tabelle
»LEFT JOIN
 Possono esistere situazioni nelle quali si vogliono vedere tutti i record della
tabella del lato sinistro della relazione, che abbiano oppure no record con i
quali agganciarsi nel lato destro;
 In questi casi si può usare un left outer join;
Lavorare con più tabelle
»Relazioni molti a molti
 Per poter gestire questo tipo di
relazioni bisogna scomporle in
due o più relazioni uno a molti
creando contestualmente una
tabella che faccia da ponte e
consenta una relazione ordinata
fra le coppie di tabelle;
 Non è un concetto
immediatamente intuitivo per
cui passiamo subito ad un
esempio concreto;
Esercitazione
Un esempio di classificazione non supervisionata
Clustering con l’algoritmo k-means
» In questo esempio utilizzeremo una tecnica algoritmica che è entrata a far parte
dei metodi di Data Mining (DM) e che si chiama Clustering;
» In particolare si discuterà di un metodo di clustering detto partizionante, talvolta
chiamato anche “semplice”, che può essere realizzato con il noto algoritmo k-
means (o delle k-medie) sviluppato per la prima volta da MacQueen nel 1967.
» In linea generale, partendo da un dataset, il clustering si propone di individuare
delle regioni distinte nelle quali raggruppare dati in modo tale che i dati
all’interno di una stessa regione siano simili tra loro rispetto ad un criterio
(metrica) scelto inizialmente, mentre quelli in regioni differenti siano dissimili tra
loro.
» In seguito alla realizzazione di queste regioni o cluster, è l’utente esperto di
dominio, grazie all’aiuto di una o più tecniche di valutazione, che decide il
significato di tali raggruppamenti.
Clustering con l’algoritmo k-means
» L’algoritmo k-means, archetipo dei metodi di raggruppamento, è un algoritmo di
clustering che permette di suddividere gruppi di oggetti in k partizioni sulla base
dei loro attributi.
» Ogni cluster viene identificato mediante un centroide o punto medio. L’algoritmo
segue una procedura iterativa
Clustering con l’algoritmo k-means
» L’algoritmo può essere illustrato attraverso la seguente schematizzazione:
1. Scegliere un valore di k il numero totale di cluster da determinare.
2. Scegliere in modo casuale (spesso utilizzando un generatore di numeri
pseudocasuali) k dati nel dataset. Questi sono i centri iniziali (baricentri) dei
cluster.
3. Utilizzare la distanza euclidea per assegnare i restanti dati ai centri dei
cluster più vicini.
4. Utilizzare i dati in ogni cluster per calcolare una nuova media di ogni
cluster.
5. Se le nuove medie sono identiche a quelle calcolate in precedenza, il
processo termina; altrimenti, utilizzare le nuove medie come centri dei
cluster e ripetere i passi da 3 a 5.
Clustering con l’algoritmo k-means
» Come criterio di valutazione generale, una clusterizzazione ottimale per
l’algoritmo k-means è definita come una clusterizzazione che presenta il valore
minimo della somma dei quadrati delle differenze degli errori fra le osservazioni e
i centri dei cluster di appartenenza.
» Trovare una clusterizzazione ottimale per un dato valore di k è quasi impossibile
dal momento che bisognerebbe ripetere l’algoritmo per ognuna delle possibili
scelte dei centri iniziali dei cluster.
» Anche per poche centinaia di osservazioni non sarebbe pratico applicare k-means
più volte.
» Piuttosto, è prassi comune scegliere un criterio di conclusione dell’algoritmo,
come un valore massimo accettabile per l’errore quadratico ed eseguire
l’algoritmo finché il risultato raggiunto non soddisfa il criterio di conclusione
prestabilito.

More Related Content

What's hot

Capitolo 2 elementi di programmazione in vba
Capitolo 2   elementi di programmazione in vbaCapitolo 2   elementi di programmazione in vba
Capitolo 2 elementi di programmazione in vbaGiovanni Della Lunga
 
Lezione 11 - Vba E Excel
Lezione 11 - Vba E ExcelLezione 11 - Vba E Excel
Lezione 11 - Vba E ExcelRice Cipriani
 
Microsoft excel - didattica differenziata
Microsoft excel - didattica differenziataMicrosoft excel - didattica differenziata
Microsoft excel - didattica differenziataIacopo Pappalardo
 
Odg umbriafoglicalcolo
Odg umbriafoglicalcoloOdg umbriafoglicalcolo
Odg umbriafoglicalcoloLibreItalia
 
Open data e open source: come elaborare dati aperti
Open data e open source: come elaborare dati apertiOpen data e open source: come elaborare dati aperti
Open data e open source: come elaborare dati apertiLibreItalia
 
Progetto e sviluppo di un'applicazione per dispositivi mobili per la visualiz...
Progetto e sviluppo di un'applicazione per dispositivi mobili per la visualiz...Progetto e sviluppo di un'applicazione per dispositivi mobili per la visualiz...
Progetto e sviluppo di un'applicazione per dispositivi mobili per la visualiz...paolabassi91
 

What's hot (12)

Capitolo 2 elementi di programmazione in vba
Capitolo 2   elementi di programmazione in vbaCapitolo 2   elementi di programmazione in vba
Capitolo 2 elementi di programmazione in vba
 
Lezione 4 ogetti-vba
Lezione 4 ogetti-vbaLezione 4 ogetti-vba
Lezione 4 ogetti-vba
 
Lezione 1
Lezione 1Lezione 1
Lezione 1
 
Lezione 11 - Vba E Excel
Lezione 11 - Vba E ExcelLezione 11 - Vba E Excel
Lezione 11 - Vba E Excel
 
Microsoft excel - didattica differenziata
Microsoft excel - didattica differenziataMicrosoft excel - didattica differenziata
Microsoft excel - didattica differenziata
 
Database
DatabaseDatabase
Database
 
Odg umbriafoglicalcolo
Odg umbriafoglicalcoloOdg umbriafoglicalcolo
Odg umbriafoglicalcolo
 
Open data e open source: come elaborare dati aperti
Open data e open source: come elaborare dati apertiOpen data e open source: come elaborare dati aperti
Open data e open source: come elaborare dati aperti
 
Database NewAGE
Database NewAGEDatabase NewAGE
Database NewAGE
 
Basi Di Dati 01
Basi Di Dati 01Basi Di Dati 01
Basi Di Dati 01
 
Progetto e sviluppo di un'applicazione per dispositivi mobili per la visualiz...
Progetto e sviluppo di un'applicazione per dispositivi mobili per la visualiz...Progetto e sviluppo di un'applicazione per dispositivi mobili per la visualiz...
Progetto e sviluppo di un'applicazione per dispositivi mobili per la visualiz...
 
Ado net (versione 1 e 2)
Ado net (versione 1 e 2)Ado net (versione 1 e 2)
Ado net (versione 1 e 2)
 

Similar to Excel development e sql 2.1

MongoDB
MongoDBMongoDB
MongoDBNaLUG
 
Formez Opendata Inps - webinar 29 marzo 2012
Formez Opendata Inps - webinar 29 marzo 2012Formez Opendata Inps - webinar 29 marzo 2012
Formez Opendata Inps - webinar 29 marzo 2012INPSDG
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-databaseMajong DevJfu
 
Deploy MongoDB su Infrastruttura Amazon Web Services
Deploy MongoDB su Infrastruttura Amazon Web ServicesDeploy MongoDB su Infrastruttura Amazon Web Services
Deploy MongoDB su Infrastruttura Amazon Web ServicesStefano Dindo
 
Linked Open Data di Vittorio Di Tomaso
Linked Open Data di Vittorio Di TomasoLinked Open Data di Vittorio Di Tomaso
Linked Open Data di Vittorio Di TomasoCELI
 
MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009Massimiliano Dessì
 
Master Informatica del Testo – Edizione elettronica - Arezzo - 2012
Master Informatica del Testo – Edizione elettronica - Arezzo - 2012Master Informatica del Testo – Edizione elettronica - Arezzo - 2012
Master Informatica del Testo – Edizione elettronica - Arezzo - 2012Walter Volpi
 
Business Intelligence & Analytics
Business Intelligence & AnalyticsBusiness Intelligence & Analytics
Business Intelligence & AnalyticsDavide Mauri
 
I metadati per il catalogo nazionale Open Data DATI.GOV.IT - Conferenza Open...
I metadati per il catalogo nazionale Open Data  DATI.GOV.IT - Conferenza Open...I metadati per il catalogo nazionale Open Data  DATI.GOV.IT - Conferenza Open...
I metadati per il catalogo nazionale Open Data DATI.GOV.IT - Conferenza Open...Costantino Landino
 

Similar to Excel development e sql 2.1 (20)

Office & VBA - Giorno 6
Office & VBA - Giorno 6Office & VBA - Giorno 6
Office & VBA - Giorno 6
 
Office & VBA - Giorno 7
Office & VBA - Giorno 7Office & VBA - Giorno 7
Office & VBA - Giorno 7
 
MongoDB
MongoDBMongoDB
MongoDB
 
MongoDB
MongoDBMongoDB
MongoDB
 
Formez Opendata Inps - webinar 29 marzo 2012
Formez Opendata Inps - webinar 29 marzo 2012Formez Opendata Inps - webinar 29 marzo 2012
Formez Opendata Inps - webinar 29 marzo 2012
 
Basi di dati
Basi di dati Basi di dati
Basi di dati
 
couchbase mobile
couchbase mobilecouchbase mobile
couchbase mobile
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-database
 
Deploy MongoDB su Infrastruttura Amazon Web Services
Deploy MongoDB su Infrastruttura Amazon Web ServicesDeploy MongoDB su Infrastruttura Amazon Web Services
Deploy MongoDB su Infrastruttura Amazon Web Services
 
Database introduzione
Database introduzioneDatabase introduzione
Database introduzione
 
Linked Open Data di Vittorio Di Tomaso
Linked Open Data di Vittorio Di TomasoLinked Open Data di Vittorio Di Tomaso
Linked Open Data di Vittorio Di Tomaso
 
MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009
 
Database relazionali
Database relazionaliDatabase relazionali
Database relazionali
 
Master Informatica del Testo – Edizione elettronica - Arezzo - 2012
Master Informatica del Testo – Edizione elettronica - Arezzo - 2012Master Informatica del Testo – Edizione elettronica - Arezzo - 2012
Master Informatica del Testo – Edizione elettronica - Arezzo - 2012
 
Corso access 2010
Corso access 2010Corso access 2010
Corso access 2010
 
Business Intelligence & Analytics
Business Intelligence & AnalyticsBusiness Intelligence & Analytics
Business Intelligence & Analytics
 
Oracle 1
Oracle 1Oracle 1
Oracle 1
 
I metadati per il catalogo nazionale Open Data DATI.GOV.IT - Conferenza Open...
I metadati per il catalogo nazionale Open Data  DATI.GOV.IT - Conferenza Open...I metadati per il catalogo nazionale Open Data  DATI.GOV.IT - Conferenza Open...
I metadati per il catalogo nazionale Open Data DATI.GOV.IT - Conferenza Open...
 
Thingspeak: integrazione
Thingspeak: integrazioneThingspeak: integrazione
Thingspeak: integrazione
 
Data flow
Data flowData flow
Data flow
 

More from Giovanni Della Lunga (20)

Halloween Conference 2023 - Introduction to Deep Learning
Halloween Conference 2023 - Introduction to Deep LearningHalloween Conference 2023 - Introduction to Deep Learning
Halloween Conference 2023 - Introduction to Deep Learning
 
Copule slides
Copule slidesCopule slides
Copule slides
 
Introduction to python programming 2
Introduction to python programming   2Introduction to python programming   2
Introduction to python programming 2
 
Introduction to python programming 1
Introduction to python programming   1Introduction to python programming   1
Introduction to python programming 1
 
Excel development e sql 1.3
Excel development e sql   1.3Excel development e sql   1.3
Excel development e sql 1.3
 
Cavalcando onde gravitazionali
Cavalcando onde gravitazionaliCavalcando onde gravitazionali
Cavalcando onde gravitazionali
 
Simulation methods finance_2
Simulation methods finance_2Simulation methods finance_2
Simulation methods finance_2
 
Simulation methods finance_1
Simulation methods finance_1Simulation methods finance_1
Simulation methods finance_1
 
Viaggi nel tempo [2015 01 24]
Viaggi nel tempo [2015 01 24]Viaggi nel tempo [2015 01 24]
Viaggi nel tempo [2015 01 24]
 
Universo lato oscuro
Universo lato oscuroUniverso lato oscuro
Universo lato oscuro
 
Metodi numerici
Metodi numericiMetodi numerici
Metodi numerici
 
Breve intro caos
Breve intro caosBreve intro caos
Breve intro caos
 
Fg esercizi 4
Fg esercizi 4Fg esercizi 4
Fg esercizi 4
 
2 magnetismo
2 magnetismo2 magnetismo
2 magnetismo
 
1 elettrostatica
1 elettrostatica1 elettrostatica
1 elettrostatica
 
Fenomeni termici
Fenomeni termiciFenomeni termici
Fenomeni termici
 
1 meccanica fluidi
1 meccanica fluidi1 meccanica fluidi
1 meccanica fluidi
 
1 spazio tempo_movimento
1 spazio tempo_movimento1 spazio tempo_movimento
1 spazio tempo_movimento
 
2 principi dinamica
2 principi dinamica2 principi dinamica
2 principi dinamica
 
3 energia
3 energia3 energia
3 energia
 

Excel development e sql 2.1

  • 1. Management Analytics Excel e Basi Dati Giovanni Della Lunga giovanni.dellalunga@gmail.com MASTER BIG DATA, ANALYTICS AND TECHNOLOGIES FOR MANAGEMENT
  • 2. Fonti Dati per Excel Una breve introduzione
  • 3. Di cosa stiamo parlando? 3 The Web Relational Databases Automated Data Acquisition using VBA Data Models Non Relational Databases Mongo Query Json file
  • 4. Nozioni di base »Un database è un insieme integrato di informazioni omogenee, che fornisce una serie di strumenti, come tabelle, query, maschere e report, per la catalogazione, l’ordinamento e la ricerca dei dati. »Prima di entrare nel vivo della presentazione è necessario introdurre i termini più importanti che è indispensabile conoscere per affrontare la gestione dei database…
  • 5. Nozioni di base » Gli elementi costitutivi di un database sono i seguenti : » I campi : un campo è uno spazio nel database che contiene un’unità d’informazione, come un nome, un numero di telefono, una data. Quando si crea un database è necessario includere un campo per ogni categoria di dati a cui si è interessati. » I record : un record è costituito da un insieme di campi riferiti ad un singolo soggetto. In un database che raccoglie i dati dei clienti, per esempio, tutte le informazioni relative a uno stesso cliente sono registrate in un record. » Le tabelle : una tabella è un elenco che visualizza più record contemporaneamente. Più precisamente, ogni riga di una tabella di un database è costituita da un record, ognuno dei quali è suddiviso in vari campi che costituiscono le colonne.
  • 6. Nozioni di base »Il database può essere pensato come una serie di tabelle, ognuna delle quali contiene informazioni omogenee. »In un database relazionale i dati non sono memorizzati in un’unica grande tabella, ma in più tabelle tutte in relazione tra loro, tanto che le informazioni di diverse tabelle possono essere unite ed è possibile eseguire ricerche in più tabelle contemporaneamente.  Definizione : un database relazionale è un database in grado di gestire più tabelle correlate ed estrarre informazioni da più tabelle contemporaneamente.
  • 7. Excel Data Retrival »Siamo in grado di recuperare i dati in Excel da diverse fonti esterne: 7
  • 8. Excel Data Retrival »In generale possiamo recuperare dati nelle diverse forme, utilizzando diverse tecniche. In queste lezioni approfondiremo l’utilizzo dei seguenti approcci: •ADO, RecordSets (rs), and SQL statements •HTTP Request •Usare MongoDB 8
  • 10. Che cos’è ADO » ADO è l'interfaccia piu' usata per accedere ai database sotto Windows, non solo mediante ASP, ma anche mediante Visual Basic, C/C++ ed altri ambienti di sviluppo. » Con ADO si utilizza un data provider che fa da tramite fra la sorgente dati e l’applicativo consentendo, indipendentemente dal linguaggio di programmazione scelto e dalla fonte dati, di utilizzare sempre lo stesso criterio di consultazione; » ADO viene distribuito con Excel-VBA tramite una libreria che si chiama ADODB (Microsoft ActiveX Data Object 6.1 Library) e che comprende tutti gli oggetti ADO adattandosi quindi alla maggior parte dei progetti
  • 11. ADO per DB » Il modello ADO consiste di numerosi oggetti; di questi i più importanti sono  Oggetto CONNECTION: contiene informazioni riguardanti il fornitore dei dati e lo schema del database;  Oggetto RECORDSET: contiene tutti o parte dei records di una tabella del database indicato nell’oggetto Connection;  Oggetti FIELD: si trovano all’interno degli oggetti Recordset e rappresentano le colonne delle tabelle del database;  Oggetti COMMAND: permettono di eseguire direttamente varie tipologie di comandi incluse query SQL;
  • 12. ADO per DB »Per far sapere al Visual Basic di quali oggetti stiamo parlando occorre preliminarmente aprire la finestra di dialogo Riferimenti dal menu Strumenti dell’editor VBA e far scorrere il lunghissimo elenco di elementi fino ad arrivare ai due componenti che ci servono che si chiamano:  Microsoft ActiveX Data Objects 6.1 Library  Microsoft ActiveX Data Objects Recordset 2.8 Library
  • 13. ADO – L’oggetto CONNECTION »Il sistema per poter accedere ad un’origine dati (database, file di testo, cartelle di Excel, etc …) è rappresentato dalla connection, la quale ha come requisito principale l’appoggio ad un data-provider OLE-DB, la cui funzione è quella di colloquiare in modo diretto e corretto con la fonte dati prescelta; »L’oggetto connection contiene solo le informazioni necessarie per poter accedere alla fonte dati quali, ad esempio, il percorso, la password, il nome dell’utente, il nome del DNS per ODBC, etc... Ed una volta aperto, cioè a connessione avvenuta, è possibile iniziare a colloquiare con il contenitore prescelto;
  • 14. ADO – L’oggetto CONNECTION »La sequenza di utilizzo è la seguente:  Configurazione della connessione  Apertura della connessione  Elaborazione Dati  Chiusura della connessione
  • 15. ADO – L’oggetto CONNECTION »La sequenza di utilizzo è la seguente:  Configurazione della connessione  Apertura della connessione  Elaborazione Dati  Chiusura della connessione Step 1: Dichiare una variabile di tipo oggetto ADODB.Connection e istanziare una nuova connessione Dim cn As ADODB.Connection Set cn= New ADODB.connection Step 2: Specificare la Stringa di Connessione cn.ConnectionString = "Data Source=" & ThisWorkbook.Path & "newsvendor.mdb“ Step 3: Specificare il Data Provider cn.Provider = "Microsoft Jet 4.0 OLE DB Provider"
  • 16. Recordset »Un recordset è semplice un insieme di records (rows); »è assimilabile ad una tabella di database temporanea che contiene il risultato di una query; »Una tipica sequenza operativa con l’oggetto recordset è la seguente:  Apertura di un recordset (attraverso una connessione)  Elaborazione dati  Chiusura del recordset
  • 17. Recordset »Una tipica sequenza operativa con l’oggetto recordset è la seguente:  Apertura di un recordset (attraverso una connessione)  Elaborazione dati  Chiusura del recordset Step 1: Dichiarare una variabile di tipo Recordset ed istanziare l’oggetto (si noti l’uso della parola chiave set) Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset Step 2: Specificare la connessione rs.Open “Tabella", cn Dove “Tabella” è il nome della tabella che intendiamo scaricare.
  • 18. Recordset »Metodi dell’oggetto RECORDSET  AddNew – aggiunge un nuovo record vuoto alla fine del RECORDSET;  CancelUpdate – cancella tutte le modifiche fatte nel RECORD corrente;  Delete – cancella il RECORD corrente;  MoveFirst – Sposta il puntatore del record al primo record del RECORDSET;  MoveNext – Muove il puntatore del record al record successivo a quello correntemente in uso;  Update – Salva le modifiche del record corrente;
  • 19. Recordset »La funzione EOF  EOF esegue un test per verificare se siamo giunti alla fine del RECORDSET  La funzione EOF ritorna un valore logico VERO se il puntatore del record è posizionato oltre la fine del RECORDSET; altrimenti la funzione ritorna FALSO; Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset rs.Open “Demand", cn Do Until rs.EOF count = count + 1 rs.MoveNext Loop Questo esempio permette di contare il numero di record presenti nel RECORDSET. Il flusso del programma esce dal ciclo condizionale quando la fine del RECORDSET viene raggiunta. Si noti l’utilizzo del metodo MoveNext per avanzare di un record all’interno del ciclo.
  • 20. Metodo Close »Un oggetto di tipo RECORDSET dovrebbe venire chiuso quando non risulta più necessario rs.Close »In maniera analoga, una volta terminato l’utilizzo di una connessione, anche questa dovrebbe essere chiusa per non lasciare connessioni appese al database cn.Close
  • 21. ADO VBA Programming Alcuni semplici esempi con MS Access
  • 22. Semplice Esempio (1/8) Dim dbPath As String Dim dbFile As String dbPath = "C:UsersUserGoogle DriveSeminari e Lezioni2017Uni Firenze - MABIDAdata" dbFile = "esempi_modulo_2.accdb" 'declare conn to be a Connection - Dim conn As ADODB.Connection ' make a connection object - Set conn = New ADODB.Connection ' specify what kind of data provider it is - conn.Provider = "Microsoft.ACE.OLEDB.12.0" ' open the connection on one database - conn.Open dbPath & dbFile ' declare a recordset - Dim myTableRS As ADODB.Recordset ' make one - Set myTableRS = New ADODB.Recordset ' open it using a table in the database, and the connection myTableRS.Open "Titoli", conn, adOpenDynamic, adLockPessimistic
  • 23. Semplice Esempio (2/8) ' go to start of recordset - myTableRS.MoveFirst: k = 1 ' until we reach the end.. Do Until myTableRS.EOF ' display the 'Titolò field in current cell Cells(k, 1).Value = myTableRS.Fields("Titolo") ' move next row myTableRS.MoveNext: k = k + 1 Loop 'close the recordset myTableRS.Close Set myTableRS.ActiveConnection = Nothing ' and the connection conn.Close Set conn = Nothing
  • 24. Semplice Esempio (3/8) Dim wanted As String ' note the use of "'" wanted = "'Adams, Pat'" 'wanted = InputBox("Text to be searched", "Input search") myTableRS.Find "Autore = " & wanted If Not myTableRS.EOF Then MsgBox myTableRS.Fields("Autore") Else MsgBox "Not found" End If »Il metodo FIND
  • 25. Semplice Esempio (4/8) myTableRS.Open "myTable", conn, adOpenStatic, adLockOptimistic myTableRS.MoveFirst Do While Not myTableRS.EOF myTableRS.Fields("PhoneNumber") = myTableRS.Fields("PhoneNumber") + 1 myTableRS.Update myTableRS.MoveNext Loop »Il metodo UPDATE
  • 26. Semplice Esempio (5/8) myTableRS.Open "myTable", conn, adOpenStatic, adLockOptimistic myTableRS.MoveFirst Do While Not myTableRS.EOF myTableRS.Fields("PhoneNumber") = myTableRS.Fields("PhoneNumber") + 1 myTableRS.MoveNext Loop myTableRS.Updatebatch »Il metodo UPDATEBATCH
  • 27. Semplice Esempio (6/8) »Inserimento di nuove righe »Cancellazione di righe myTableRS.AddNew myTableRS.Fields("Autore") = "Della Lunga, Giovanni" myTableRS.Fields("ID_Au") = 1000 myTableRS.Update I nuovi record sono aggiunti alla fine della tabella. In un database relazione l’ordine dei record nelle tabelle non riveste particolare importanza myTableRS.Find "ID = 1000" If Not myTableRS.EOF Then myTableRS.Delete myTableRS.Update MsgBox ("Record deleted") Else MsgBox ("No matching record") End If Questo frammento di codice cancella una riga il cui ID field è uguale al valore inserito (1000) .delete cancella il record corrente dopo aver eseguito l’istruzione update
  • 28. Semplice Esempio (7/8) myTableRS.Open "Select ID_Au, Autore From Autori", conn, adOpenDynamic, adLockPessimistic ' Dim i As Integer Do While Not myTableRS.EOF For i = 1 To myTableRS.Fields.Count Debug.Print myTableRS.Fields(i - 1), Next Debug.Print myTableRS.MoveNext Loop »Utilizziamo un pò di SQL (anche se ancora non sappiamo cos’è!)
  • 29. Semplice Esempio (8/8) Dim myCommand As ADODB.Command Set myCommand = New ADODB.Command myCommand.ActiveConnection = conn myCommand.CommandText = "INSERT INTO Autori (ID_Au, Autore) VALUES (1000, 'Della Lunga, Giovanni')“ myCommand.Execute »L’oggetto Command In questo esempio il CommandText è un’istruzione SQL Standard Non sono necessari oggetti di tipo RecordSet
  • 30. Il cursore » Il cursore rappresenta una sorta di puntatore al record correntemente attivo; » Esistono diversi tipi di cursori con diversi effetti; » La scelta del cursore viene fatta prima di aprire il record set; » Accanto vediamo una sintetica descrizione dei vari tipi di cursore disponibili (fonte Microsoft). » Static. Is snapshot – changes by other users are invisible. adOpenStatic » ForwardOnly. Like the above but you can only move forward through rows – more efficient. adOpenForwardOnly » Dynamic. Changes by others seen, move anywhere. adOpenDynamic » Keyset. Like dynamic, but can't see rows added by others. adOpenKeyset » Nei nostri esempi abbiamo sempre utilizzato il tipo Dynamic.
  • 31. Data Locking » Qualora due o più utenti processino lo stesso database nello stesso tempo, potrebbero sovrascrivere i dati l’un l’altro; » Per prevenire questa possibilità si utilizzano i ‘lock’; » Il primo utente pone un lock sui dati che sta utilizzando prevenendo così la possibilità che un secondo utente possa modificare i dati nello stesso tempo; » adLockReadOnly - you are only reading records so they are not locked » adLockPessimistic – record locked when you access it, released when finished » adLockOptimistic – record only locked when you update it – might go wrong » adLockBatchOptimistic - only locked when do batch update
  • 32. ADO VBA Programming Accesso ad una base dati SQL Server
  • 33. Acquisire dati da Microsoft SQL Server » Excel è già predisposto per una rapida connessione ad un DB SQL Server…
  • 34. Acquisire dati da Microsoft SQL Server » Acquisire la stringa di connessione  Selezioniamo nel nostro computer il file con estensione .odc che viene salvato al termine del collegamento con SQL Server;  Editiamo il file con un editor di testo qualunque;  Scorriamo il testo senza modificarlo fino a raggiungere la sezione individuata dai tag <odc:ConnectionString> … </odc:ConnectionString>;  Selezioniamo tutto il blocco di caratteri che si trova fra queste due stringhe e facciamone una copia da incollare nel nostro modulo vba;  Ai fini del risultato che ci interessa, alcuni degli elementi non sono necessari per cui, volendo, la stringa può anche essere semplificata;
  • 35. Acquisire dati da Microsoft SQL Server ' dichiariamo connDati come ADODB.Connection Dim connDati As ADODB.Connection ' rsDati indica il nostro recordset Dim rsDati As ADODB.Recordset ' la variabile lstrConnection conterrà la stringa di connessione Dim lstrConnection As String ' infine lstrSQL il comando SQL da utilizzare Dim lstrSQL As String lstrConnection = "Provider=SQLOLEDB.1;" & _ "Integrated Security=SSPI;" & _ "Data Source=laptop-cirfa6ne;" & _ "Workstation ID=LAPTOP-CIRFA6NE;" & _ "Initial Catalog=SQL_EXCEL" La sintassi della stringa di connessione varia da un DB all'altro. Essenzialmente può essere composta da: Provider: Il tipo di provider OLE- Db usato per la connessione Initial File Name o Data Source: Il path fisico del DataBase (compreso il nome del file) Initial Catalog: Il nome del database User ID: L'user name necessario per la connessione Password: La password per il nome utente specificato
  • 36. ADO VBA Programming Accesso ad una base dati MySQL
  • 37. Acquisire Dati da MySQL »Possiamo ottenere gli stessi servizi in Excel con VBA anche interfacciandoci con un database MySQL a condizione di aver predisposto un’adeguata connessione ODBC; »Le funzionalità ODBC in MySQL non sono integrate nello strumento come in SQL Server ma vanno installate deliberatamente scaricando un file di sistema dal sito web di MySQL e istallandolo; »Nome File (per Windows a 64 bit!)  mysql-connector-odbc-5.3.8-winx64.msi »Download  https://dev.mysql.com/downloads/connector/odbc/
  • 38. Acquisire Dati da MySQL » Che cos’è ODBC  ODBC è l’acronimo di Open Database Connectivity, è una API standard per la connessione ai DBMS.  Questa API è indipendente dai linguaggi di programmazione dai sistemi di database e dal sistema operativo.  L’ API è un insieme di procedure disponibili al programmatore, di solito raggruppate a formare un set di strumenti specifici per un determinato compito.  Le API permettono di evitare ai programmatori di scrivere tutte le funzioni dal nulla.  In aggiunta al software ODBC, c’è bisogno di un driver specifico per poter accedere ad ogni diverso tipo di DBMS.  ODBC permette ai programmi che lo usano di inviare ai database stringhe SQL senza che ci sia bisogno di conoscerne le API proprietarie. Genera automaticamente richieste che il sistema di database utilizzato sia in grado di capire. Questo è un fattore molto positivo in quanto i programmi possono connettersi a diversi tipi di database utilizzando più o meno lo stesso codice.
  • 39. Acquisire Dati da MySQL » Come Impostare un ODBC  Per impostare un nuovo ODBC andare su Pannello di controllo, poi Strumenti di amministrazione, Origine dati ( ODBC ); aprire la finestra DNS di sistema e premere sul pulsante aggiungi.  Arrivati a questo punto bisogna selezionare su che tipo di database si vuole lavorare (nel nostro caso MySQL ANSI driver)  Naturalmente è presente anche la versione UNICODE!
  • 40. Acquisire Dati da MySQL » Al termine della procedura di installazione del driver ODBC, nella finestra di dialogo riportata a fianco, dobbiamo inserire  Un nome convenzionale per il connettore ODBC che stiamo creando;  Una descrizione (facoltativa) che aiuti a ricordare a che cosa serve quel connettore;  Il nome del server, dell’utente e della password di accesso a MySQL;  Il nome del database MySQL col quale stabilire la connessione;
  • 41. Acquisire Dati da MySQL lstrConnection = "DSN=ConnMySQL" lstrSQL = " SELECT DISTINCT Titolo FROM sql_excel_biblioteca.Titoli " & _ " ORDER BY Titolo " Set rsDati = New ADODB.Recordset Set connDati = New ADODB.Connection connDati.Open lstrConnection rsDati.Open lstrSQL, connDati ActiveSheet.Range("E2").CopyFromRecordset rsDati rsDati.Close Set rsDati = Nothing connDati.Close Set connDati = Nothing
  • 43. Introduzione a SQL » Prima di occuparci di cos’è e come si usa SQL cerchiamo di capire cosa si intende con la parola database, che spesso in italiano viene tradotta come “base di dati”. » Un database è una collezione di dati che viene gestita e organizzata da un software specifico, il DBMS (DataBase Management System, Sistema di Gestione di DataBase). » Un DBMS è sostanzialmente uno strato software che si frappone fra l’utente ed i dati veri e propri. » Grazie a questo strato intermedio l’utente e le applicazioni non accedono ai dati cosi’ come sono memorizzati effettivamente, cioè alla loro rappresentazione fisica, ma ne vedono solamente una rappresentazione logica.
  • 44. Introduzione a SQL » Ciò permette un elevato grado di indipendenza fra le applicazioni e la memorizzazione fisica dei dati. L’amministratore del database, se ne sente la necessità, può decidere di memorizzare i dati in maniera differente o anche di cambiare il DBMS senza che le applicazioni, e quindi gli utenti, ne risentano. » La cosa importante è che non venga cambiata la rappresentazione logica di quei dati, che è la sola cosa che i loro utilizzatori conoscono. » Questa rappresentazione logica viene chiamata ‘Schema del databasè ed è la forma di rappresentazione dei dati piu’ a basso livello a cui un utente del database può accedere.
  • 45. Database Relazionali »Database relazionali: i database appartenenti a questa categoria si basano sul modello relazionale la cui struttura principale è la relazione, cioè una tabella bidimensionale composta da righe e colonne. »Ciascuna riga, che in terminologia relazionale viene chiamata tupla, rappresenta un’entità che noi vogliamo memorizzare nel database. »Le caratteristiche di ciascuna entità sono definite invece dalle colonne delle relazioni, che vengono chiamate attributi. »Entità con caratteristiche comuni, cioè descritti dallo stesso insieme di attributi, faranno parte della stessa relazione.
  • 46. Database Relazionali » La struttura fondamentale del modello relazionale è appunto la “relazione”, cioè una tabella bidimensionale costituita da righe (tuple) e colonne (attributi). » Le relazioni rappresentano le entità che si ritiene essere interessanti nel database. » Ogni istanza dell’entità troverà posto in una tupla della relazione, mentre gli attributi della relazione rappresenteranno le proprietà dell’entità. » Ad esempio, se nel database si dovranno rappresentare delle persone, si potrà definire una relazione chiamata “Persone”, i cui attributi descrivono le caratteristiche delle persone. » Ciascuna tupla della relazione “Persone” rappresenterà una particolare persona.
  • 47. Chiavi Primarie » Le tuple in una relazione sono un insieme nel senso matematico del termine, cioè una collezione non ordinata di elementi differenti. » Per distinguere una tupla da un’altra si ricorre al concetto di “chiave primaria”, cioè ad un insieme di attributi che permettono di identificare univocamente una tupla in una relazione. » Naturalmente in una relazione possono esserci piu’ combinazioni di attributi che permettono di identificare univocamente una tupla (“chiavi candidate”), ma fra queste ne verra’ scelta una sola da utilizzare come chiave primaria. » Gli attributi della chiave primaria non possono assumere il valore null (che significa un valore non determinato), in quanto non permetterebbero piu’ di identificare una particolare tupla in una relazione. » Questa proprieta’ delle relazioni e delle loro chiavi primarie va sotto il nome di integrita’ delle entita’ (entity integrity).
  • 48. Creiamo il nostro Database di Esempio » In pratica la creazione del database consiste nella creazione delle tabelle che lo compongono. » In realtà prima di poter procedere alla creazione delle tabelle normalmente occorre creare in effetti il database, il che di solito significa definire uno spazio dei nomi separato per ogni insieme di tabelle. » In questo modo per un DBMS è possibile gestire più database indipendenti contemporaneamente, senza che ci siano dei conflitti con i nomi che vengono utilizzati in ciascuno di essi. » La sintassi utilizzata dai più diffusi DBMS, è la seguente:
  • 49. Creazione delle Tabelle » Una volta creato il database è possibile creare le tabelle che lo compongono. » L’istruzione SQL preposta a questo scopo è: » nome_colonna: è il nome della colonna che compone la tabella. I nomi devono iniziare con un carattere alfabetico. » tipo_colonna: è l’indicazione del tipo di dato che la colonna potrà contenere.
  • 50. Creazione delle Tabelle » I principali tipi previsti dallo standard SQL sono: » CHARACTER(n) Una stringa a lunghezza fissa di esattamente n caratteri. CHARACTER può essere abbreviato con CHAR » CHARACTER VARYING(n) Una stringa a lunghezza variabile di al massimo n caratteri. CHARACTER VARYING può essere abbreviato con VARCHAR o CHAR VARYING. » INTEGER Un numero intero con segno. Può essere abbreviato con INT. La precisione, cioè la grandezza del numero intero che può essere memorizzato in una colonna di questo tipo, dipende dall’implementazione del particolare DBMS. » SMALLINT Un numero intero con segno con precisione non superiore a INTEGER. » FLOAT(p) Un numero a virgola mobile, con precisione p. Il valore massimo di p dipende dall’implementazione del DBMS. è possibile usare FLOAT senza indicazione della precisione, utilizzando quindi la precisione di default, anch’essa dipendente dall’implementazione. REAL e DOUBLE PRECISION sono dei sinonimi per un FLOAT con una particolare precisione. Anche in questo caso le precisioni dipendono dall’implementazione, con il vincolo che la precisione del primo non sia superiore a quella del secondo. » DECIMAL(p,q) Un numero a virgola fissa di almeno p cifre e segno, con q cifre dopo la virgola. DEC è un’abbreviazione per DECIMAL. DECIMAL(p) è un’abbreviazione per DECIMAL(p,0). Il valore massimo di p dipende dall’implementazione. » INTERVAL Un periodo di tempo (anni, mesi, giorni, ore, minuti, secondi e frazioni di secondo). » DATE, TIME e TIMESTAMP Un preciso istante temporale. DATE permette di indicare l’anno, il mese e il giorno. Con TIME si possono specificare l’ora, i minuti e i secondi. TIMESTAMP è la combinazione dei due precedenti. I secondi sono un numero con la virgola, permettendo cosi’ di specificare anche frazioni di secondo.
  • 54. Popolazione del Database » INSERT, inserire una riga in una tabella  L’istruzione SQL che effettua l’inserimento di una nuova riga in una tabella è INSERT. La sintassi con cui essa viene usata più comunemente è: » Popoliamo le nostre tabelle a partire dai dati in formato Excel…
  • 55. SELECT, interrogare il database »Nella lezione precedente abbiamo esaminato i costrutti che SQL mette a disposizione per inserire i dati in un database relazionale. »In questa e nelle prossime lezioni ci concentreremo sulle istruzioni che ci permettono di estrarre i dati che ci interessano. »L’istruzione SQL preposta a tale scopo è SELECT. »L’interrogazione è la funzionalità più usata di un database e le clausole di cui dispone l’istruzione SELECT sono numerose e a volte possono dar luogo a combinazioni piuttosto complicate.
  • 56. SELECT, interrogare il database »La sintassi completa è la seguente: SELECT [DISTINCT ] lista_elementi_selezione FROM lista_riferimenti_tabella [ WHERE espressione_condizionale ] [ GROUP BY lista_colonne ] [ HAVING espressione_condizionale ] [ ORDER BY lista_colonne ]
  • 57. SELECT, interrogare il database » Come si vede, le uniche clausole obbligatorie sono SELECT e FROM. Quest’ultima, detta clausola di selezione, stabilisce da quale tabella (o da quali) estrarre i dati, mentre la prima è detta clausola di proiezione e stabilisce quali colonne devono essere riportate nel risultato finale. » La clausola WHERE definisce invece un filtro sulle righe che verranno analizzate, mentre ORDER BY indica l’ordinamento da applicare al risultato finale. Se WHERE non viene specificata, non viene applicato alcun filtro sulle righe, che quindi vengono esaminate tutte. Se invece non viene specificato alcun ordinamento, le righe vengono restituite senza un ordine definito, generalmente così come vengono trovate in tabella.
  • 58. SELECT, interrogare il database » SELECT * FROM sql_excel_biblioteca.titoli; » SELECT Titolo FROM sql_excel_biblioteca.titoli; » SELECT Titolo, ISBN as Codice FROM sql_excel_biblioteca.titoli; »Le possibili espressioni utilizzabili sono moltissime e dipendono in gran parte dal database utilizzato, quindi spesso le stesse funzioni hanno nomi o sintassi diverse in MySQL, Oracle o SQL Server. Purtroppo ciò limita la portabilità delle espressioni tra i vari database. Per i dettagli è quindi necessario ricorrere alla documentazione ufficiale dei singoli database.
  • 59. SELECT, interrogare il database » DISTINCT, eliminare i duplicati » La prima query che abbiamo visto restituirebbe righe duplicate nel caso in cui nella tabella fossero presenti libri con lo stesso titolo. Per evitare ciò occorre specificare l’opzione DISTINCT: » SELECT DISTINCT Titolo FROM sql_excel_biblioteca.titoli; » Questa opzione fa sì che nel risultato non ci siano righe uguali tra loro, ed è utile soprattutto quando si lavora con i join. Un join (congiunzione) è una funzione che stabilisce come combinare righe di due tabelle diverse per ottenere una tabella unica. Si distinguono generalmente tre tipi di join, che vediamo di seguito.
  • 60. SELECT, interrogare il database » La clausola ORDER BY  La clausola ORDER BY dell'SQL imposta l'ordinamento ascendente o discendente di una query. Per default l'ordinamento è ascendente.  La sintassi base è la seguente: SELECT * FROM nome_tabella ORDER BY nome_campo  In questo modo l'ordinamento è ascendente; per specificarlo è necessario utilizzare la clausola ASC: SELECT * FROM nome_tabella ORDER BY nome_campo ASC  Per specificare l'ordinamento decrescente, invece, è necessario utilizzare la clausola DESC: SELECT * FROM nome_tabella ORDER BY nome_campo DESC
  • 61. Le funzioni » Lo standard SQL prevede numerose funzioni, che sono classificate in due grandi famiglie: » Funzioni di Aggregazione, operano su un insieme di valori (per esempio tutta una colonna) e restituiscono un unico valore riepilogativo; si possono usare solo all’interno di istruzioni SELECT; » Funzioni Scalari, agiscono su un solo valore (l’argomento) e restituiscono un valore basato sull’argomento;  vedi esempi di funzioni scalari
  • 62. Le funzioni » Quelle che abbiamo visto finora sono funzioni scalari, che agiscono su un solo valore; » Le funzioni di aggregazione producono un risultato diverso rispetto alle funzioni scalari; » Non generano righe modificate ma producono un unico valore ottenuto prendendo in considerazione tutta la colonna o le colonne indicate come argomento; » Vediamo un semplice esempio: vogliamo conoscere l’età media e l’anzianità di servizio media degli impiegati i cui dati si trovano nella tabella Dipendenti…
  • 63. Le funzioni » Per ottenere la media delle età e delle anzianità di servizio, possiamo usare la funzione di aggregazione AVG()
  • 64. Le funzioni » La funzione AVG() agisce sull’argomento che viene inserito fra parentesi tonde, che può essere il nome di una colonna oppure un’espressione; » Oltre ad AVG() fanno parte dello standard SQL anche le funzioni SUM, COUNT, MAX e MIN che sono recepite in tutte le implementazioni di SQL; » In particolare la funzione COUNT consente tre formulazioni diverse  COUNT(*) Conteggia tutte le righe di una tabella, comprese quelle che contengono valori NULL  COUNT(espressione) Conteggia tutte le righe che hanno valori diversi da NULL nella colonna specificata con l’espressione;  COUNT(DISTINCT espressione) Conteggia il numero di righe nella colonna indicata dall’espressione che non contengono valori NULL e che hanno valori diversi.
  • 65. La clausola GROUP BY »In molti casi si usano le funzioni di aggregazione insieme con la clausola GROUP BY; »Quando si utilizza tale clausola si deve segnalare sia in SELECT sia in GROUP BY la stessa(e) colonna(e) ; »Esempio:
  • 66. La clausola HAVING »Non è consentito in SQL di ricorrere alla clausola WHERE per stabilire un criterio di selezione riferito a valori raggruppati mediante la clausola GROUP BY; »Per ottenere il risultato che ci interessa dobbiamo servirci della clausola HAVING che svolge correttamente il ruolo di WHERE in riferimento ad un valore ottenuto mediante la clausola di raggruppamento;
  • 67. Lavorare con più tabelle »Iniziamo dalla relazione uno a molti; INDIRIZZI TELEFONI Chiave primaria Chiave esterna Chiave primaria
  • 68. Lavorare con più tabelle »Nella terminologia SQL si chiama join (congiunzione, collegamento o relazione) sia il risultato di una query eseguita su più tabelle, sia il meccanismo che caratterizza la relazione fra le tabelle; »Il collegamento è reso possibile dal fatto che le tabelle messe in relazione hanno un campo in comune che viene richiamato espressamente nella clausola WHERE; »Questo campo può avere lo stesso nome nelle tabelle messe in join ma non necessariamente (come nell’esempio appena visto); »E’ essenziale però che la join avvenga fra colonne che hanno lo stesso tipo di dati;
  • 69. Lavorare con più tabelle »Attenzione a specificare la join!! »Senza specifica quello che si ottiene è il prodotto cartesiano delle tabelle ed è un’insidia sempre latente quando si fanno le join; »Esempio di query sbagliata: Si noti l’assenza della clausola WHERE
  • 70. Lavorare con più tabelle »La clausola JOIN »Una query che utilizza un INNER JOIN restituisce tutte le righe che si accoppiano e soltanto quelle;
  • 71. Lavorare con più tabelle »LEFT JOIN  Possono esistere situazioni nelle quali si vogliono vedere tutti i record della tabella del lato sinistro della relazione, che abbiano oppure no record con i quali agganciarsi nel lato destro;  In questi casi si può usare un left outer join;
  • 72. Lavorare con più tabelle »Relazioni molti a molti  Per poter gestire questo tipo di relazioni bisogna scomporle in due o più relazioni uno a molti creando contestualmente una tabella che faccia da ponte e consenta una relazione ordinata fra le coppie di tabelle;  Non è un concetto immediatamente intuitivo per cui passiamo subito ad un esempio concreto;
  • 73. Esercitazione Un esempio di classificazione non supervisionata
  • 74. Clustering con l’algoritmo k-means » In questo esempio utilizzeremo una tecnica algoritmica che è entrata a far parte dei metodi di Data Mining (DM) e che si chiama Clustering; » In particolare si discuterà di un metodo di clustering detto partizionante, talvolta chiamato anche “semplice”, che può essere realizzato con il noto algoritmo k- means (o delle k-medie) sviluppato per la prima volta da MacQueen nel 1967. » In linea generale, partendo da un dataset, il clustering si propone di individuare delle regioni distinte nelle quali raggruppare dati in modo tale che i dati all’interno di una stessa regione siano simili tra loro rispetto ad un criterio (metrica) scelto inizialmente, mentre quelli in regioni differenti siano dissimili tra loro. » In seguito alla realizzazione di queste regioni o cluster, è l’utente esperto di dominio, grazie all’aiuto di una o più tecniche di valutazione, che decide il significato di tali raggruppamenti.
  • 75. Clustering con l’algoritmo k-means » L’algoritmo k-means, archetipo dei metodi di raggruppamento, è un algoritmo di clustering che permette di suddividere gruppi di oggetti in k partizioni sulla base dei loro attributi. » Ogni cluster viene identificato mediante un centroide o punto medio. L’algoritmo segue una procedura iterativa
  • 76. Clustering con l’algoritmo k-means » L’algoritmo può essere illustrato attraverso la seguente schematizzazione: 1. Scegliere un valore di k il numero totale di cluster da determinare. 2. Scegliere in modo casuale (spesso utilizzando un generatore di numeri pseudocasuali) k dati nel dataset. Questi sono i centri iniziali (baricentri) dei cluster. 3. Utilizzare la distanza euclidea per assegnare i restanti dati ai centri dei cluster più vicini. 4. Utilizzare i dati in ogni cluster per calcolare una nuova media di ogni cluster. 5. Se le nuove medie sono identiche a quelle calcolate in precedenza, il processo termina; altrimenti, utilizzare le nuove medie come centri dei cluster e ripetere i passi da 3 a 5.
  • 77. Clustering con l’algoritmo k-means » Come criterio di valutazione generale, una clusterizzazione ottimale per l’algoritmo k-means è definita come una clusterizzazione che presenta il valore minimo della somma dei quadrati delle differenze degli errori fra le osservazioni e i centri dei cluster di appartenenza. » Trovare una clusterizzazione ottimale per un dato valore di k è quasi impossibile dal momento che bisognerebbe ripetere l’algoritmo per ognuna delle possibili scelte dei centri iniziali dei cluster. » Anche per poche centinaia di osservazioni non sarebbe pratico applicare k-means più volte. » Piuttosto, è prassi comune scegliere un criterio di conclusione dell’algoritmo, come un valore massimo accettabile per l’errore quadratico ed eseguire l’algoritmo finché il risultato raggiunto non soddisfa il criterio di conclusione prestabilito.