Select From Where... SELECT Le colonne che saranno mostrate e in che ordine. Calcoli su colonne FROM La tabella o le tabelle usate dall interrogazione WHERE Condizione che deve essere soddisfatta dalle righe delle tabelle
Select From Where... SELECT Proiezioni, Ridenominazioni, Calcoli FROM Prodotti cartesiani Join WHERE Selezioni Condizioni di Join
La congiunzione SQL in Access SQL standard SELECT NomeSocietà, Città, DataOrdine FROM Clienti, Ordini WHERE Clienti.IDCliente = Ordini.IDCliente; SQL di Access SELECT Clienti.NomeSocietà, Clienti.Città, Ordini.DataOrdine FROM Clienti INNER JOIN Ordini ON Clienti.IDCliente = Ordini.IDCliente;
SQL: le funzioni di aggregazione funzioni predefinite che agiscono sui valori contenuti in insiemi di righe della tabella: Conteggi Somme Medie Massimi, minimi
Funzione Count La funzione COUNT conta il numero di righe presenti in una tabella con eventuale controllo di una condizione. SELECT Count(*) FROM NomeTabella (incluse quelle con campi di tipo Null) SELECT Count (NomeCampo) FROM NomeTabella (escluse le righe che hanno valore Null nella colonna dell attributo specificato)
Anagrafiche (Codice, Cognome, Nome, Indirizzo) Movimenti (ID, Descrizione, Data, Importo, Codice) Numero dei movimenti con importo superiore a una cifra prefissata. Select Count(*) From Movimenti Where Importo > [Quale importo minimo]
Anagrafiche (Codice, Cognome, Nome, Indirizzo) Movimenti (ID, Descrizione, Data, Importo, Codice) Select Count(Descrizione) From Movimenti Where Importo > [Quale importo minimo]
Anagrafiche (Codice, Cognome, Nome, Indirizzo) Movimenti (ID, Descrizione, Data, Importo, Codice) Somma degli importi per i movimenti superiori a una cifra prefissata. Sum(Importo) Select From Movimenti Where Importo > [Quale importo minimo]
Anagrafiche (Codice, Cognome, Nome, Indirizzo) Movimenti (ID, Descrizione, Data, Importo, Codice) Somma degli importi per i movimenti che si riferiscono alle anagrafiche di un indirizzo prefissato. Select Sum(Importo) From Movimenti M, Anagrafiche A Where M.Codice = A.Codice And Indirizzo = [Quale indirizzo]
Anagrafiche (Codice, Cognome, Nome, Indirizzo) Movimenti (ID, Descrizione, Data, Importo, Codice) Media degli importi per i movimenti aventi una descrizione prefissata. Select Avg (Importo) From Movimenti Where Descrizione = [Quale descrizione]
Funzioni Min e Max Restituiscono rispettivamente il valore minimo e il valore massimo tra i valori della colonna specificata come argomento della funzione (anche per campi di tipo carattere). SELECT Min(NomeCampo), Max(NomeCampo) FROM NomeTabella (ignorando i campi con valore Null)
Anagrafiche (Codice, Cognome, Nome, Indirizzo) Movimenti (ID, Descrizione, Data, Importo, Codice) Valore massimo per gli importi dei movimenti di un anagrafica avente un nome prefissato. Select Max (Importo) From Movimenti, Anagrafiche Where Movimenti.Codice =Anagrafiche.Codice And Nome = [Quale nome]
Anagrafiche (Codice, Cognome, Nome, Indirizzo) Movimenti (ID, Descrizione, Data, Importo, Codice) Valore minimo e numero degli importi dei movimenti di un anagrafica avente un nome prefissato. Select Min(Importo), Count(Importo),Importo From Movimenti M, Anagrafiche A Where M.Codice =A.Codice And Nome = [Quale nome]
Ordinamenti La clausola ORDER BY consente di ottenere i risultati di un interrogazione ordinati secondo i valori contenuti in una o più colonne, tra quelle elencate accanto alla parola Select. SELECT Colonna1, Colonna2 FROM NomeTabella ORDER BY Colonna1
Ordinamento:esempio Elenco alfabetico delle anagrafiche SQL Select Codice, Cognome, Nome, Indirizzo From Anagrafiche Order By Cognome, Nome
Crescente / Decrescente Ordinamento crescente : ASC stringhe dalla A alla Z, numeri dal minore al maggiore Ordinamento decrescente : DESC stringhe dalla Z alla A, numeri dal maggiore al minore N.B. L ordinamento crescente è per default (non occorre specificare ASC).
Ordinamento decrescente: esempio Codice delle anagrafiche e importo dei movimenti in ordine decrescente di valore. SQL Select Codice, Importo From Movimenti Order By Importo DESC
Anagrafiche (Codice, Cognome, Nome, Indirizzo) Movimenti (ID, Descrizione, Data, Importo, Codice) Elenco dei movimenti con importo superiore a 300 in ordine crescente di importo. Select * From Movimenti Where Importo > 300 Order By Importo
SQL Le Condizioni di Ricerca
SQL: Le condizioni di ricerca Utilizzate insieme a Where per determinare i criteri di selezione delle righe Segni del confronto =, <, >, <>, >=, <=. Più condizioni legate tra loro con gli operatori AND e OR, precedute eventualmente dall operazione NOT. Predicati : BETWEEN, LIKE, IN
BETWEEN Controlla se un valore è compreso all interno di un intervallo di valori, inclusi gli estremi. Esempio: elenco dei movimenti con importo compreso tra 1000 e 2000. SQL Select * From Movimenti Where Importo Between 1000 And 2000
IN Controlla le righe che hanno i valori di un attributo compresi in una lista di valori indicati dopo la parola In. Esempio: elenco delle anagrafiche con indirizzo Milano, Torino o Venezia SQL Select * From Anagrafiche Where Indirizzo IN ( Milano, Torino, Venezia )
LIKE Confronta il valore di un attributo di tipo carattere con un modello di stringa che può contenere caratteri jolly :? per indicare un singolo carattere qualsiasi in quella posizione della stringa; * per indicare una sequenza qualsiasi di caratteri in quella posizione della stringa. N.B.: In SQL standard i caratteri jolly sono _ (underscore) e % (percento)
Uso di LIKE LIKE xyz* vengono ricercate tutte le stringhe che iniziano con i caratteri xyz LIKE *xyz serve a ricercare tutte le stringhe che finiscono con i caratteri xyz LIKE *xyz* per tutte le stringhe che contengono al loro interno i caratteri xyz LIKE?xyz controlla le stringhe di 4 caratteri che finiscono con xyz
LIKE: esempio Elenco delle anagrafiche con Cognome che inizia con Ros (Rossi, Rosi, Rossini,...) SQL Select * From Anagrafiche Where Cognome Like 'Ros%'
Esercizi Anagrafiche (Codice, Cognome, Nome, Indirizzo) Movimenti (ID, Descrizione, Data, Importo, Codice) Elenco delle anagrafiche che hanno indirizzo uguale a Roma, Bologna o Torino. Cognome delle anagrafiche che hanno fatto movimenti con importo compreso tra 3000 e 6000. Elenco delle anagrafiche che hanno l iniziale del nome uguale ad A.
Access Condizioni di ricerca in QBE Database Auto con le tabelle: Modelli, Marche
Esempio di dati
Esempio 1(Between And ) Marca e modello: intervallo di prezzi Access minimo = 15000, massimo = 100000
Esempio 2 (Like) Access Modello il cui nome inizia con le cifre da 1 a 9 Like [1-9]* Modello e casa per nome della casa costruttrice che finisca per t o inizi per F Like *t Oppure Like F*
Like con parametro Access Ricerca di numeri telefonici con un prefisso fornito come parametro Criterio sul campo telefono LIKE [quale prefisso] + *
Access Soluzione (rapida) degli esercizi sulle condizioni di ricerca in SQL Elenco dei modelli di auto che hanno l iniziale del nome uguale a una lettera prefissata. WHERE Modelli.nome LIKE [quale iniziale] + * Nome e prezzo dei modelli aventi cilindrata compresa tra due limiti prefissati. WHERE Modelli.CC BETWEEN [lim1] AND [lim2] Elenco delle case automobilistiche che hanno la sede a Milano o Torino o Roma. WHERE Marche.Citta IN ( Milano, Torino, Roma )
SQL: raggruppamenti Clausola GROUP BY per raggruppare un insieme di righe aventi lo stesso valore nelle colonne indicate: produce una riga di risultati per ogni raggruppamento. Usata con le funzioni di aggregazione (Sum, Count...) : per ciascuna riga della tabella risultante viene prodotto un valore di raggruppamento. SELECT Colonna, Funzione FROM NomeTabella GROUP BY Colonna
Group By: esempio Anagrafiche (Codice, Cognome, Nome, Indirizzo) Movimenti (ID, Descrizione, Data, Importo, Codice) SQL Totale degli importi dei movimenti per ciascun codice anagrafico Select Codice, Sum(Importo) From Movimenti Group By Codice
Group By: esempio Totale degli importi dei movimenti per ciascun codice anagrafico Select Codice,Sum(Importo),Importo From Movimenti Group by Codice
Esercizio Numero dei movimenti per ogni città e cognome. Select Indirizzo,Cognome, Count(*) AS Numero From Anagrafiche A, Movimenti M Where A.Codice=M.Codice Group by Indirizzo, Cognome
Esercizio Numero dei movimenti per ogni città e cognome. Select Indirizzo, Cognome, Count(*) AS Numero From Anagrafiche A,Movimenti M Where A.Codice=M.Codice Group by Indirizzo, Cognome
Condizioni sui raggruppamenti Uso della clausola HAVING per sottoporre al controllo di una o più condizioni i gruppi creati con la clausola Group by. La condizione scritta dopo Having normalmente controlla il valore restituito dalle funzioni di aggregazione (Count, Sum, Avg, Min, Max). SELECT Colonna, Funzione FROM NomeTabella GROUP BY Colonna HAVING Condizione
Having: esempio Importo medio dei movimenti per i codici aventi più di 20 movimenti registrati SQL Select Codice, Avg(Importo) From Movimenti Group By Codice Having Count(*) > 20
Having: esempio Importo medio dei movimenti per i codici aventi più di un movimento registrato Select Codice,Avg(Importo),Importo From Movimenti Group by Codice Having Count(*)>1;
Where vs Having Where pone condizioni sulle righe della tabella Having controlla condizioni su gruppi di righe
Esempio Conta quante persone sono di Milano (Where) Select Count(*) From Anagrafiche Where Indirizzo = Milano Elenco delle città con più di 10 persone (Having) Select Indirizzo From Anagrafiche Group By Indirizzo Having Count(*) > 10
CLAUSOLE DI SELECT Select From Where Group by Having Order by FROM WHERE GROUP BY HAVING SELECT ORDER BY
Esercizi Raggruppare le anagrafiche per indirizzo e fornirne il numero per ogni indirizzo. Nome delle anagrafiche che hanno almeno 30 movimenti registrati nella tabella dei movimenti.
Access Raggruppamenti in QBE Database Auto con le tabelle: Modelli, Marche
Esempio 1 (Group by) Access Per ogni tipologia di modello, indicare la media di prezzo corrispondente
Access Esempio 2 (Group by, Having) Città di case produttrici e numero di modelli quando viene prodotto più di un modello
Esercizi Access Database con anagrafica e movimenti Movimento N Essere correlato 1 Anagrafica Anagrafiche (KCodice, Nome, Indirizzo) Movimenti (KNumero, Descrizione, Data, Importo, Codice) Realizzare in QBE le seguenti query già scritte in SQL Raggruppare le anagrafiche per indirizzo e fornire il numero per ogni indirizzo. Nome delle anagrafiche che hanno almeno 30 movimenti registrati nella tabella dei movimenti.
Access Clausola Dove (nella riga Formula) Numero di studenti, aventi matricola superiore a 20 000, raggruppati per Facoltà. La riga Mostra del campo usato per Dove non ha il segno di spunta
Access In SQL (Group by, Where) Numero di studenti, aventi matricola superiore a 20000, raggruppati per Facoltà. SELECT Facoltà.Descrizione, Count(Matricola) FROM Facoltà INNER JOIN Studenti ON Facoltà.KCodFac = Studenti.CodFac WHERE Studenti.Matricola > "20000" GROUP BY Facoltà.Descrizione;
Access Perché si usa Dove Per porre condizioni sia sui campi sia sui risultati delle funzioni di aggregazione.
Access Esempio Numero degli studenti, aventi matricola superiore a 200, raggruppati per Facoltà, solo per le Facoltà che hanno più di 200 iscritti Più di 200 Studenti (HAVING) Numero di Matricola Superiore a 200 (WHERE)
In SQL (Where, Group by, Having) Numero degli studenti, aventi matricola superiore a 200, raggruppati per Facoltà, solo per le Facoltà che hanno più di 200 iscritti. SELECT Facoltà.Descrizione, Count(Matricola) FROM Facoltà INNER JOIN Studenti ON Facoltà.KCodFac = Studenti.CodFac WHERE Studenti.Matricola > "200" GROUP BY Facoltà.Descrizione HAVING Count(Matricola) >200 Access Where: condizioni sulle righe Having:condizioni sui gruppi
Query nidificata Serve per utilizzare nei criteri di una query i valori restituiti dalla sottoquery. La sottoquery è rappresentata con un comando SQL racchiuso tra due parentesi tonde nella riga dei Criteri Si possono usare anche i segni del confronto: > <
Access Esempio di query nidificata Nome e prezzo dei modelli di auto che hanno il prezzo superiore alla media di tutti i prezzi >(SELECT AVG(Prezzo) FROM Modello) Zoom sulla riga Criteri: Maiuscolo + F2
Query nidificata in SQL Nome e prezzo dei modelli di auto che hanno il prezzo superiore alla media di tutti i prezzi SELECT Modelli.Nome, Modelli.Prezzo FROM Modelli WHERE Modelli.Prezzo > (SELECT AVG(Prezzo) FROM Modelli);
QBE: altri tipi di query Creare una query: fare clic su Query nell'elenco degli oggetti di Access, poi clic su Crea una query in visualizzazione struttura. scegliere poi le tabelle da usare e il tipo di query (dal menu Query)
Query di creazione crea una nuova tabella inserendo alcuni record provenienti dalla tabella scelta Dare il nome della tabella da creare e dell eventuale database in cui inserirla
Query di creazione: le righe e i criteri Salvare ed eseguire la query Visualizzare finestra database (F11 o )
Query di creazione: SQL Crea una nuova tabella con i dati degli studenti di Milano o Bergamo SELECT Studenti.* INTO StudLombardia FROM Studenti WHERE Studenti.Indirizzo ="Milano" OR Studenti.Indirizzo = "Bergamo";
Query di eliminazione per eliminare alcuni record da una tabella scelta Nella riga Elimina selezionare Da o Dove
Query di eliminazione da due tabelle collegate Relazione uno-molti: uso delle clausole Da e Dove su tabelle diverse nella riga Elimina
Query di eliminazione: SQL Elimina dalla tabella gli studenti di Milano DELETE Studenti.* FROM Studenti WHERE Indirizzo = "Milano";
Query di accodamento per aggiungere ad una tabella alcuni record estratti da un altra tabella Scegliere la tabella con i dati di origine Dare il nome della tabella a cui accodare i record della tabella selezionata
Query di accodamento: SQL Aggiunge alla tabella Studenti i dati degli studenti di Roma contenuti nella tabella Studenti2 INSERT INTO Studenti SELECT Studenti2.* FROM Studenti2 WHERE Studenti2.Indirizzo = "Roma";
C +[KCodice] Query di aggiornamento per modificare alcuni valori di una tabella scelta Scegliere il campo o i campi in cui modificare i valori Inserire l aggiornamento nella riga Aggiorna a Inserire gli eventuali criteri
Query di aggiornamento: SQL Aggiunge una V davanti alla matricola degli studenti aventi numero di matricola inferiore a 35000 UPDATE Studenti SET Studenti.Matricola = "V"+[Matricola] WHERE Studenti.Matricola <"35000";
Query a campi incrociati per creare una tabella a doppia entrata da una tabella scelta Inserire i campi Scegliere la funzione di aggregazione Scegliere fra Intestazione riga, Intestazione colonna, Valore nella riga Campi incrociati
Query a campi incrociati: SQL Numero studenti per Facoltà suddivisi per città di provenienza TRANSFORM Count(Studenti.Matricola) AS ConteggioDiMatricola SELECT Facoltà.Descrizione FROM Facoltà INNER JOIN Studenti ON Facoltà.KCodFac = Studenti.CodFac GROUP BY Facoltà.Descrizione PIVOT Studenti.Indirizzo;
Campi incrociati: sintassi SQL Transform: funzione di aggregazione (Conteggio, Somma, Media) Group By: intestazione di riga Pivot: intestazione di colonna