Approfondimenti SQL.

Slides:



Advertisements
Presentazioni simili
Interrogazioni Semplici Le operazioni di interrogazione vengono specificate per mezzo dellistruzione select select ListaAttributi from ListaTabelle [where.
Advertisements

TIPI STANDARD DI SQL BOOLEAN Valori: vero, falso CHAR(n)
Calcolo Relazionale.
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
1 DATA BASE GESTIONE VENDITE. 2 QUERY1 Per ogni Cognome di Rappresentante e Descrizione di Prodotto calcolare la somma delle quantità vendute: Somma (Quantità)
Esercizio zSi vuole realizzare un data warehouse per una azienda che vende mobili allingrosso. zIl data warehouse deve permettere di analizzare i ricavi.
SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria - Sede di Modena Corso.
Biglietti e Ritardi: schema E/R
1 Misura Derivata: esempio dei biglietti CostoMedioBiglietto (CMB) calcolato come INCASSO/NUM_BIG. SUM AVG Implementazione in Analysis Services 1. Si definisce.
DML – Data Manipulation Language
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Basi di Dati prof. A. Longheu
SQL.
SQL Dati i seguenti schemi relazionali:
19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni.
1 Corso di Laurea in Biotecnologie Informatica (Basi di Dati) SQL: Data Manipulation Language (DML) Anno Accademico 2009/2010 Da: Atzeni, Ceri, Paraboschi,
Laboratorio di Basi di Dati Introduzione ad Access 2ª Parte.
Access: Query semplici
SQL: Lezione 7 Nataliya Rassadko
Esercitazione.
Duplicati Lalgebra relazionale non ammette duplicati, SQL li ammette. Quindi select Città from Persona where Cognome= Rossi estrae una lista di città in.
Manipolazione dei dati I comandi SQL che permettono di modificare il contenuto di una base di dati sono insertdeleteupdate insert ha la seguente sintassi:
Java base I: Sintassi e tipi di dati
SELECT STATEMENT Clausola WHERE permette di limitare il numero di record da estrarre SELECT */ [DISTINCT] colonna/ espressione [alias],… FROM table [WHERE.
Viste. Cosè una vista? è possibile creare un subset logico di dati o una combinazione di dati una vista è una tabella logica basata su una tabella o su.
Basi di dati Claudia Raibulet
SQL: Structured Query Language
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL OPERATORI INSIEMISTICI IN SQL Siano due tabelle: GiochiSolitari(CodiceGioco, NomeGioco, PrezzoGioco)
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL IDENTIFICATORI di tabelle e attributi: stringhe di lunghezza max 18 caratteri, composte da.
MODELLO LOGICO DEI DATI
Realizzato da Roberto Savino
1 Il Linguaggio SQL Il Linguaggio SQL Prof. Lorenzo Vita, Ing. Luigi Testa.
Basi di Dati e Sistemi Informativi
BIOINFO3 - Lezione 51 INSERIMENTO DEI DATI Visto come si creano le tabelle (sinora tristemente vuote), cominciamo ad occuparci di come riempirle con dei.
Elaborazione dati informatici
Sistemi Informativi Insieme di “strutture” in grado di acquisire, elaborare, trasmettere ed archiviare informazioni in genere ad uso di un’organizzazione.
Informatica II – Basi di Dati (07/08) – Parte 2 Gianluca Torta Dipartimento di Informatica dell’Università di Torino
SQL Interrogazioni. 2 Interrogazioni in SQL Non esiste un SQL standard (vari dialetti) Formulazione di interrogazioni (query) è parte del Data Manipulation.
Microsoft Access (parte 5) Introduzione alle basi di dati Scienze e tecniche psicologiche dello sviluppo e dell'educazione, laurea magistrale Anno accademico:
Interrogare il database
SEFOC – SETTORE FORMAZIONE CONTINUA DEL PERSONALE CORSO MYSQL AVANZATO ROBERTO PENNOLINO – CARMELO MASSIMO PRIOLO PALERMO – 07 | 06 | 2011.
Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL :Structured Query Language: SELECT (IV) SQL (Slide tratte in parte da da Atzeni, Ceri,
Interrogazione di una base di dati relazionale
Le query in SQL Unità didattica sviluppata per l’ITIS “A. Volta” – Classe 5 sez. I Ing Domenico Liguori - Università degli studi di Napoli “Federico.
Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le.
SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.
Algebra relazionale (III). Esempi di Interrogazioni: 3 Trovare matricola e nome dei capi i cui impiegati guadagnano tutti più di Tutti gli impiegati?
Raggruppamento in SQL Esempio di raggruppamento
Microsoft Access Query (III).
Interrogazioni (parte 2)
Interrogazioni Le interrogazioni in SQL sono formulate in modo dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere. L’interrogazione.
Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL :Structured Query Language: SELECT (III) SQL (Slide tratte in parte da da Atzeni, Ceri,
Vincoli Interrelazionali Per i vincoli visti l’inserimento di un valore che li viola viene semplicemente impedito. In caso di vincoli di integrità referenziale,
Vincoli interrelazionali
Raggruppamenti e target list scorretta select padre, avg(f.reddito), p.reddito from persone f join paternita on figlio = nome join persone p on padre =
Lezione 6 - SQL. Linguaggi per DB Per interagire con le basi di dati occorre un linguaggio Linguaggio SQL (Structured Query Language), linguaggio standardizzato.
Corso integrato di Matematica, Informatica e Statistica Informatica di base Linea 1 Daniela Besozzi Dipartimento di Informatica e Comunicazione Università.
Interrogazioni Le interrogazioni in SQL sono formulate in modo dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere. L’interrogazione.
Funzionalità del DBMS relazionale l Funzioni per –definizione della base di dati –inserimento / rimozione /aggiornamento di informazioni deve soddisfare.
Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso:
Operazioni Relazionali
Microsoft Access Filtri, query. Filtri Un filtro è una funzione che provoca la visualizzazione dei soli record contenenti dati che rispondono a un certo.
Excel Funzioni di ricerca.
Linguaggio SQL prima parte Linguaggio SQL prima parte A. Lorenzi, E. Cavalli INFORMATICA PER SISTEMI INFORMATIVI AZIENDALI Copyright © Istituto Italiano.
SQL Linguaggio per l’interrogazione di una base dati.
E. Tinelli SQL come linguaggio di manipolazione dei dati 1 DML – Data Manipulation Language.
Linguaggio SQL. Linguaggi per database La diffusione del modello relazionale ha favorito l’uso prevalente di linguaggi non procedurali: in questo modo.
Il linguaggio SQL (Structured Query Language) è il linguaggio standard per creare, manipolare e interrogare database relazionali. SQL non è case-sensitive:
Esercizi SQL Group by. CREATE TABLE dipendente (codDip CHAR(8) NOT NULL UNIQUE PRIMARY KEY, cognome CHAR(60) NOT NULL, nome CHAR(60) NOT NULL, stipendio.
Transcript della presentazione:

Approfondimenti SQL

Funzioni di aggregazione All’interno del comando SELECT possono essere utilizzate funzioni predefinite che agiscono sui valori contenuti in insiemi di righe della tabella (da cui il nome f. di aggregazione). Le righe considerate per l’aggregazione sono quelle prodotte dall’interrogazione, ad esempio se compare la clausola WHERE, le righe saranno quelle che soddisfano la condizione specificata.

Funzioni di aggregazione: COUNT() conta il numero totale di righe di una tabella AVG() calcola la media dei valori assunti da una colonna di una tabella MAX() calcola il massimo dei valori assunti da una colonna di una tabella MIN() calcola il minimo dei valori assunti da una colonna di una tabella SUM() calcola la somma dei valori assunti da una colonna di una tabella

Funzione COUNT() La funzione COUNT conta il numero di righe selezionate da un’interrogazione. La sintassi del linguaggio SQL è la seguente: SELECT COUNT (Nomecol o * asterisco) FROM NomeTab;

Data la tabella: Impiegati Codice Cognome Nome Livello Codcapo Stipendio Dipartimento 2352 Cardelli Paolo 6 5234 2541 20 2359 Lecca Andrea 3 25 2105 10 3456 Tarabba Aldo 2722,5 3461 Perugini Maria 4 1815 3462 Piraino Carla 9876 1573 30 3548 Mino Sandro 1512,5 Guiso Luca 7 2750 6530 Terranova Mario 1391,5 7461 Rossi 1210 7467 Marazzita Cristiano 5 2178 7896 Bertin Francesca 9076 Rispoli Alessandra 1694 9871 Galli Enzo 9875 Moi Ester

Esempio La query: SELECT COUNT(*) FROM Impiegati; Restituisce il valore 14, lo stesso vale per la query: SELECT COUNT(Dipartimento)

Esempio: Con il seguente codice: SELECT COUNT(Dipartimento) FROM Impiegati WHERE Livello = 4 ; Invece si ottiene come risultato 5. Si può ottenere anche il numero di righe diverse usando DISTINCT SELECT COUNT(DISTINCT Dipartimento) Invece si ottiene come risultato 3.

Funzione SUM() La funzione SUM restituisce la somma di tutti i valori contenuti in una colonna specificata come argomento della funzione. Naturalmente l’attributo usato per il calcolo deve essere di tipo numerico. La sintassi nel linguaggio SQL è: SELECT SUM(nomecol) FROM nometab;

Esempio FROM Impiegati; SELECT SUM(Stipendio) FROM Impiegati SELECT SUM(Stipendio) As Somma FROM Impiegati; SELECT SUM(Stipendio) FROM Impiegati WHERE Dipartimento = ’10’; SELECT SUM(DISTINCT Stipendio) SELECT SUM(PrezzoUnit * Quantità) FROM Fattura;

Funzione AVG() La funzione AVG serve per calcolare la media dei valori numerici contenuti in una determinata colonna di una tabella. Anche con tale funzione si può utilizzare la parola DISTINCT. La sintassi nel linguaggio SQL è: SELECT AVG(nomecol) FROM nometab;

Esempio SELECT AVG(Stipendio) As Media FROM Impiegati; FROM Impiegati WHERE Dipartimento = ’10’; SELECT AVG(DISTINCT Stipendio) As Media 4. SELECT AVG(Stipendio) WHERE Livello = 4;

Funzione MIN() La funzione MIN cerca il più piccolo dei valori numerici contenuti in una determinata colonna di una tabella. La sintassi nel linguaggio SQL è: SELECT MIN(nomecol) FROM nometab;

Esempi SELECT MIN(Stipendio) As MinimoStip FROM Impiegati; WHERE Dipartimento = ’10’; 3. SELECT MIN(Stipendio) WHERE Livello = 4 ;

Funzione MAX() La funzione MAX serve cerca il più piccolo dei valori numerici contenuti in una determinata colonna di una tabella. La sintassi nel linguaggio SQL è: SELECT MAX(nomecol) FROM nometab;

Esempi SELECT MAX(Stipendio) As MassimoStip FROM Impiegati; WHERE Dipartimento = ’10’; 3. SELECT MAX(Stipendio) WHERE Livello = 4 ;

Condizioni di ricerca Le condizioni di ricerca sono utilizzate insieme alla clausola WHERE per determinare i criteri di selezione delle righe. Si possono utilizzare: Gli operatori di confronto: =,<, > ,<=, >=,<>; Gli operatori logici: AND, OR, NOT; L’operatore BETWEEN; L’operatore IN; L’operatore LIKE; Il predicato IS NULL, IS NOT NULL.

Operatore BETWEEN Questo operatore controlla se un valore è compreso all’interno di un intervallo di valori, inclusi gli estremi. Esempio: Cognome di tutti i dipendenti con stipendio compreso tra 1500 e 2000 euro. SELECT Cognome FROM Impiegati WHERE Stipendio BETWEEN 1500 AND 2000 ;

Operatore BETWEEN L’operatore BETWEEN può essere utilizzato con l’operatore logico NOT, nel caso in cui si voglia controllare se un il valore non rientra in un intervallo di valori. In questo caso prima si deve utilizzare l’operatore NOT e poi l’operatore BETWEEN. Esempio: Cognome di tutti i dipendenti con stipendio non compreso tra 1000 e 2000 euro. SELECT Cognome FROM Impiegati WHERE Stipendio NOT BETWEEN 1000 AND 2000 ;

Operatore IN L’operatore IN controlla se un un valore appartiene ad uno dei valori di una lista che viene precisata dopo la parola IN all’interno della condizione. Esempio: Cognome di tutti i dipendenti che hanno come capo uno dei seguenti: 5234, 2352, 3456. SELECT Cognome FROM Impiegati WHERE Codcapo IN (“5234”, “2352”, “3456”); Osservazione: Anche con l’operatore IN si può usare l’operatore NOT.

Operatore LIKE L’operatore LIKE confronta il valore di un attributo di tipo carattere con un modello di stringa che può contenere dai caratteri jolli. Tali caratteri jolli sono: _ (trattino basso) o ? serve per indicare uno ed un solo carattere qualsiasi nella stringa in una determinata posizione; % o * serve per indicare una stringa qualsiasi. Esempi: LIKE “xyz*” rappresenta una stringa che inizia con xyz LIKE “*xyz” rappresenta una stringa che termina con xyz LIKE “?xyz” rappresenta una stringa di quattro caratteri, che termina con xyz

Operatore LIKE Esempi: Cognome e stipendio dei dipendenti il cui cognome che inizia con la lettera p: SELECT Cognome, Stipendio FROM Impiegati WHERE Cognome LIKE “p*”;

Operatore LIKE Cognome e stipendio di tutti gli impiegati il cui cognome inizia con le lettere A, B o C: SELECT Cognome, Stipendio FROM Impiegati WHERE Cognome LIKE “[A,B,C]*”;

Operatore LIKE Anche con l’operatore LIKE si può usare l’operatore NOT. Inoltre se occorre ricercare un carattere jolli in una stringa si deve usare uno speciale carattere, detto carattere escape per qualificare il carattere come carattere da ricercare e non come un carattere jolli. Il carattere escape viene precisato con la dichiarazione ESCAPE. Per esempio per ricercare una stringa che possiede il carattere * (asterisco), occorre scrivere: LIKE “?$*” ESCAPE “$”. Il carattere “$” è il carattere escape e, pertanto, la sequenza “$*” precisa che il carattere * è il carattere da ricercare nella stringa e non un carattere jolli.

PREDICATO IS NULL Il predicato IS NULL confronta il valore in una colonna con il valore NULL. L’uso di questo predicato è il solo modo per controllare la presenza del valore NULL in una colonna. Anche in questo caso si può utilizzare l’operatore NOT: il predicato così prodotto è IS NOT NULL. L’operatore IS può essere utilizzato solo con la parola NULL e NOT NULL. Esempio: cognome e dipartimento dei dipendenti per i quali è indicato lo stipendio. SELECT Cognome, Dipartimento FROM Impiegati WHERE Stipendio IS NOT NULL;

Ordinamenti A differenza del modello relazionale, in cui le tuple non sono ordinate, le righe di una tabella possono esserlo - anche se solo al momento della presentazione all’utente. Talvolta la possibilità di ordinare il risultato di un’interrogazione è importante. Ad esempio, se si vogliono gli stipendi in ordine dal minore al maggiore.

Ordinamenti SQL mette a disposizione la clausola ORDER BY L’ordinamento può essere: Crescente (ASC) - Le stringhe dalla A alla Z, e i numeri dal più piccolo al più grande e i valori Null, compaiono all’inizio della sequenza; Decrescente (DESC) - Le stringhe dalla Z alla A, e i numeri dal più grande al più piccolo e i valori Null, compaiono alla fine della sequenza. L’ordinamento è crescente per default

Esempi: SELECT Cognome, Stipendio FROM Impiegati WHERE Dipartimento = 10 ORDER BY Stipendio DESC; ORDER BY Cognome;

Esempi: SELECT Cognome, Stipendio FROM Impiegati WHERE Dipartimento = 10 ORDER BY Stipendio DESC, Cognome;

Esercizi Visualizzare in ordine alfabetico i nomi di tutti gli impiegati; Visualizzare in ordine alfabetico i nomi di tutti gli impiegati del livello 7; Visualizzare in ordine alfabetico i nomi di tutti gli impiegati del dipartimento N. 20; Visualizzare il cognome e lo stipendio degli impiegati, in ordine decrescente in base allo stipendio;

Esempio: Query: per ogni dipartimento, trovare la somma degli stipendi Per prima cosa occorre selezionare le informazioni di interesse, ovvero il dipartimento e gli stipendi; poi calcoliamo la somma degli stipendi raggruppati per il dipartimento;

Osservazione: Questa è la codifica? SELECT Dipartimento, SUM(Stipendio) FROM Impiegati; L’SQL non consente di mischiare nel comando Select attributi e funzioni di aggregazione a meno che non si usi la clausola GROUP BY La clausola GROUP BY permette di potenziare ulteriormente le interrogazioni sulle tabelle, consentendo di raggruppare le righe di una tabella in base ai valori di uno o più attributi, potendo così applicare le funzioni di aggregazione ai singoli gruppi di righe.

Codifica: Query: per ogni dipartimento, trovare la somma degli stipendi SELECT Dipartimento, SUM(Stipendio) as TotaleStip FROM Impiegati GROUP BY Dipartimento;

GROUP BY La clausola GROUP BY, permette di raggruppare un insieme di righe aventi lo stesso valore nelle colonne indicate (Dipartimento). L’opzione produce una riga di risultati per ogni raggruppamento. Dipartimento Totalestip 10 13446 20 7441,5 30 5142,5

Raggruppamenti Le funzioni di aggregazione vengono applicate ad un insieme di righe restituendo un solo valore, come per esempio la somma di tutti gli stipendi dei dipendenti. • Spesso esiste l’esigenza di applicare funzioni di aggregazione distintamente a particolari sottoinsiemi delle righe di una tabella • In altre parole si possono sintetizzare i valori per classi omogenee, secondo opportuni criteri di raggruppamento. 

Esempio 2: SELECT Livello, SUM(Stipendio) AS TotaleStipLiv FROM Impiegati GROUP BY Livello; Livello TotaleStipLiv 3 4525 4 7986 5 6594,5 6 5263,5 7 2750

Esempio 3: SELECT Dipartimento As Dip, COUNT(*) AS NumImpDip, AVG(Stipendio) AS MediaStipDip FROM Impiegati GROUP BY Dipartimento; Dip NumImpDip MediaStipDip 10 6 2241 20 4 1860,375 30 1557,875

Esempio 4: SELECT Dipartimento AS Dip, COUNT(*) AS NImpDip, AVG(Stipendio) AS MStipDipL4 FROM Impiegati WHERE Livello=4 GROUP BY Dipartimento; Dip NImpDip MStipDipL4 10 2 1754,5 20 1 1512,5 30 1482,25

Esercizi Visualizzare la media degli stipendi per ogni livello; Visualizzare lo stipendio massimo e quello minimo per ogni dipartimento; Visualizzare il numero dei dipendenti per ogni livello .

Condizioni sui gruppi La struttura del comando SELECT con raggruppamenti può essere ulteriormente ampliata con la clausola HAVING con la quale è possibile sottoporre al controllo di una o più condizioni i gruppi creati con la clausola GROUP BY. In altre parole si può utilizzare la clausola HAVING quando le condizioni sono però da calcolare sui raggruppamenti di tuple.

Esempio: SELECT Dipartimento As Dip, SUM(Stipendio) As SommaStip FROM Impiegati GROUP BY Dipartimento HAVING SUM(Stipendio) > 10000; Dip SommaStip 10 13446

WHERE o HAVING? Per decidere se specificare le condizioni nella clausola WHERE o tramite HAVING, la regola è semplice: Se bisogna utilizzare una funzione di aggregazione, significa che la condizione concerne gli insiemi di tuple: HAVING In caso contrario: WHERE Esempio: I dipartimenti per cui la media degli stipendi degli impiegati del livello 4 è superiore a 1500 euro.

Soluzione: SELECT Dipartimento AS Dip, AVG(Stipendio) AS MediaStip FROM Impiegati WHERE Livello = 4 GROUP BY Dipartimento HAVING AVG(Stipendio) > 1500; Dip MediaStip 10 1754,5 20 1512,5

Riassumendo: SELECT Lista_Attributi_o_Espressioni FROM Lista_Tabelle [WHERE Condizioni_Semplici] [GROUP BY Lista_Attributi_Di_Raggruppamento] [HAVING Condizioni_Aggregate] [ORDER BY Lista_Attributi_Di_Ordinamento]