SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

Documenti analoghi
SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

Operatori aggregati. Operatori aggregati. Interrogazioni con raggruppamento. Interrogazioni con raggruppamento

Interrogazioni di tipo insiemistico. Select. Interrogazioni di tipo insiemistico. Interrogazioni nidificate

E possibile ordinare le righe del risultato di una interrogazione attraverso la clausola order by, a chiusura di una interrogazione.

Gestione dei valori nulli

Operatori aggregati: COUNT

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL

Operatori aggregati: COUNT

Operazioni su insiemi: unione, intersezione e differenza

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

Join esplicito. SELECT con join esplicito, sintassi. Ulteriore estensione: join naturale (meno diffuso) Outer join. Join esterno: "outer join"

Interrogazioni su più tabelle. Interrogazioni su più tabelle. Clausola where. Interrogazioni su più tabelle

Operazioni sui dati. Interrogazioni con operatori aggregati. Capitolo 4

Interpretazione delle query nidificate

SQL /10/2016 Basi di dati - SQL 1

Tabelle esempio: Impiegato/Dipartimento

SQL. SQL: una visione panoramica. SQL: "storia" Definizione dei dati

SQL Esempi. 24/10-7/11/2016 Basi di dati - SQL 1

SQL Esempi /10/2017 Basi di dati - SQL 1

SQL - Structured Query Language

Corso di Laurea in Ingegneria Informatica Fondamenti di Informatica II Modulo Basi di dati a.a

Trasparenze rielaborate da Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1999 Capitolo 4: SQL-2, seconda parte.

SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

Argomenti della lezione. Interrogazioni complesse in SQL join esplicito outer join operatori aggregati interrogazioni nidificate

SQL Matteo Magnani, Danilo Montesi Università di Bologna SQL. SQL come Data Manipulation Language - Funzioni Aggregate e GROUP BY

SQL. Argomenti della lezione. Join esplicito. Interrogazioni complesse in SQL join esplicito outer join operatori aggregati interrogazioni nidificate

Corso sul linguaggio SQL

SQL - Sottointerrogazioni correlate

Basi di dati - Laboratorio

Corso di Laurea in Ingegneria Informatica Fondamenti di Informatica II Modulo Basi di dati a.a

Interrogazioni. L istruzione base per le interrogazioni è select

Tabelle esempio: Impiegato/Dipartimento

insert into Dipartimento(NomeDip, Città) values('produzione','torino') insert into ProdottiMilanesi (select codice, descrizione from Prodotto

Corso di Laurea in Ingegneria Informatica Fondamenti di Informatica II Modulo Basi di dati a.a

Inserimento. Cancellazione. Modifica. INSERT INTO Persone VALUES ('Mario',25,52) INSERT INTO Persone(Nome, Eta, Reddito) VALUES('Pino',25,52)

Il linguaggio SQL - Interrogazioni -

Vincoli interrelazionali

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL

Figlio Maria. Luigi. Olga Filippo Andrea Aldo Figlio Franco Olga Filippo Andrea Aldo

<Nome Tabella>.<attributo>

Manuale SQL. Manuale SQL - 1 -

SQL: "storia" 31/05/2006 2

Structured Query Language

Interrogazioni nidificate

Basi di dati. SQL: concetti base

Operatori aggregati. Gli operatori di aggregazione NON sono rappresentabili in Algebra Relazionale. conteggio, minimo, massimo, media, somma

Basi di Dati: Corso di laboratorio

SQL - Structured Query Language

Esercitazione: Interrogazioni SQL

Corso di Basi di Dati

Queries su più tabelle

SQL quick reference. piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013)

D B M G 2. Linguaggio SQL: fondamenti. Istruzioni di aggiornamento. Introduzione Istruzione INSERT Istruzione DELETE Istruzione UPDATE

Elena Baralis 2007 Politecnico di Torino 1

Structured. Language. Basi di Dati. Introduzione. DDL: Data Definition Language. Tipi di dato. Query. Modifica dei Dati

SQL: le funzioni di aggregazione

Elena Baralis 2013 Politecnico di Torino 1

IL LINGUAGGIO SQL LE BASI

Principi di Progettazione del Software a.a Il linguaggio SQL. Il Linguaggio SQL

SQL Matteo Magnani, Danilo Montesi Università di Bologna SQL. SQL come Data Manipulation Language - (SELECT FROM WHERE ORDER BY)

SQl come DML. Angelo Chianese,, Vincenzo Moscato, Antonio Picariello,, Lucio Sansone

Linguaggio SQL: fondamenti

SQL-DML/3. Basi di Dati. Prof. Alfredo Cuzzocrea Università degli Studi di Trieste

