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,

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.
Algebra e calcolo relazionale (parte 2)
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
DML – Data Manipulation Language
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Diego Calvanese Domenico Lembo Laurea in Ingegneria Informatica - Università di Roma "La Sapienza" Corso di Basi di Dati - A.A. 2003/2004 Seconda Esercitazione.
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.
Istruzione SELECT (versione base)
Corso di Informatica (Basi di Dati)
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.
11/10/2001Atzeni-Ceri-Paraboschi-Torlone, Basi di dati, Capitolo 3 1 Viste (relazioni derivate) Rappresentazioni diverse per gli stessi dati (schema esterno)schema.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1999
SQL: Lezione 7 Nataliya Rassadko
SQL Per la modifica di basi di dati
SQL :Structured Query Language: SELECT (II)
Algoritmo di Query Optimization
Esercitazione.
Duplicati Lalgebra relazionale non ammette duplicati, SQL li ammette. Quindi select Città from Persona where Cognome= Rossi estrae una lista di città in.
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.
Creazione e manipolazione tabelle. TABELLE una tabella può essere creata in qualsiasi momento,anche quando gli utenti stanno usando il database la struttura.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, Capitolo 4:SQL 16/10/2002.
Basi di dati Claudia Raibulet
SQL: Structured Query Language
E. Giunchiglia Basi di dati 1 (trasparenze basate su Atzeni, Ceri, Paraboschi, Torlone: Basi di dati, Capitolo 4) SQL 05/10/2004.
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.
Realizzato da Roberto Savino
SQL.
Basi di dati - Modelli e linguaggi di interrogazione- Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone Copyright © The McGraw-Hill.
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.
Informatica Introduzione alle basi di dati Lezione 8 Scienze e tecniche psicologiche dello sviluppo e dell'educazione, laurea magistrale Anno accademico:
Microsoft Access (parte 5) Introduzione alle basi di dati Scienze e tecniche psicologiche dello sviluppo e dell'educazione, laurea magistrale Anno accademico:
1 Data warehousing con SQL Server SQL Server è un RDBMS (Relational DataBase Management System) Analysis Services è un componente di SQL Server che offre.
SEFOC – SETTORE FORMAZIONE CONTINUA DEL PERSONALE CORSO MYSQL AVANZATO ROBERTO PENNOLINO – CARMELO MASSIMO PRIOLO PALERMO – 07 | 06 | 2011.
Interrogazione di una base di dati relazionale
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).
1 Basi di Dati S tructured Q uery L anguage Appunti Matteo Longhi.
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.
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.
Approfondimenti SQL.
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.
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.
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Transcript della presentazione:

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, Paraboschi, Torlonee, Basi di dati McGraw-Hill, 2002)

Giugno-Pulvirenti AA Operatori aggregati Nelle espressioni della target list possiamo avere anche espressioni che calcolano valori a partire da insiemi di ennuple SQL-2 prevede 5 possibili operatori di aggregamento: –conteggio, minimo, massimo, media, somma Gli operatori di aggregamento NON sono rappresentabili in Algebra Relazionale

Giugno-Pulvirenti AA Cosa sono? Operano su insiemi di righe per dare un risultato per gruppo. IMPIEGATI “SalarioMassimo” DEPTNO SAL MAX(SAL)

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

Giugno-Pulvirenti AA Raggruppare piu’ di una colonna IMPIEGATI “sommare I salari in IMPIEGATI per ongi lavoro, Ragruppati per dipartimeno” DEPTNO JOB SAL MANAGER PRESIDENT CLERK CLERK CLERK ANALYST MANAGER SALESMAN MANAGER SALESMAN CLERK SALESMAN SALESMAN 1250 JOB SUM(SAL) CLERK 1300 MANAGER 2450 PRESIDENT 5000 ANALYST 6000 CLERK 1900 MANAGER 2975 CLERK 950 MANAGER 2850 SALESMAN 5600 DEPTNO

Giugno-Pulvirenti AA Uso di GROUP BY su colonne multiple SQL> SELECT deptno, job, sum(sal) 2 FROM emp 3 GROUP BY deptno, job; DEPTNO JOB SUM(SAL) CLERK MANAGER PRESIDENT ANALYST CLERK rows selected.

Giugno-Pulvirenti AA Esempio GROUP BY Per ogni dipartimento, restituire la somma degli stipendi di tutti gli impiegati (di quel dipartimento) Relazione: Employee(Name,Dept,Office,Salary,City)

Giugno-Pulvirenti AA Semantica degli operatori di raggruppamento (1) La query e’ innanzitutto eseguita senza operatori aggregati e senza GROUP BY:

Giugno-Pulvirenti AA Semantica degli operatori di raggruppamento (2) Quindi il risultato e’ diviso in sottoinsiemi aventi gli stessi valori per gli attributi indicati nel GROUP BY (Dept nel nostro caso) Quindi l’operatore di aggregamento e’ calcolato su ogni sottoinsieme:

Giugno-Pulvirenti AA –Non puo’ essere usata la WHERE per restringere i gruppi. –Deve essere usata la HAVING. SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 WHERE AVG(sal) > GROUP BY deptno; SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 WHERE AVG(sal) > GROUP BY deptno; WHERE AVG(sal) > 2000 * ERROR at line 3: WHERE AVG(sal) > 2000 * ERROR at line 3: Query illegali con funzioni di raggrup.

Giugno-Pulvirenti AA Esempio Creare una query che restiuisca: nome, matricola, voto minimo,voto massimo, voto medio per gli studenti che hanno dato più di 8 materie

Giugno-Pulvirenti AA Esempio SELECT Nome, Matricola MIN(Voto), MAX(Voto),AVG(Voto) FROM Esami, Studenti WHERE Esami.Matricola = Studenti.Matricola GROUP BY Nome,Matricola HAVING COUNT(*) > 8

Giugno-Pulvirenti AA Limitare le righe selezionate –Limitare le righe tramite l’uso della clausola WHERE. –La clausola WHERE segue la clausola FROM. SELECT[DISTINCT] {*| colonna [alias],...} FROM tabella [WHEREcondizione(i)];

Giugno-Pulvirenti AA Interrogazioni nidificate Condizione : := Predicato | “(“Condizione”)” | NOT Condizione | Condizione (AND | OR) Condizione Predicato –Espr op (Espr | “(“ Sottoselect “)” ) –op  {=, <>, >, >=, <, <=} –SottoSelect deve dare come risultato una tabella con un solo elemento o vuota (vedremo alcuni esempi) SELECT[DISTINCT] {*| colonna [alias],...} FROM tabella [WHEREcondizione(i)];

Giugno-Pulvirenti AA Interrogazioni nidificate le condizioni in SQL permettono anche il confronto fra un attributo e il risultato di una sottoquery –Syntax: Scalare Operatore (ANY | ALL) SelectQuery 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 EXISTS SelectQuery Il predicato e’ vero se la SelectQuery restituisce almeno una tupla

Giugno-Pulvirenti AA 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

Giugno-Pulvirenti AA 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”); la limitazione non è significativa

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

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

Giugno-Pulvirenti AA Negazione con le query nidificate Trovare quei dipartimenti dove non c’e’ nessuno che si chiama ‘Brown’: Oppure:

Giugno-Pulvirenti AA Operatori IN e NOT IN IN e’ sinonimo di: =ANY NOT IN e’ sinonimo di: <>ALL

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

Giugno-Pulvirenti AA Interrogazioni nidificate, commenti, 2 La prima versione di SQL prevedeva solo la forma nidificata (o strutturata), con una sola relazione in ogni clausola FROM. Il che è insoddisfacente: –la dichiaratività è limitata –non si possono includere nella target list attributi di relazioni nei blocchi interni

Giugno-Pulvirenti AA 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))

Giugno-Pulvirenti AA Interrogazioni nidificate, commenti, 3 regole di visibilità: –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

Giugno-Pulvirenti AA NomeEtà Persone Reddito Andrea27 Maria55 Anna50 Filippo26 Luigi50 Franco60 Olga30 Sergio85 Luisa75 Aldo Madre Maternità Figlio Luisa Anna Maria Luisa Maria Olga Filippo Andrea Aldo Luigi Padre Paternità Figlio Luigi Franco Sergio Olga Filippo Andrea Aldo Franco

Giugno-Pulvirenti AA Quantificazione esistenziale Ulteriore tipo di condizione –EXISTS ( Sottoespressione ) 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)

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

Giugno-Pulvirenti AA 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)

Giugno-Pulvirenti AA 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)

Giugno-Pulvirenti AA 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)

Giugno-Pulvirenti AA 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

Giugno-Pulvirenti AA Esempio: ancora il quantificatore Universale Agenti(CodiceAgente,Nome,Zona Supervisore,Commissione) Clienti(CodiceCliente,Nome,Citta’,Sconto) Ordini(CodiceOrdine,CodiceCliente,CodiceAge nte,Articolo,Data,Ammontare)

Giugno-Pulvirenti AA 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)

Giugno-Pulvirenti AA 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) )

Giugno-Pulvirenti AA City(id,city,country,district,population) Cities_Stores(city,store_type,address) Stores(store_type,description)

Giugno-Pulvirenti AA 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);

Giugno-Pulvirenti AA 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.

Giugno-Pulvirenti AA 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