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

Documenti analoghi
Interrogazioni nidificate, commenti

Il linguaggio SQL: query innestate

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

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

4 SQL : Interrogazioni nidificate

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: "storia"

Basi di Dati. Programmazione e gestione di sistemi telematici

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

SQL - Funzioni di gruppo

SQL seconda 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 2012/13

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

DB - Modello relazionale dei dati. DB - Modello Relazionale 1

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

SQL prima 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 2011/12

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

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

Definizione di domini

Operatori aggregati: COUNT

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Basi di dati. SQL: Amministrazione e Viste. Prof.ssa Rosalba Giugno Dott. Aurelio Giudice

Sistemi per la gestione di database: MySQL ( )

Le Basi di Dati. Le Basi di Dati

Operatori aggregati: COUNT

Corso di Laboratorio di Basi di Dati

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

CONCETTO DI ANNIDAMENTO

Basi di dati. SQL: concetti base

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

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

SQL/OLAP. Estensioni OLAP in SQL

Basi di Dati Corso di Laura in Informatica Umanistica

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

SQL IL LINGUAGGIO DI INTERROGAZIONE

Structured Query Language parte 1

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

Interrogazioni complesse. SQL avanzato 1

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

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

Vincoli di integrità

Il linguaggio SQL: viste e tabelle derivate. Versione elettronica: SQLd-viste.pdf

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

Istruzioni DML di SQL

SQL. Linguaggio di interrogazione per basi di dati relazionali. Relazione = tabella con attributi (a 1, a 2,, a n ): Funzionalità principali di SQL:

Il linguaggio SQL: viste e tabelle derivate

Esercitazione su SQL

CAPITOLO 4 ESERCIZI SU SQL

MAX, SUM, AVG, COUNT)

Operazioni sui database

Linguaggi per basi di dati

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

Basi di Dati. Esercitazione SQL. Ing. Paolo Cappellari

ALGEBRA RELAZIONALE RIEPILOGO

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

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

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

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

Basi di Dati: Corso di laboratorio

OR true null false true true true true null true null null false true null false NOT

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

Basi di dati. L Algebra Relazionale. K. Donno - L Algebra Relazionale

Introduzione all Algebra Relazionale

Capitolo 13. Interrogare una base di dati

Cardinalità e identificatori. Informatica. Generalizzazioni. Generalizzazioni. Generalizzazioni. Generalizzazioni

Dispensa di database Access

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

Azioni. Select e join non consentono di modificare il contenuto del DB. Inserzione di nuovi dati. Azioni desiderate. Aggiornamento di dati

Prova Scritta di Basi di Dati

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

Introduzione. Elenco telefonico Conti correnti Catalogo libri di una biblioteca Orario dei treni aerei

Corso di Informatica (Basi di Dati)

Gli operatori relazionali

DBMS (Data Base Management System)

Modello concettuale dei dati. Paolo Brunasti - UniMiB 1 / 12

Database Lezione 1. Sommario. - Introduzione - Tabelle e chiave primaria - Query - Calcoli ed alias - Ordinamento

Data management a.a Il linguaggio SQL

MODELLO RELAZIONALE. Introduzione

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

1.3 Il linguaggio SQL

Ricorsione in SQL-99. Introduzione. Idea di base

Compito Basi di Dati. Tempo concesso: 90 minuti 18 Gennaio 2007 Nome: Cognome: Matricola:

(anno accademico )

Introduzione ai database relazionali

Basi di dati II prova intermedia 16 Marzo 2006 Compito 1

Corso di Laurea in Ingegneria Informatica Algoritmi e basi di dati Modulo Basi di dati a.a

Il BACKUP è disponibile in

Compito DA e BD. Tempo concesso: 90 minuti 12 giugno 03 Nome: Cognome: Matricola: Esercizio 1

2.2b: RELAZIONI E BASI DI DATI. Atzeni, cap

SQL e ACCESS. Modello relazionale PROBLEMA ENTITA STUDENTE

Modello Relazionale. Modello Relazionale. Relazioni - Prodotto Cartesiano. Relazione: tre accezioni. Es. Dati gli insiemi

Esercitazione SQL. Università degli Studi del Sannio Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica

SQL (STRUCTURED QUERY LANGUAGE)

Informatica (Basi di Dati)

Basi di Dati Prof. L. Tanca e F. A. Schreiber APPELLO DEL 12 FEBBRAIO 2015 PARTE 1