Laboratorio di Basi di Dati e Web

Linguaggio SQL. studenti matricola nome cognome citta anno 11 marco bini bologna laura sicuro rimini 1984 esami codice

BASE DI DATI. Concetti trattati: Funzioni aggregate Raggruppamenti Nidificazione Viste. Informatica Umanistica Università di Pisa

Parte IV Il linguaggio SQL

3. Individua tutti i padri distinti presenti nella relazione Paternità 03

Interrogare una base di dati: algebra relazionale e SQL. Savino Castagnozzi Giorgio Macauda Michele Meomartino Salvatore Picerno Massimiliano Sartor

Università di Roma La Sapienza Laurea in Ingegneria Informatica. Basi di Dati. Anno Accademico 2003/2004 Canale M-Z.

SISTEMI INFORMATIVI E TELEMEDICINA INFORMATICA MEDICA. 3. Panoramica su SQL Prof. Mauro Giacomini

Basi di Dati. Concetti Avanzati

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

SQL e algebra relazionale

INFORMATICA GENERALE Prof. Alberto Postiglione. Scienze della Comunicazione Università di Salerno. Raggruppamento. Raggruppamento

SQL. SQL come Data Manipulation Language - Inserimento, cancellazione e aggiornamento di righe

Elementi di Informatica LB Basi di Dati. Anno accademico 2007/2008 Prof. Stefano Contadini

Corso sul linguaggio SQL

Interrogazioni con Raggruppamenti

Esercizi di Informatica Documentale

Select From Where...

SQL. Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL. Definizione dei dati in SQL. SQL: "storia" Domini

SQL - Sottointerrogazioni

Interrogazioni nidificate

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL. Definizione dei dati in SQL. SQL: "storia" Domini. CREATE TABLE, esempio

SQL. Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL. Definizione dei dati in SQL. SQL: "storia" Domini

E. Giunchiglia Basi di dati 1 (trasparenze basate su Atzeni, Ceri, Paraboschi, Torlone: Basi di dati, Capitolo 4) SQL SQL. Definizione dei dati in SQL

Corso di. Basi di Dati I. 9. Esercitazioni in SQL: Check, asserzioni, viste

Corso sul linguaggio SQL

Fondamenti di Informatica A. A / 1 9

Interrogazioni in SQL SQL. Interrogazioni in SQL. Sintassi. Significato dell interrogazione. Notazione

Corso di. Basi di Dati I. 8. Esercitazioni in SQL: Interrogazioni nidificate

Aggiornamenti e Interrogazioni

SQL. SQL: "storia. Sviluppato nella metà degli anni settanta (1974) presso il laboratorio di ricerca IBM di S.Josè. Dal 1983 ca. "standard di fatto"

BASE DI DATI. Concetti trattati: Funzioni aggregate Raggruppamenti Nidificazione Viste. Informatica Umanistica Università di Pisa

Laboratorio di Basi di Dati e Multimedia

SQL: Structured Query Language. T. Catarci, M. Scannapieco, Corso di Basi di Dati, A.A. 2008/2009, Sapienza Università di Roma

Transcript:

SQL Università degli Studi di Salerno Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto A.A. 2007/2008 Interrogazioni con raggruppamento E possibile ripartire le tuple in gruppi omogenei ed applicare gli operatori aggregati ai singoli gruppi, aggiungendo in coda alla SELECT-FROM-WHERE la clausola GROUP BY GROUP BY A 1, A k HAVING Ψ Ψ è una clausola opzionale che si applica ai gruppi A 1, A k (per selezionare solo un sottoinsieme dei gruppi) In tal modo due tuple si trovano nello stesso gruppo se e solo se esse sono uguali componente per componente sugli attributi A 1, A k Gli attributi A 1, A k devono comparire anche nella clausola SELECT 2 1

Interrogazioni con raggruppamento Gli operatori aggregati vengono applicati a tutte le righe che vengono prodotte come risultato dell operazione. Può essere necessario applicare l operatore solo ad un sottoinsieme delle righe. L operatore group by specifica come suddividere le tabelle in sottoinsiemi. Es. SELECT Età, AVG(Reddito) AS Reddito_medio_età FROM Persone GROUP BY Età 3 Esempio GROUP BY SELECT Età, AVG(Reddito) AS Reddito_medio_età FROM Persone GROUP BY Età Età e stipendio medio dei dipendenti, raggruppati per età 4 2

