Alessandra Raffaetà. Qualificazione: notazione con il punto

Documenti analoghi
Le implementazioni nei vari DBMS relazionali commerciali

Alessandra Raffaetà. Esempio: Compagnia di trasporti

Consideriamo lo schema relazionale

SQL è stato definito nel 1973 ed è oggi il linguaggio universale dei sistemi relazionali

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

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

Alessandra Raffaetà. Esercizio: Cinema

S.I.T. PER LA VALUTAZIONE E GESTIONE DEL TERRITORIO Corso di Laurea Magistrale in Scienze Ambientali. Alessandra Raffaetà

Basi di Dati Esempi di prove di verifica con soluzioni

Basi di Dati - V. Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL (cont.) Corso di Laurea in Informatica Anno Accademico 2013/2014

Sistemi di Elaborazione delle Informazioni

Lezioni di Laboratorio sui Data Base

Operatori aggregati. Un operatore aggregato è una funzione che si applica ad un insieme di tuple di una tabella

Basi di Dati Esempi di SQL

Queries su più tabelle

<Nome Tabella>.<attributo>

IL LINGUAGGIO SQL LE BASI

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

QL (Query Language) Alice Pavarani

Basi di Dati Esempi di SQL

ESERCIZIO 1 SCHEMA RELAZIONALE

Basi di Dati: Corso di laboratorio

SQL: le funzioni di aggregazione

Interrogazioni semplici

Select From Where...

Basi di Dati: Corso di laboratorio

2- Il titolo dei film di F. Fellini prodotti dopo il SELECT f.titolo FROM Film f WHERE f.regista = Fellini AND f.annoproduzione > 1960

SQL: RAGGRUPPAMENTI, QUANTIFICAZIONE, METODO. Patrizio Dazzi a.a

Progettazione di Sistemi Informatici

1. Per ogni film in cui appaiono solo attori nati prima del 1970 restituire il titolo del film.

V. Moriggia Modelli di Base Dati. Modelli di Base Dati. a.a. 2001/

Il linguaggio SQL: raggruppamenti

IL MODELLO RELAZIONALE

Basi di Dati: Corso di laboratorio

Caratteristiche dei linguaggi per Database

ISBN Titolo CasaEd AnnoEd

Structured Query Language

Operazioni su insiemi: unione, intersezione e differenza

Basi di Dati. Concetti Avanzati

1- Il nome di tutte le sale di Pisa SELECT s.nome FROM Sale s WHERE s.città = 'Pisa'

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

Corso sul linguaggio SQL

Gestione dei valori nulli

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

Linguaggio SQL seconda parte

Interrogazioni con Raggruppamenti

Istituto Statale E.Torricelli Liceo Scientifico Tecnologico-Tecnico Industriale. Compiti Estivi Informatica

Laboratorio di Basi di dati Soluzioni della V esercitazione - 23 aprile 2007

Esercizi SQL. Credits Prof. Campi

Esempi di Query con Aggregazioni in SQL/1

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

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

Il linguaggio SQL: raggruppamenti

Corso di Basi di Dati

Il modello relazionale

Operazioni sui dati. Interrogazioni con operatori aggregati. Capitolo 4

LEZIONE. Reperimento dei dati: SELECT. Alias e calcoli. 110 BLOCCO TEMATICO A Le basi di dati

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

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

Esercizi proposti su SQL - SELECT avanzata. Laura Farinetti - DAUIN Politecnico di Torino

Esercizi proposti su SQL SELECT base. Laura Farinetti - DAUIN Politecnico di Torino

5.1- Le operazioni: esempi

A.A. 2018/2019. Funzioni di Aggregazione e Raggruppamenti in SQL FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE. Docente Prof. Raffaele Pizzolante

Manuale Comandi SQL SQL. Sito per esercitarsi (on line) SQL

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

SQL Esercizi DML Blocco 1

ESERCITAZIONI ACCESS

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

Basi di Dati: Corso di laboratorio

Esempi SQL con Access. Orazio Battaglia

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

Laboratorio di. Docenti: Alberto Belussi e Carlo Combi

Operatori aggregati: COUNT

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

Laura Farinetti - DAUIN Politecnico di Torino. Sia dato lo schema relazionale costituito dalle tabelle (le chiavi primarie sono sottolineate)

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

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

Prima prova di verifica del 4/11/2009

SQL: SCRIVERE INTERROGAZIONI E ANNIDARLE. Patrizio Dazzi a.a

Il linguaggio SQL: raggruppamenti

Operatori aggregati: COUNT

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

Interrogazioni nidificate

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

Tabelle esempio: Impiegato/Dipartimento

Interrogazioni complesse. SQL avanzato 1

Alessandra Raffaetà. La costruzione di una base di dati

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

SQL - Structured Query Language

VISTE. 19/11/2015 Concetti Avanzati - SQL 71