Basi di dati. Il Modello Relazionale dei Dati. K. Donno - Il Modello Relazionale dei Dati

Lezioni di Laboratorio sui Data Base

Algebra Relazionale e Calcolo Relazionale. L. Vigliano

Corso sul linguaggio SQL

SQL: definizione schema

Per visualizzare e immettere i dati in una tabella è possibile utilizzare le maschere;

Transcript:

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

Sintassi, riassumiamo SelectSQL ::= select ListaAttributiOEspressioni from ListaTabelle [ where CondizioniSemplici ] [ group by ListaAttributiDiRaggruppamento ] [ having CondizioniAggregate ] [ order by ListaAttributiDiOrdinamento ]

Esempio NOME MATRICOL INDIRIZZO TELEFONO Mario Rossi 123456 Via Etnea 1 222222 Ugo Bianchi 234567 Via Roma 2 333333 Teo Verdi 345678 Via Enna 3 444444 CORSO Programmazione Architetture Matematica Discreta PROFESSORE Ferro Pappalardo Lizzio CORSO MATRICOLA VOTO Programmazione 345678 27 Architetture 123456 30 Programmazione 234567 18 Matematica 345678 22 Discreta Architettura 345678 30 Creare una query che restiuisca: nome, matricola, voto minimo,voto massimo, voto medio per gli studenti che hanno dato più di 8 materie

Esempio SELECT Nome, Matricola, MIN(Voto), MAX(Voto),AVG(Voto) FROM Esami, Studenti WHERE Esami.Matricola = Studenti.Matricola GROUP BY BY Nome,Matricola HAVING COUNT(*) > 8 Creare una query che restiuisca: nome, matricola, voto minimo,voto massimo, voto medio per gli studenti che hanno dato più di 8 materie

Esercitazione Considera il seguente schema relazionale: Quadri( Pittore, Titolo, DataCreazione, NomeMuseo) Musei( NomeMuseo, Citta, Curatore) Costo( Titolo, Prezzo) Scrivere le seguenti query in SQL: Elenco dei musei e del valore medio dei quadri posseduti. Il numero di quadri per ogni pittore fra tutti i musei parigini.

Elenco dei musei e del valore medio dei quadri posseduti. Quadri( Pittore, Titolo, DataCreazione, NomeMuseo) Musei( NomeMuseo, Citta, Curatore) Costo( Titolo, Prezzo) SELECT avg(c.prezzo) prezzo medio, q.nomemuseo FROM quadri q, costo c WHERE q.titolo = c.titolo GROUP BY m.nomemuseo

Elenco dei musei e del valore medio dei quadri posseduti. Quadri( Pittore, Titolo, DataCreazione, NomeMuseo) Musei( NomeMuseo, Citta, Curatore) Costo( Titolo, Prezzo) SELECT avg(c.prezzo) prezzo medio, quadri.nomemuseo FROM quadri JOIN costo ON quadri.titolo = costo.titolo GROUP BY quadri.nomemuseo

Il numero di quadri per ogni pittore fra tutti i musei parigini. Quadri( Pittore, Titolo, DataCreazione, NomeMuseo) Musei( NomeMuseo, Citta, Curatore) Costo( Titolo, Prezzo) SELECT count(*) numero quadri, pittore FROM musei m, quadri q WHERE m.citta = Parigi AND m.nomemuseo = q.nomemuseo GROUP BY pittore

Interrogazioni nidificate SELECT [DISTINCT] {* colonna [alias],...} FROM tabella [WHERE condizione(i)]; Un primo modo e scrivere una condizione che del tipo: Attributo op ( Sottoselect ) op {=, <>, >, >=, <, <=} SottoSelect deve dare come risultato una tabella con un solo elemento o vuota (vedremo alcuni esempi)

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

Esempio di SELECT nidificate 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') La query nella clausola WHERE e la query nidificata Maternità Madre Figlio Persone Paternità Padre Figlio Nome Età Reddito

Interrogazioni nidificate le condizioni in SQL permettono anche il confronto fra un attributo e il risultato di una sottoquery Attributo op (ANY ALL) ( Sottoselect ) ANY: il predicato e vero se almeno uno dei valori restituiti da Query soddisfano la condizione ALL: il predicato e vero se tutti i valori restituiti dalla Query soddisfano la condizione quantificatore esistenziale [NOT] EXISTS ( Sottoselect ) Il predicato e vero se la SelectQuery restituisce almeno una tupla Attributo [NOT] IN ( Sottoselect )