Esempio GROUP BY SELECT Età, AVG(Reddito) AS Reddito Medio >45 FROM Persone WHERE Età > 45 GROUP BY Età Età e stipendio medio dei dipendenti di età superiore a 45 anni, raggruppati per età 5 Operatori aggregati e raggruppamenti I padri con il relativo numero di figli che ha ciascuno select padre, count(*) AS NumFigli from paternita group by Padre paternita Padre Sergio Luigi Luigi Franco Franco Figlio Franco Olga Filippo Andrea Aldo Padre NumFigli Sergio 1 Luigi 2 Franco 2 6 3

Condizioni sui gruppi Può essere anche necessario restringere i gruppi attraverso l applicazione di condizioni. Se le condizioni sono verificabili a livello delle singole righe, basta utilizzare la clausola where, altrimenti si aggiunge una condizione alla group by attraverso l estensione having SELECT FROM Età, AVG(Reddito) AS Stipendio Medio Persone GROUP BY Età HAVING Count(Età)>1 Se non si specifica group by e si usa having da solo la condizione è applicata a tutte le righe. Il problema è che se la condizione non è verificata, il risultato sarà vuoto. 7 Esempio Raggruppamento - HAVING SELECT FROM Età, AVG(Reddito) AS Stipendio Medio Persone GROUP BY Età HAVING Count(Età)>1 Età e Stipendio medio dei dipendenti raggruppati per età, con almeno 2 dipendenti per gruppo 8 4

Esempio Raggruppamento - HAVING SELECT FROM Età, AVG(Reddito) AS Reddito_Medio Persone GROUP BY Età HAVING AVG(Reddito)>25000000 Stipendi medi dei dipendenti che guadagnano più di 25.000.000 euro, raggruppati per età 9 WHERE o HAVING? I padri i cui figli sotto i 30 anni hanno un reddito medio maggiore di 20 select padre, avg(f.reddito) from persone f join paternita on figlio = nome where eta < 30 group by padre having avg(f.reddito) > 25 10 5

Select La forma di select cui siamo arrivati dopo le estensioni viste è quindi: SelectSQL ::= select ListaAttributiOEspressioni from ListaTabelle [ where CondizioniSemplici ] [group by ListaAttributiDiRaggruppamento] [ having CondizioniAggregate] [ order by ListaAttributiDiOrdinamento] 11 SELECT Nidificate (Sub-Queries) SQL permette di usare insiemi come operandi. Gli insiemi sono definiti tramite istruzioni complete SELECT nidificate all interno di una clausola WHERE. Le SELECT nidificate vengono dette sub-queries. Viene eseguita prima la Select più interna e poi i suoi risultati sono utilizzati dalla Select esterna 12 6

Esempi di Sub Queries SELECT Nome, Reddito FROM Persone WHERE Nome IN (SELECT Padre FROM Paternità) Individua Nome e Reddito dei padri Modo Alternativo equivalente alla precedente Query: SELECT FROM WHERE DISTINCT Nome, Reddito Persone, Paternità Persone.Nome=Paternità.padre 13 Seleziona Nome e Reddito di chi guadagna più di Luigi SELECT P2.Nome, P2.Reddito FROM Persone AS P1, Persone AS P2 WHERE P1.Nome = 'Luigi' AND P2.Reddito > P1.Reddito; SELECT Nome, Reddito FROM Persone WHERE Reddito > (Select Reddito From Persone Where Nome like 'Luigi'); 14 7

Interrogazioni di tipo insiemistico SQL fornisce anche gli operatori di tipo insiemistico union, intersect, except (minus) con la seguente sintassi: SelectSQL {< union intersect except > [all]} SelectSQL NB intersect e except potrebbero anche essere derivati attraverso opportune query gli operatori insiemistici eseguono per default una eliminazione dei duplicati; all specifica di non farla gli schemi su cui si opera non devono essere identici ma avere uguale numero di attributi, con domini compatibili. La corrispondenza è per posizione. 15 SELECT Nidificate (Sub-Queries) È possibile utilizzare le sub queries per: Verificare l'esistenza di alcuni risultati della sub query utilizzando le parole riservate EXISTS o NOT EXISTS. Trovare qualsiasi valore nella query principale che sia uguale, maggiore o minore dei valori restituiti dalla sub query, utilizzando le parole riservate ANY, IN o ALL. Creare sottoquery all'interno di sub queries, ossia sub queries nidificate. 16 8

Unione di Select 2 o più SELECT possono essere combinate tramite la clausola UNION Il risultato contiene sia i records selezionati dalla prima SELECT che quelli selezionati dalla seconda Il nome della/e colonna/e è quello determinato nella prima Select L UNION è possibile solo se le Select da unire presentano gli stessi campi (o campi compatibili) nello stesso ordine 17 Interrogazioni di tipo insiemistico: UNION SELECT Padre AS Genitore FROM Paternità UNION SELECT Madre FROM Maternità Chi sono i genitori? 18 9