Basi di dati - Laboratorio

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

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

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

Laboratorio di Basi di Dati e Web

Transcript:

Lezione 7 S.I.T. PER LA VALUTAZIONE E GESTIONE DEL TERRITORIO Corso di Laurea Magistrale in Scienze Ambientali Alessandra Raffaetà Dipartimento di Informatica Università Ca Foscari Venezia Qualificazione: notazione con il punto Se si opera sul prodotto di tabelle con attributi omonimi occorre qualificarli, ovvero identificare la tabella alla quale ciascun attributo si riferisce Notazione con il Punto. Utile se si opera su tabelle diverse con attributi aventi lo stesso nome Tabella.Attributo Es. generare una tabella che riporti Codice, Nome, Cognome dei docenti e Codice degli esami corrispondenti SELECT Docenti.CodDoc, Docenti.Nome, Docenti.Cognome, Esami.Codice FROM Esami, Docenti WHERE Docenti.CodDoc = Esami.CodDoc

Alias Qualificazione: notazione con il punto e alias Si associa un identificatore alle relazioni in gioco SELECT d.coddoc, d.nome, d.cognome, e.codice FROM Esami e, Docenti d WHERE d.coddoc = e.coddoc Alias Qualificazione: notazione con il punto e alias Essenziale se si opera su più copie della stessa relazione (-> associazioni ricorsive!) Es. generare una tabella che contenga cognomi e matricole degli studenti e dei loro tutor SELECT s.cognome, s.matricola, t.cognome, t.matricola FROM Studenti s, Studenti t WHERE s.tutor = t.matricola La qualificazione è sempre possibile e può rendere la query più leggibile

Alias e query ricorsive Gli alias permettono quindi di avere 'ricorsività' a un numero arbitrario di livelli. Es. Data una relazione Persone (Id, Nome, Cognome, IdPadre, Lavoro) Id <<PK>>, IdPadre <<FK(Persone)>> Nomi delle persone che fanno lo stesso lavoro dei nonni SELECT n.nome, f.nome FROM Persone n, Persone p, Persone f WHERE f.idpadre=p.id AND p.idpadre=n.id AND n.lavoro=f.lavoro Esercizio: Cinema Attori(CodiceAtt, Nome, AnnoNascita) PK(CodiceAtt) AttoriFilm(CodiceAtt*, CodiceFilm*) PK(CodiceAtt, CodiceFilm) CodiceAtt FK(Attori), CodiceFilm FK(Film) Film(CodiceFilm, Titolo, AnnoProduzione, Regista) PK(CodiceFilm) Proiezioni(CodiceFilm*, CodiceSala*, Incasso, DataProiez) PK(CodiceFilm, CodiceSala, DataProiezione) CodiceFilm FK(Film), CodiceSala FK(Sale) Sale(CodiceSala, Posti, Nome, Città) PK(CodiceSala)

Esercizio: Cinema Query 1 1. Trovare il titolo di tutti i film prodotti prima del 1975. 2. Restituire, senza duplicati, il CodiceFilm di tutti i film per i quali c'è stata una proiezione con incasso maggiore di 1000 euro in una sala che avesse meno di 100 posti oppure che si trovasse a Venezia. 3. Per ogni film in cui appare un attore nato nel 1970 restituire il titolo del film e il nome. 4. Per ogni film in cui appaiono due attori diversi nati lo stesso anno trovare il codice del film ed i nomi dei due attori.

Query 1 1. SELECT f.titolo FROM Film f WHERE f.annoproduzione < 1975 2. SELECT DISTINCT p.codicefilm FROM Proiezioni p, Sale s WHERE p.codicesala = s.codicesala AND p.incasso > 1000 AND (s.posti < 100 OR s.città = Venezia ) 3. SELECT f.titolo, a.nome FROM Attori a, AttoriFilm af, Film f WHERE a.codiceatt = af.codiceatt AND af.codicefilm = f.codicefilm AND a.annonascita = 1970 Query 1 4. SELECT af1.codicefilm, a1.nome, a2.nome FROM Attori a1, Attori a2, AttoriFilm af1, AttoriFilm af2 WHERE a1.codiceatt <> a2.codiceatt AND a1.codiceatt = af1.codiceatt AND a2.codiceatt = af2.codiceatt AND a1.annonascita = a2.annonascita AND af1.codicefilm = af2.codicefilm

Lista degli attributi Attributi ::= * Expr [[AS] Nome] {, Expr [[AS] Nome] } Expr AS Nome: dà il nome Nome alla colonna ottenuta come risultato dell espressione Expr usato per rinominare attributi o più comunemente per dare un nome ad un attributo calcolato SELECT Nome, Cognome, YEAR(CURDATE())- Nascita AS Eta FROM Studenti WHERE Provincia= PD Sintassi delle espressioni Le espressioni possono includere operatori aritmetici (o altri operatori e funzioni sui tipi degli attributi) o funzioni di aggregazione Expr ::= [Ide.]Attributo Const ( Expr ) [-] Expr [Op Expr] COUNT(*) AggrFun ( [DISTINCT] [Ide.]Attributo) AggrFun ::= SUM COUNT AVG MAX MIN NB:si usano tutte funzioni di aggregazione (-> produce un unica riga) o nessuna.

