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

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

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

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

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

Idoneita Informatica. Sistemi per la gestione di basi di Dati

Esercitazione: Interrogazioni SQL

Basi di Dati: Corso di laboratorio

Esempi SQL con Access. Orazio Battaglia

Interrogazioni semplici

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

Corso di Basi di Dati

SQL e algebra relazionale

Basi di dati. SQL: concetti base

SQL Laboratorio di Basi di Dati a.a. 2002/2003

Linguaggio SQL seconda parte

3 SQL : Interrogazioni

Corso di Basi di Dati A.A. 2015/2016

Capitolo 4: SQL (Slides( da Atzeni,, Ceri, Paraboschi, Torlonee,, Basi di dati McGraw-Hill. Hill,, 2002)

Esercitazione 3 SQL 2

SQL terza parte D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2010/11

Basi di Dati. Esercitazione 1: Interrogazioni in SQL. K. Donno - Interrogazioni in SQL

SQL [2] Concetti avanzati di SQL. Esempi di interrogazioni

Lezione 7 SQL (II) Basi di dati bis Docente Mauro Minenna Pag.1

SQL. Storia un po piu in dettaglio. SQL: "storia" Tre livelli per SQL-2. Standard, dialetti, mercato

Basi di dati. SQL :Structured Query Language: SELECT (II) Prof.ssa Rosalba Giugno. SQL (Slide tratte in parte da. McGraw-Hill.

Basi di Dati. S Q L Lezione 4

SELECT s.nome, e.data Studenti s, Esami e WHERE e.materia = 'BD' AND e.voto = 30 AND e.matricola = s.matricola

SELECT s.nome, e.data FROM Studenti s, Esami e WHERE e.materia = 'BD' AND e.voto = 30 AND e.matricola = s.matricola

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"

Basi di dati. SQL :Structured Query Language: SELECT (I) Prof.ssa Rosalba Giugno

SQL - Structured Query Language

Parte III. L algebra relazionale

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

SQL Laboratorio di Basi di Dati a.a. 2002/2003

Basi di Dati. Esercitazione SQL. Paolo Papotti. 19 maggio 2005

SQL. Il nome sta per Structured Query Language Le interrogazioni SQL sono dichiarative

formulare in SQL una interrogazione per ciascuno dei seguenti punti:

Interrogazioni complesse. SQL avanzato 1

Database Lezione 2. Sommario. - Progettazione di un database - Join - Valore NULL - Operatori aggregati

Interrogazioni nidificate

Interrogazioni nidificate, commenti

Il linguaggio SQL: raggruppamenti. Versione elettronica: SQLb-gruppi.pdf

Interrogazioni nidificate

Basi di Dati: Corso di laboratorio

3. Selezionare i nomi dei clienti che iniziano con le lettere P, Q, R, S

Basi di Dati. 3. Il Linguaggio SQL. Basi di Dati - A.A. 2003/ Diego Calvanese 3. SQL - 1. Diego Calvanese SQL SQL-92

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

BASE DI DATI. Esercitazione: Campionato italiano 2015/2016 Raggruppamenti Nidificazione. Informatica Umanistica Università di Pisa

Interrogazioni in SQL

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

SQL - Funzioni di gruppo

Basi di Dati. S Q L Lezione 2

SQL IL LINGUAGGIO DI INTERROGAZIONE

Le interrogazioni annidate

<Nome Tabella>.<attributo>

Il linguaggio SQL: query innestate

Data Management Software. Il linguaggio SQL. Query Innestate. Paolo Avallone Sr Consulting IT Specialist DB2, Data Management 10 Settembre 2003

SQL Avanzato. Interrogazioni e il valore NULL. Interrogazioni complesse, trigger, viste e modifiche dello schema. Giorgio Giacinto 2015

Basi di dati (4) Docente: Andrea Bulgarelli. Università di Modena e Reggio Emilia. Argomento: select (1.

Linguaggio SQL: fondamenti D B M G

Informatica. Sintassi. Interrogazioni in SQL. Significato dell interrogazione. Tabella Impiegato. Basi di dati parte 4 SQL

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

SQL. Definizione dei da6 in SQL. SQL: "storia" CREATE TABLE: esempio. CREATE TABLE: esempio

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

SQL come linguaggio di interrogazione. Basi di dati. Interrogazioni SQL. Interpretazione algebrica delle query SQL

Join in SQL (primo modo) Informatica. Tabella Dipartimento. Interrogazione 4a. Interrogazione 4b. Interrogazione 4a

Esercitazione 3 SQL.

APPUNTI DELLA LEZIONE DI DATABASE DEL 26/10/2016 Studenti: Marco D'Amato, Adriano Luigi Piscopello Professore: Mario Bochicchio

ed SQL 10 Novembre 2009

Business Intelligence

D B M G. Linguaggio SQL: fondamenti. Istruzione SELECT: fondamenti. Elena Baralis 2007 Politecnico di Torino 1. Struttura di base

Tipi di sottoquery SQL

Gestione e Analisi dei Dati. Lezione 2 Vincoli su attributo Selezioni semplici su una tabella

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

1.3 Il linguaggio SQL

Basi di Dati. Esercitazione 2: Interrogazioni in SQL. K. Donno - Interrogazioni in SQL

Basi di Dati prof. Letizia Tanca

SQL. Metodologie informatiche per le discipline umanistiche. SQL Database. SQL = Structured Query Language Linguaggio di Interrogazione Strutturato

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

Basi di Dati e Sistemi Informativi. SQL come linguaggio di manipolazione dei dati

Query. Query (Interrogazioni) SQL SQL. Significato dell interrogazione. Sintassi

Il linguaggio SQL: le viste

Esercitazione su SQL

Sommario. Introduzione... 13

Basi di Dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Documentazione SQL. Argomento Sintassi Note Definizione schema create schema [NomeSchema] [[authorization] Autorizzazione] {DefElementoSchema}

Basi di dati I 8 luglio 2016 Esame Compito A Tempo a disposizione: un ora e trenta minuti.

Interrogazioni$e$il$valore$NULL$

Istruzioni DML di SQL

Uso delle variabili di alias. SQL slide aggiuntive. Interrogazione 25. Interrogazione 26

ESERCITAZIONE 4 Giovedì 13 novembre 2014 (3 ore) SQL

Data Management Software. Il linguaggio SQL. Raggruppamenti. Paolo Avallone Sr Consulting IT Specialist DB2, Data Management Marzo 2004

Estensioni del linguaggio SQL per interrogazioni OLAP

MODULO 2. Query normali e parametriche Query di:

Manuale SQL. Manuale SQL - 1 -

Il linguaggio SQL: query innestate

STUDIO. Esercizi proposti a lezione cap. 3 rev. dic da Ulmann, Widom Introduzione ai database. indirizzo. titolo. nome. recitain. attori.

Basi di Dati. Esercitazione 3: Interrogazioni in SQL. K. Donno - Interrogazioni in SQL

Corso di Informatica

Esercitazione: Il DBMS MySQL

Transcript:

1 SQL Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS) a.a. 2015/2016 http://www.di.uniba.it/~lisi/courses/basi-dati/bd2015-16.htm dott.ssa Francesca A. Lisi francesca.lisi@uniba.it Orario di ricevimento: giovedì ore 10-12

2 Sommario (IV parte) Interrogazioni complesse in SQL Operatori aggregati Interrogazioni con raggruppamento Interrogazioni di tipo insiemistico Interrogazioni nidificate Riferimenti capp. 3-4 di Pratt capp. 6-8 di MySQL Tutorial cap. 8, in particolare 8.5, di Elmasri & Navathe cap. 4, in particolare 4.3.3-4.3.6, di Atzeni et al.

Maternità Paternità Madre Luisa Luisa Anna Anna Maria Maria Padre Sergio Luigi Luigi Franco Franco Figlio Maria Luigi Olga Filippo Andrea Aldo Figlio Franco Olga Filippo Andrea Aldo Persone Nome Età Andrea 27 Aldo 25 Maria 55 Anna 50 Filippo 26 Luigi 50 Franco 60 Olga 30 Sergio 85 Luisa 75 Reddito 21 15 42 35 30 40 20 41 35 87 3

4 Operatori aggregati Nelle espressioni della target list possiamo avere anche espressioni che calcolano valori a partire da insiemi di ennuple: conteggio (COUNT) minimo (MIN) massimo (MAX) media (AVG) totale (SUM)

Operatori aggregati (II) Es. Contare il numero di figli di Franco 5 SELECT COUNT(*) AS NumFigliDiFranco FROM Paternita WHERE Padre = 'Franco' 2 l operatore aggregato viene applicato al risultato dell interrogazione: SELECT * FROM Paternita WHERE Padre = 'Franco'

Operatori aggregati (III) 6 Es. Trovare la media dei redditi dei figli di Franco SELECT AVG(reddito) FROM persone JOIN paternita ON nome=figlio WHERE padre='franco'

Operatori aggregati (IV) 7 SELECT eta, MAX(reddito) FROM persone La target list deve essere omogenea! SELECT MIN(eta), MAX(reddito) FROM persone

8 Operatori aggregati e valori nulli Persone Nome Età Andrea 27 Aldo 25 Maria 55 Anna 50 Reddito 21 NULL 21 35 SELECT COUNT(*) FROM persone 4 SELECT COUNT(reddito) FROM persone 3 SELECT COUNT(DISTINCT reddito) FROM persone 3

9 Operatori aggregati e valori nulli (II) SELECT AVG(reddito) FROM persone 25,6 SELECT SUM(reddito)/COUNT(*) FROM persone 19,25

Raggruppamenti 10 Gli operatori aggregati possono essere applicati a partizioni di una relazione (ottenute mediante la clausola GROUP BY) Come si risponde a questo tipo di interrogazioni? 1. Si esegue l interrogazione trascurando momentaneamente raggruppamenti ed operatori aggregati 2. Si formano i gruppi nella relazione risultato secondo la condizione di raggruppamento e si applica l operatore aggregato a ciascun gruppo

Raggruppamenti (II) 11 Es. Trovare il numero di figli di ciascun padre 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

12 Raggruppamenti (III) Es. Estrarre i padri i cui figli hanno un reddito medio maggiore di 25 SELECT padre, AVG(f.reddito) FROM persone f JOIN paternita ON figlio = nome GROUP BY padre HAVING AVG(f.reddito)> 25

13 Raggruppamenti (IV) Es. Estrarre i padri i cui figli sotto i 30 anni hanno un reddito medio maggiore di 25 SELECT padre, AVG(f.reddito) FROM persone f JOIN paternita ON figlio = nome WHERE eta < 30 GROUP BY padre HAVING AVG(f.reddito)> 25

Raggruppamenti (V) 14 SELECT padre, AVG(f.reddito), p.reddito FROM persone f JOIN paternita ON figlio = nome JOIN persone p ON padre = p.nome GROUP BY padre SELECT padre, AVG(f.reddito), p.reddito FROM persone f JOIN paternita ON figlio = nome JOIN persone p ON padre = p.nome GROUP BY padre, p.reddito

15 Sintassi, riassumiamo SelectSQL ::= SELECT ListaAttributiOEspressioni FROM ListaTabelle [WHERE CondizioniSemplici] [GROUP BY ListaAttributiDiRaggruppamento] [HAVING CondizioniAggregate] [ORDER BY ListaAttributiDiOrdinamento]

16 Unione SELECT padre FROM paternita UNION SELECT madre FROM maternita Sergio Luigi Franco Luisa Anna Maria quali nomi per gli attributi del risultato? nessuno quelli del primo operando

Unione (II) 17 SELECT padre, figlio FROM paternita UNION SELECT madre, figlio FROM maternita SELECT padre, figlio FROM paternita UNION SELECT figlio, madre FROM maternita Padre Sergio Luigi Luigi Franco Franco Luisa Luisa Anna Anna Maria Maria Figlio Franco Olga Filippo Andrea Aldo Maria Luigi Olga Filippo Andrea Aldo

Unione (III) 18 SELECT padre AS genitore, figlio FROM paternita UNION SELECT figlio, madre AS genitore FROM maternita SELECT padre AS genitore, figlio FROM paternita UNION SELECT madre AS genitore, figlio FROM maternita

Unione (IV) 19 Es. Estrarre le persone che o hanno esse stesse un reddito superiore ai 30 milioni o sono padri di figli con un reddito superiore ai 30 milioni SELECT * FROM Persone WHERE Reddito > 30 UNION SELECT P.* FROM Persone F, Paternita, Persone P WHERE F.Nome = Figlio AND Padre = P.Nome AND F.Reddito > 30

20 Differenza Es. Estrarre tutti i nomi che non siano cognomi SELECT Nome FROM Impiegato EXCEPT SELECT Cognome AS Nome FROM Impiegato

Intersezione 21 Es. Estrarre tutti i nomi che siano anche cognomi SELECT Nome FROM Impiegato INTERSECT SELECT Cognome AS Nome FROM Impiegato equivale a SELECT I.Nome FROM Impiegato I, Impiegato J WHERE I.Nome = J.Cognome

22 Interrogazioni nidificate Le condizioni atomiche permettono anche il confronto fra un attributo (o più, vedremo poi) e il risultato di una sotto-interrogazione quantificazioni esistenziali La forma nidificata è meno dichiarativa, ma talvolta più leggibile (richiede meno variabili) La forma piana e quella nidificata possono essere combinate Le sotto-interrogazioni non possono contenere operatori insiemistici (ma tale limitazione non è significativa)

Interrogazioni nidificate (II) 23 Es. Estrarre nome e reddito del padre di Franco SELECT Nome, Reddito FROM Persone, Paternita WHERE Nome=Padre AND Figlio = 'Franco' SELECT Nome, Reddito FROM Persone WHERE Nome = (SELECT Padre FROM Paternita WHERE Figlio = 'Franco')

24 Interrogazioni nidificate (III) Es. Estrarre le persone con il reddito massimo SELECT * FROM persone WHERE reddito = (SELECT MAX(reddito) FROM persone) SELECT * FROM persone WHERE reddito >= ALL (SELECT reddito FROM persone) soluzioni equivalenti

Interrogazioni nidificate (IV) Es. Estrarre nome e reddito dei padri di persone che guadagnano più di 20 milioni 25 SELECT DISTINCT P.Nome, P.Reddito FROM Persone P, Paternita, Persone F WHERE P.Nome = Padre AND Figlio = F.Nome AND F.Reddito > 20 SELECT Nome, Reddito FROM Persone WHERE Nome IN (SELECT Padre FROM Paternita WHERE Figlio = ANY (SELECT Nome FROM Persone WHERE Reddito > 20))

Interrogazioni nidificate (V) Es. Estrarre nome e reddito dei padri di persone che guadagnano più di 20 milioni 26 SELECT DISTINCT P.Nome, P.Reddito FROM Persone P, Paternita, Persone F WHERE P.Nome = Padre AND Figlio = F.Nome AND F.Reddito > 20 SELECT Nome, Reddito FROM Persone WHERE Nome IN (SELECT Padre FROM Paternita, Persone WHERE Figlio = Nome AND Reddito > 20)

Interrogazioni nidificate (VI) 27 Es. Estrarre nome e reddito dei padri di persone che guadagnano più di 20 milioni, con indicazione del reddito del figlio SELECT DISTINCT P.Nome, P.Reddito, F.Reddito FROM Persone P, Paternita, Persone F WHERE P.Nome = Padre AND Figlio = F.Nome AND F.Reddito > 20

... SELECT Nome, Reddito,???? FROM Persone WHERE Nome IN (SELECT Padre FROM Paternita WHERE Figlio = ANY (SELECT Nome FROM Persone WHERE Reddito > 20)) 28 regole di visibilità: si può fare riferimento solo a variabili definite in blocchi più esterni se un nome di variabile è omesso, si assume riferimento alla variabile più vicina

29 Interrogazioni nidificate (VII) SELECT * FROM Impiegato WHERE Dipart IN (SELECT Nome FROM Dipartimento D1 WHERE Nome = 'Produzione') OR Dipart IN (SELECT Nome FROM Dipartimento D2 WHERE D2.Citta = D1.Citta)

Interrogazioni nidificate (VII) 30 Es. Estrarre 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)

Interrogazioni nidificate (VIII) 31 Es. Estrarre i padri i cui figli guadagnano tutti più di venti milioni SELECT DISTINCT Padre FROM Paternita Z WHERE NOT EXISTS (SELECT * FROM Paternita W, Persone WHERE W.Padre = Z.Padre AND W.Figlio = Nome AND Reddito <= 20)

Interrogazioni nidificate (IX) 32 Es. Estrarre le persone che o hanno esse stesse un reddito superiore ai 30 milioni o sono padri di figli con un reddito superiore ai 30 milioni SELECT * FROM Persone F WHERE Reddito > 30 OR EXISTS (SELECT * FROM Paternita, Persone P WHERE F.Nome = Figlio AND Padre = P.Nome AND P.Reddito > 30)

Interrogazioni nidificate (X) 33 Es. Estrarre tutti i nomi che non siano anche cognomi SELECT Nome FROM Impiegato I WHERE NOT EXISTS (SELECT * FROM Impiegato WHERE Cognome = I.Nome)

34 Esercitazione con MySQL Esercizi 10, 14-22 sul database Prodotti Premiere da cap. 3., pagg. 65-66, di Pratt; Esercizi 4-19 sul database Prodotti Premiere da cap. 4., pag. 91-2 di Pratt; N.B. MySQL 5.5 supporta tutti gli operatori aggregati, le interrogazioni nidificate ma solo UNION fra gli operatori insiemistici. In particolare, un FULL OUTER JOIN (non supportato in MySQL 5.5) si esprime come UNION di un LEFT OUTER JOIN e di un RIGHT OUTER JOIN.