Nome e reddito dei padri di persone che guadagnano più di 20 milioni SELECT 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))

Nome e reddito dei padri di persone che guadagnano più di 20 milioni SELECT 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, commenti La forma nidificata è meno dichiarativa, ma talvolta più leggibile (richiede meno variabili) La forma piana e quella nidificata possono essere combinate Le sottointerrogazioni non possono contenere operatori insiemistici ( l unione si fa solo al livello esterno );

Negazione con le query nidificate Trovare quei dipartimenti dove non c e nessuno che si chiama Brown : Oppure:

Operatori IN e NOT IN IN e sinonimo di: =ANY NOT IN e sinonimo di: <>ALL

MAX e MIN con le query nidificate Esempio: Il dipartimento(i) dove lavora colui con lo stipendio piu alto di tutta l azienda: Oppure:

regole di visibilità: Interrogazioni nidificate, commenti, non è possibile fare riferimenti a variabili definite in blocchi più interni se un nome di variabile è omesso, si assume riferimento alla variabile più vicina in un blocco si può fare riferimento a variabili definite in blocchi più esterni

Quantificazione esistenziale Ulteriore tipo di condizione EXISTS ( Sottoespressione ) Le persone che hanno almeno un figlio (viene valutata l interrogazione esterna e per ogni riga quella interna) SELECT * FROM Persone WHERE EXISTS ( SELECT * FROM Paternita WHERE Padre = Nome) OR EXISTS ( SELECT * FROM Maternita WHERE Madre = Nome)

Quantificazione esistenziale, 2 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)

Semantica delle espressioni correlate La query piu interna puo usare variabili della query esterna L interrogazione interna viene eseguita una volta per ciascuna ennupla dell interrogazione esterna Esempio, trovare tutti gli studenti che hanno un omonimo: SELECT * FROM Student S WHERE EXISTS (SELECT * FROM Student S2 WHERE S2.Nome = S.Nome AND S2.Cognome = S.Cognome AND S2.Matricola <> S.Matricola)

Semantica delle espressioni correlate, 2 Esempio, trovare tutti gli studenti che NON hanno un omonimo: SELECT * FROM Student S WHERE NOT EXISTS (SELECT * FROM Student S2 WHERE S2.Nome = S.Nome AND S2.Cognome = S.Cognome AND S2.Matricola <> S.Matricola)

Visibilità scorretta: 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) D1 non e visibile nella seconda query nidificata in quanto le due sottoquery sono allo stesso livello

Confronto su piu attributi Il confronto con il risultato di una query nidificata puo essere basato su piu attributi Stessa query di prima, trovare tutti gli studenti che hanno un omonimo: SELECT * FROM Student S WHERE (Nome, Cognome) IN (SELECT Nome, Cognome FROM Student S2 WHERE S2.Matricola <> S.Matricola)

Esempio: ancora il quantificatore Universale Agenti(CodiceAgente,Nome,Zona Supervisore,Commissione) Clienti(CodiceCliente,Nome,Citta,Sconto) Ordini(CodiceOrdine,CodiceCliente,CodiceAge nte,articolo,data,ammontare)

Esempio: ancora il quantificatore Universale Supponiamo di voler trovare i codici di quei clienti che hanno fatto ordini a TUTTI gli agenti di Catania. Per ogni agente z di Catania esiste un ordine y del nostro cliente x a z. z y y(n,x,z,p,d,a) sse z y y(n,x,z,p,d,a)

Tradotta in SQL SELECT C.CodiceCliente FROM Clienti C WHERE NOT EXISTS (SELECT * FROM Agenti A WHERE A.Zona = Catania AND NOT EXISTS (SELECT * FROM Ordini V WHERE V.CodiceCliente = C.CodiceCliente AND V.CodiceAgente = A.CodiceAgente) )

City(id,city,country,district,population) Cities_Stores(city,store_type,address) Stores(store_type,description)

Esempi Che tipi di negozi sono presenti in una o più città? SELECT DISTINCT store_type FROM Stores WHERE EXISTS (SELECT * FROM Cities_Stores WHERE Cities_Stores.store_type = Stores.store_type); Quali tipi di negozi non sono presenti nelle città? SELECT DISTINCT store_type FROM Stores WHERE NOT EXISTS (SELECT * FROM Cities_Stores WHERE Cities_Stores.store_type = Stores.store_type);