ESEMPI: funzioni di aggregazione Numero di elementi della relazione Studenti SELECT count(*) FROM Studenti Anno di nascita minimo, massimo e medio degli studenti: SELECT min(nascita), max(nascita), avg(nascita) FROM Studenti èdiverso da SELECT min(nascita), max(nascita), avg(distinct Nascita) FROM Studenti Nota: non ha senso... (vedi GROUP BY) SELECT Candidato, avg(voto) FROM Esami ESEMPI: funzioni di aggregazione Numero di Studenti che hanno un Tutor SELECT FROM count(tutor) Studenti

Clausola ORDER BY Inserendo la clausola ORDER BY Attributo [(DESC ASC)] {, Attributo [(DESC ASC)] } può far sì che la tabella risultante sia ordinata, secondo gli attribuuti indicati (ordine lessicografico) in modo crescente (ASC) [default] o decrescente (DESC): e.g. SELECT Nome,Cognome FROM Studenti WHERE Provincia= PD ORDER BY Cognome (DESC), Nome (DESC) Raggruppamento Per ogni materia, trovare nome della materia e voto medio degli esami in quella materia [selezionando solo le materie per le quali sono stati sostenuti più di tre esami]: Per ogni materia vogliamo - Il nome, che e` un attributo di Esami - Una funzione aggregata sugli esami della materia Soluzione: SELECT e.materia, avg(e.voto) FROM Esami e GROUP BY e.materia [HAVING count(*)>3]

Raggruppamento SELECT FROM WHERE GROUP BY A1,..,An [HAVING condizione] Semantica: Esegue le clausole FROM WHERE Partiziona la tabella risultante rispetto all uguaglianza su tutti i campi A1,, An Elimina i gruppi che non rispettano la clausola HAVING Da ogni gruppo estrae una riga usando la clausola SELECT Esecuzione di GROUP BY SELECT Candidato, count(*) AS NEsami, min(voto), max(voto), avg(voto) FROM Esami GROUP BY Candidato HAVING avg(voto) > 23; Codice Materia Candidato Data Voto Lode CodDoc B112 BD1 71523 2006-07-08 27 N AM1 B247 BD2 71523 2006-12-28 30 S NG2 B248 BD1 76366 2007-07-18 29 N AM1 B249 BD2 71576 2007-07-19 22 N NG2 F313 FIS 76366 2007-07-08 26 N GL1 F314 FIS 71576 2007-07-29 22 N GL1

Esecuzione di GROUP BY Codice Materia Candidato Data Voto Lode CodDoc B112 BD1 71523 2006-07-08 27 N AM1 B247 BD2 71523 2006-12-28 30 S NG2 B249 BD2 71576 2007-07-19 22 N NG2 F314 FIS 71576 2007-07-29 22 N GL1 B248 BD1 76366 2007-07-18 29 N AM1 F313 FIS 76366 2007-07-08 26 N GL1 +-----------+--------+-----------+-----------+-----------+ Candidato NEsami min(voto) max(voto) avg(voto) +-----------+--------+-----------+-----------+-----------+ 71523 2 27 30 28.5000 76366 2 26 29 27.5000 +-----------+--------+-----------+-----------+-----------+ Raggruppamento Per ogni studente, cognome e voto medio: SELECT s.cognome, avg(e.voto) FROM Studenti s, Esami e WHERE s.matricola = e.candidato GROUP BY s.matricola È necessario scrivere: GROUP BY s.matricola, s.cognome Gli attributi espressi non aggregati nella select (s.cognome) e in HAVING se presente (s.matricola) devono essere inclusi tra quelli citati nella GROUP BY Gli attributi aggregati (avg(e.voto)) vanno scelti tra quelli non raggruppati

Clausola HAVING: importante Anche la clausola HAVING cita solo: espressioni su attributi di raggruppamento; funzioni di aggregazione applicate ad attributi non di raggruppamento. Non va... SELECT s.cognome, avg(e.voto) FROM Studenti s, Esami e WHERE s.matricola = e.candidato GROUP BY s.matricola, s.cognome HAVING YEAR(Data) > 2006; Query 2 5. Per ogni città restituire il nome della città ed il numero di sale con più di 100 posti. 6. Per ogni regista, restituire il nome e l incasso totale di tutte le proiezioni dei suoi film. 7. Per ogni film di Nanni Moretti restituire il titolo, il numero totale di proiezioni a Venezia e l incasso totale (sempre a Venezia).