Interrogazioni di tipo insiemistico: UNION SELECT Madre AS Genitore, Figlio FROM Maternità UNION SELECT Padre, Figlio FROM Paternità Qual è l insieme dei Padri e delle Madri, con i nomi dei rispettivi figli? 19 Interrogazioni nidificate E possibile anche realizzare clausole where in cui il confronto non avviene fra predicati semplici o fra valori, ma fra valori e risultati di interrogazioni. Tipicamente, il risultato dell interrogazione con cui si fa il confronto è un attributo (il confronto deve avvenire fra entità omogenee). Sorge il problema di confrontare un valore con un insieme di valori (il risultato della interrogazione). SQL offre 2 possibilità per estendere i normali operatori di confronto al caso del confronto valore/risultato query: all specifica che il confronto è vero se è vero per tutte le righe del risultato dell interrogazione. any specifica che il confronto è vero se è vero per una qualunque delle righe del risultato dell interrogazione. 20 10

Interrogazioni Nidificate select * from Impiegato where Dipart = any (select Nome from Dipartimento where Città= Firenze ) Il risultato è una tabella che comprende tutte le righe di IMPIEGATO per cui il valore Dipart è uguale ad almeno uno dei valori di Nome in DIPARTIMENTO, limitatamente alle tuple per cui Citta = Firenze. Lo stesso risultato si poteva ottenere con un join, ma così, specialmente per interrogazioni complesse, è più leggibile. 21 Massimo e nidificazione La persona (o le persone) con il reddito massimo select * from persone where reddito = ( select max(reddito) from persone) 22 11

Interrogazioni Nidificate Visibilità delle variabili Le variabili SQL sono utilizzabili solo nell ambito della query in cui sono definite o nell ambito di una query nidificata all interno di essa. Se due query sono allo stesso livello non possono condividere variabili. exists è un operatore logico applicabile a query nidificate. Restituisce vero se la query dà un risultato non nullo, falso se è nullo. E utilizzabile in modo significativo solo se esiste un passaggio di binding fra interrogazione esterna e interrogazione nidificata. 23 ES: Le persone che hanno almeno un figlio select * from Persone where exists ( select * from Paternita where Padre = Nome) or exists ( select * from Maternita where Madre = Nome) 24 12

Manipolazione dei dati I comandi SQL che permettono di modificare il contenuto di una base di dati sono insert delete update Quando una base di dati viene creata con i comandi del DDL inizialmente è vuota. insert ha la seguente sintassi insert into NomeTabella [ListaAttributi] < values (ListaDiValori) SelectSQL > L esito delle operazioni di inserimento è condizionato al rispetto dei vincoli di integrità. Le operazioni di inserimento che porterebbero la base di dati in uno stato che viola un vincolo non vengono portate a termine, e non hanno nessun effetto sulla base di dati.. 25 Manipolazione dei Dati: inserimento INSERT INTO Persone (nome, reddito, età) VALUES ( Ugo,20000000,35) Inserire in Persone il record (Ugo, 20.000.000, 35) 26 13

Esempio inserimento con subquery INSERT INTO paternità (padre,figlio) SELECT Giovanni, figlio FROM maternità WHERE Madre= Luisa Inserire in Paternità I figli di Giovanni che sono i figli di Luisa (Aggiunge a Paternità i nomi dei figli di Giovanni e Luisa) 27 Cancellazione delete from NomeTabella [ where Condizione ] se where non è specificato tutte le righe della tabella vengono eliminate. Se esiste un vincolo di integrità referenziale con politica di cascade ATTENZIONE!!!! Siccome delete ha la stessa sintassi di select, è possibile utilizzare interrogazioni nidificate al suo interno. 28 14

Esempio di cancellazione DELETE FROM Persone WHERE Età = 50 Cancella da Persone tutte le persone di 50 anni 29 Esempio di cancellazione DELETE FROM Paternità WHERE Padre= Giovanni Cancella da Paternità tutti i records dei figli di Giovanni 30 15

Modifica update NomeTabella set Attributo = < Espressione SelectSQL null default > {, Attributo = < Espressione SelectSQL null default > } [ where Condizione ] aggiorna uno o più attributi delle righe di NomeTabella che soddisfano l eventuale Condizione. Se non c è condizione la modifica avviene per tutte le righe. Il nuovo valore può essere: il risultato di un espressione valutata sugli attributi della tabella il risultato di una generica interrogazione SQL il valore nullo il valore di default 31 Esempio di Modifica Incrementare del 10% il UPDATE Persone reddito di tutte le persone SET Reddito = Reddito *1.1 32 16