Esempi Quali tipi di negozi sono presenti in TUTTE le città? SELECT DISTINCT store_type FROM Stores WHERE NOT EXISTS ( SELECT * FROM Cities WHERE NOT EXISTS ( SELECT * FROM Cities_Stores WHERE Cities_Stores.city = Cities.city AND Cities_Stores.store_type = Stores.store_type)); Doppio NOT EXISTS. Ha una clausola NOT EXISTS dentro una clausola NOT EXISTS. Nell output non esiste una città che non ha un tipo di negozio (store) dei tipi elencati.

SELECT Prodotto.marca FROM PC p1, Prodotto WHERE NOT EXISTS (SELECT * FROM PC WHERE PC.ram < p1.ram) AND p1.speed >= ALL (SELECT speed FROM PC WHERE PC.ram = p1.ram) AND p1.modello = Prodotto.modello 1. Date le relazioni: Prodotto(marca, modello) PC(modello, velocità, ram) Implementare una query SQL che trovi le marche di PC che hanno il processore più veloce tra tutti i PC che hanno la minor quantità di RAM.

Commenti finali sulle query nidificate Query nidificate possono essere meno dichiarative in un certo senso ma spesso sono piu facilmente interpretabili Suddivisibili in blocchi piu semplici da interpretare L utilizzo di variabili deve rispettare le regole di visibilita Cioe, una variabile puo essere usata solo all interno dello stesso blocco e in un blocco piu interno Comunque, query nidificate complesse possono essere di difficile comprensione Soprattutto quando si usano molte variabili comuni tra blocchi diversi

LOGICA A 3 VALORI p q p and q p or q not p T T T T F T F F T F T U U T F F F F F T F U F U T U U U U U

Note sulle sottoselect e valori nulli Espr op (Sottoselect) Vale unknown se espr e NULL oppure se la Sottoselect produce una tabella vuota Espr IN (Sottoselect) Espr op ANY (Sottoselect) Vale unknown se espr e NULL oppure se NULL e fra I valori della SottoSelect e il predicato e falso per gli altri valori non NULL Espr op ALL (Sottoselect) Vale unknown se espr e NULL oppure se NULL e fra I valori della SottoSelect

MADRE Maria Maria Carla FIGLIO Luigi Agata Francesco ANNI 30 NULL NULL SELECT madre FROM madri WHERE anni > 30 -- risultato tab vuota SELECT madre FROM madri WHERE madre = Carla and anni > 30 -- risultato tab vuota SELECT madre FROM madri WHERE madre = Carla or anni > 30 -- risultato tupla riferita a Carla SELECT madre FROM madri WHERE anni >= ALL (select anni from madri);

Basi di dati SQL: accenno sulle Viste Prof.ssa Rosalba Giugno

Viste (View) Oltre alle tabelle di base che fanno parte dello schema si possono creare delle tabelle ausiliarie virtuali Sono virtuali in quanto sembrano tabelle a tutti gli effetti ma sono delle relazioni create al volo Utilizzate per vari scopi: Semplificazione Protezione dati Scomposizione query complesse Riorganizzazione dati secondo nuovi schemi Etc.

Definizione VIEW Sintassi creazione VIEW: CREATE VIEW NomeVista [ ( Attributo {,Attributo} ) ] AS Query-Select

Esempio definizione VIEW CREATE VIEW MediaVoti (Matricola,Media) AS SELECT Matricola, AVG(Voto) FROM Esami GROUP BY Matricola Uso della view: SELECT * FROM MediaVoti

Le VIEW possono essere usate come tabelle SELECT Nome, Media FROM Studenti, MediaVoti WHERE Studenti.Matricola = MediaVoti.Matricola

Uso delle VIEW per query complesse Semplificare query complesse Esempio: non possiamo scrivere SELECT AVG(COUNT(*)) FROM AGENTI GROUP BY ZONE AVG deve agire sui valori di un attributo.

Uso delle VIEW per query complesse CREATE VIEW AgPerZona (Zona,NumAg) AS SELECT Zona,COUNT(*) FROM AGENTI GROUP BY Zona SELECT AVG(NumAg) FROM AgPerZona

Uso delle VIEW per Sicurezza CREATE VIEW EsamiPubblici AS SELECT Corso,Voto FROM Esami Data la tabella ClientiBanca(Nome,Indirizzo,Saldo) CREATE VIEW ClientiInd AS SELECT Nome,Indirizzo FROM ClientiBanca