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.

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)
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità C1 Il linguaggio SQL.
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
1 DATA BASE GESTIONE VENDITE. 2 QUERY1 Per ogni Cognome di Rappresentante e Descrizione di Prodotto calcolare la somma delle quantità vendute: Somma (Quantità)
1 Comandi per la manipolazione dei dati. 2 Tipi di comandi INSERT UPDATE DELETE COMANDI COMANDI 2.
Biglietti e Ritardi: schema E/R
Asserzioni, Viste & Triggers
DML – Data Manipulation Language
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Basi di Dati prof. A. Longheu
SQL.
SQL Dati i seguenti schemi relazionali:
SQL Structured Query Language
1 Corso di Laurea in Biotecnologie Informatica (Basi di Dati) SQL: Data Manipulation Language (DML) Anno Accademico 2009/2010 Da: Atzeni, Ceri, Paraboschi,
SQL per la modifica di basi di dati. 29/01/2014SQL per la modifica di basi di dati2 Data Manipulation Language Introduciamo ora il Data Manipulation Language.
Laboratorio di Basi di Dati Introduzione ad Access 2ª Parte.
Basi di dati Università Degli Studi Parthenope di Napoli
SQL: Lezione 7 Nataliya Rassadko
SQL Per la definizione di basi di dati SQL per definire ed amministrare Ogni utente puo definire una base di dati di cui diventa lamministratore potendo.
Duplicati Lalgebra relazionale non ammette duplicati, SQL li ammette. Quindi select Città from Persona where Cognome= Rossi estrae una lista di città in.
Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione.
Manipolazione dei dati I comandi SQL che permettono di modificare il contenuto di una base di dati sono insertdeleteupdate insert ha la seguente sintassi:
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.
Manipolazione dei dati
L’algebra relazionale
Corso di Basi di Dati Il Linguaggio SQL
Basi di dati - Modelli e linguaggi di interrogazione- Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone Copyright © The McGraw-Hill.
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre Utenti e privilegi del database - 1 Root è lutente amministratore predefinito, ma.
DATABASE Introduzione
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.
Microsoft Access (parte 5) Introduzione alle basi di dati Scienze e tecniche psicologiche dello sviluppo e dell'educazione, laurea magistrale Anno accademico:
Microsoft Access Query (II), filtri.
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,
Pagine ASP parte 3 I data base Stefano Schacherl.
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)
Database Elaborato da: Claudio Ciavarella & Marco Salvati.
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.
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.
Corso integrato di Matematica, Informatica e Statistica Informatica di base Linea 1 Daniela Besozzi Dipartimento di Informatica e Comunicazione Università.
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.
Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso:
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.
Linguaggio SQL. Linguaggi per database La diffusione del modello relazionale ha favorito l’uso prevalente di linguaggi non procedurali: in questo modo.
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.
Transcript della presentazione:

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 dei dati contenuti nelle tabelle fisiche presenti nel database. Le tabelle fisiche sono gli unici veri contenitori di dati. Le viste non contengono dati fisicamente diversi dai dati presenti nelle tabelle, ma forniscono una diversa visione, dinamicamente aggiornata, di quegli stessi dati. La vista appare allutente come una normale tabella, in cui può effettuare interrogazioni e, limitatamente ai suoi privilegi, anche modifiche dei dati.

19/01/2014 Viste Per la stessa natura delle viste, i dati che vengono modificati su ciascuna delle tabelle fisiche utilizzate nella definizione della vista comporterà una modifica del contenuto della vista. Equivalentemente, se i dati vengono modificati in una vista risulteranno modificati anche nella tabella che contiene fisicamente il dato. Per questo motivo si può limitare il privilegio di modificare le viste ad alcuni utenti. Un modo per limitare laccessibilità ai dati da parte di alcuni utenti è quello di fare lavorare tali utenti su viste ad accesso limitato

19/01/2014 Viste, Vantaggi Le viste semplificano la rappresentazione dei dati. Oltre ad assegnare un nome alla vista, la sintassi dellistruzione CREATE VIEW consente di cambiare i nomi delle colonne Le viste possono essere anche estremamente convenienti per svolgere una serie di query molto complesse Le viste consentono di proteggere i database: le view ad accesso limitato possono essere utilizzate per controllare le informazioni alle quali accede un utente del database Le viste consentono inoltre di convertire le unità di misura e creare nuovi formati

19/01/2014 Viste, Limitazioni non è possibile utilizzare loperatore UNION; non è possibile utilizzare la clausola ORDER BY; non è possibile utilizzare listruzione DELETE su viste di tabelle multiple; non è possibile utilizzare listruzione INSERT tranne quando tutte le colonne NOT NULL della tabella sottostante sono incluse nella vista; Se vengono inseriti o aggiornati dei record attraverso una vista basata sulla combinazione di più tabelle, tutti i record da aggiornare devono appartenere alla stessa tabella fisica; Se si utilizza la clausola DISTINCT per creare una vista, non è possibile inserire o aggiornare dei record nella vista; Non è possibile aggiornare una colonna virtuale (una colonna che è il risultato di una espressione o di una frazione)

19/01/2014 Viste, sintassi Il comando DDL che consente di definire una vista ha la seguente sintassi CREATE VIEW NomeVista [ ( ListaAttributi ) ] AS SelectSQL [ with [ local | cascaded ] check option ] I nomi delle colonne indicati nella lista attributi sono i nomi assegnati alle colonne della vista, che corrispondono ordinatamente alle colonne elencate nella select. Se questi non sono specificati, le colonne della vista assumono gli stessi nomi di quelli della/e tabella/e a cui si riferisce.

19/01/2014 Create View, Esempio Create view ImpiegatiAmmin (Matricola, Nome, Cognome, Stipendio) AS Select Matr, Nome, Cognome, Stip From Impiegato Where Dipart = 'Amministrazione' and Stipendio > 1000 Creare una vista contenente la matricola, il nome, il cognome e lo stipendio degli impiegati del dipartimento di Amministrazione il cui stipendio è maggiore di 1000 euro

19/01/2014 Create View, Esempio Creare una vista che contiene la targa e la cilindrata delle macchine con cilindrata <1500 Create view PiccolaCilindrata (PC_Targa, PC_cilindrata) As Select targa, cilindrata From Veicoli Where cilindrata<1500 La vista ottenuta è composta da due colonne denominate PC_targa e PC_cilindrata corrispondenti a Targa e Cilindrata di Veicoli e alle righe della stessa tabella in cui la cilindrata è minore di 1500

19/01/2014 With check option Lopzione With Check Option messa alla fine della definizione della vista assicura che le operazioni di inserimento e di modifica dei dati effettuate utilizzando la vista soddisfino la clausola Where della subquery. Esempio: creare una vista degli impiegati del settore Amministrazione che guadagnano meno di 1000 euro. create view ImpiegatiAmminPoveri as select * from ImpiegatiAmmin where Stipendio < 1000 with check option

19/01/2014 Local, Cascaded Le opzioni Local e Cascaded sono alternative. Se la specifica è omessa il valore di default è Cascaded. Una vista V1 può essere infatti definita in dipendenza di una vista V2. Se è specificata lopzione Cascaded nella vista V2, non è permesso modificare dati nella vista V1 che violano le condizioni di V2. Lopzione Local specifica che il controllo deve avvenire solo sulla tabella locale. Se una modifica viene fatta in V1, non viene fatto nessun controllo su V2 Su Oracle non è possibile scegliere fra le due opzioni. Lunica permessa (default) è Cascated

19/01/2014 Modifica di una vista Sebbene il contenuto di una vista sia dinamico, la sua struttura non lo è. Se una vista è definita su una subquery Select * From T1 E in seguito alla tabella T1 viene aggiunta una colonna, questa nuova definizione non si estende alla vista. Ossia la vista conterrà sempre le stesse colonne che aveva prima dellinserimento della nuova colonna in T1.

19/01/2014 Vista basata su due tabelle Create view A2 as Select targa, Cod_Modello, Nome_Categoria From Veicoli, Categorie Where Categorie.cod_cat=Veicoli.Cod_cat Creare una vista che descrive la targa, il codice del modello e il nome della categoria dei veicoli. Si noti che manca la specifica dei nomi delle colonne della vista. In tal caso vengono acquisiti i nomi delle colonne della tabella madre. Cod_catNome_cat Veicoli TargaCod_modCategoriaCilindrataCod_comb.cav.FiscVelocitaPostiImm Categorie

19/01/2014 Viste di gruppo Una vista di gruppo è una vista in cui una delle colonne è una funzione di gruppo. In questo caso è obbligatorio assegnare un nome alla colonna della vista corrispondente alla funzione di gruppo

19/01/2014 Vista di Gruppo, Esempio Cod_ModNome_ModCod_FabCilind_Media Modelli Creare una vista che per ciascuna fabbrica riporti il numero globale delle versioni dei modelli prodotti Create view A3 (cod_Fabbrica, num_versioni) AS Select cod_Fabbrica, sum(numero_versioni) From Modelli Group by Cod_Fabbrica

19/01/2014 Viste di gruppo E una vista di gruppo anche una vista che è definita in base ad una vista di gruppo Esempio: Create view A4 AS Select num_versioni From A3

19/01/2014 Eliminazione delle viste Le viste si eliminano col comando Drop View. Sintassi: Drop View nome_view {Restrict/Cascade} Le opzioni Restrict/Cascade sono alternative ed è obbligatorio specificare una o laltra. Restrict: la vista viene eliminata solo se non è riferita nella definizione di altri oggetti Cascade: oltre che essere eliminata la vista, vengono eliminate tutte le dipendenza da tale vista di altre definizioni dello schema Su Oracle lunica opzione possibile è restrict, che non deve essere specificata poiché è il default.

19/01/2014 Esempio Create view A3 (cod_Fabbrica, num_versioni) AS Select cod_Fabbrica, sum(numero_versioni) From Modelli Group by Cod_Fabbrica Create view A4 AS Select num_versioni From A3 Listruzione Drop View A3 Cascade elimina oltre che la vista A3, anche la vista A4 che dipende da essa. Invece Drop View A3 Restrict impedisce la cancellazione di A3, finchè è presente A4, che dipende da essa

19/01/2014 Esercizio Creare una vista che mostri i codici dellordine e del negozio per gli ordini effettuati dopo il 31/01/2004. Create view Dopo31Gen (Ordine, Negozio) AS Select ord_cod, neg_cod From Ordini Where ord_data> to_date (31-GEN-2004)

19/01/2014 Esercizio Creare una vista che calcoli i codici dei componenti utilizzati nella composizione dellarticolo L100 Create view compL100 (codici_compL100) AS Select com_cod From compart Where art_cod=L100

19/01/2014 Esercizio Creare una vista che mostri le descrizioni dei componenti utilizzati nella composizione dellarticolo L100 Create view descompL100 (descrizione) As Select com_descrizione From Componenti join CompL100 ON (codici_compL100=com_cod)

19/01/2014 Esercizio Creare una vista che mostri le descrizioni dei componenti utilizzati nella composizione degli articoli della categoria L10 Create view compL10(componente) As Select com_descrizione From Componenti Join compart Using(com_cod) join Articoli Using (Art_cod) Where cat_cod=L10 Create view compL10(componente) As Select com_descrizione From Componenti Where com_cod in (Select com_cod From compart Where art_cod in (Select art_cod From Articoli Where cat_cod=L10)

19/01/2014 Esercizio Creare una vista che mostri la massima quantità richiesta in un ordine per ciascun articolo ordinato Create view massimordine(Articolo, Massimaquantità) AS Select art_cod, max(ordart_qta) From Ordart Group by art_cod

19/01/2014 Esercizio Eliminare la vista creata allesercizio precedente Drop view massimordine Restirict

19/01/2014 Selezione dei dati tramite viste di gruppo In generale si può utilizzare una vista ovunque possa essere indicata una tabella, con le seguenti eccezioni: Una clausola from che contenga una vista di gruppo non può contenere riferimenti ad altre tabelle; Un comando di selezione che utilizza una clausola From che contenga una vista di gruppo, non può utilizzare clausole Where, Group by, Having In alcuni DBMS non ci sono queste restrizioni, nel senso che il DBMS corregge listruzione

19/01/2014 Esercizio Utilizzare la vista creata da Create view Dopo31Gen (Ordine, Negozio) AS Select ord_cod, neg_cod From Ordini Where ord_data> in un esercizio precedente per far vedere solo il codice del negozio Select Negozio From Dopo31Gen

19/01/2014 Esercizio Utilizzare la vista dellesercizio 1 Create view Dopo31Gen (Ordine, Negozio) AS Select ord_cod, neg_cod From Ordini Where ord_data> to_date 31-GEN-2004 per far vedere solo i codici degli ordini partiti da negozi di Trento Select Ordine, Neg_nome From Dopo31Gen, Negozi Where Negozio=neg_cod and Neg_citta=Trento

19/01/2014 Esercizio Trovare per ciascuno dei componenti utilizzati nella composizione dellarticolo L100, il laboratorio in cui tale componente è prodotto. Select Lab_cod From Componenti, CompL100 Where com_cod=codici_compL100

19/01/2014 Viste Aggiornabili Una vista si dice aggiornabile se mediante questa è possibile laggiornamento dei dati del database, ossia il loro inserimento, cancellazione e modifica. Una vista è aggiornabile se: 1.Non utilizza la specifica DISTINCT 2.Nella clausola FROM è presente una sola tabella, o una sola vista, che sia a sua volta aggiornabile 3.Nella lista di selezione non sono presenti altri elementi che riferimenti puri (ossia non espressioni) alla tabella o alla vista della clausola FROM 4.Nella clausola WHERE non è presente una subquery 5.Non è presente nè la clausola Group by, nè la clausola Having

19/01/2014 Esempio Create view A1 (A1_Targa, A1_cilindrata) As Select targa, cilindrata From Veicoli Where cilindrata<1500 La seguente vista è aggiornabile Questaltra invece non lo è Create view A2 as Select targa, Cod_Modello, Nome_Categoria From Veicoli, Categorie Where Categorie.cod_cat=Veicoli.Cod_cat Due tabelle

19/01/2014 Vantaggi delle viste: facilitazione nellaccesso ai dati In generale uno dei requisiti per la progettazione di un database relazionale è la normalizzazione dei dati. Sebbene la forma normalizzata del database permette una corretta modellazione della realtà che il DB rappresenta, a volte dal punto di vista dellutente comporta una maggiore difficoltà di comprensione rispetto a una rappresentazione non normalizzata. Le viste permettono di fornire allutente i dati in una forma più intuitiva.

19/01/2014 Vantaggi delle viste: diverse visioni dei dati Esistono dei dati che sono presenti nelle tabelle del database, che sono poco significativi per lutente (esempio, il codice di un prodotto), e altri che devono essere nascosti allutente (esempio: lo stipendio di un dipendente, la password di un account etc.). Luso delle viste da parte dellutente permette di limitare il suo accesso ai dati del database, eliminando quelli non interessanti per lui e quelli che devono essere tenuti nascosti. Luso delle viste può essere considerato come una tecnica per assicurare la sicurezza dei dati

19/01/2014 Vantaggi delle Viste: Indipendenza Logica Un vantaggio delle viste è lindipendenza logica delle applicazioni e delle operazioni eseguite dagli utenti rispetto alla struttura logica dei dati. Ciò significa che è possibile poter operare modifiche allo schema senza dover apportare modifiche alle applicazioni che utilizzano il database.

19/01/2014 Esempio Veicoli TargaCod_modCategoriaCilindrataCod_comb.cav.FiscVelocitaPostiImm Supponiamo che a un certo punto vogliamo suddividere la tabella Veicoli in due sottotabelle, Veicoli1 e Veicoli2, Il primo contenente Targa, Codice modello e codice categoria, e il secondo contenente targa, cilindrata, codice combustibile, cavalli fiscali, velocita, posti e immatricolazione

19/01/2014 Esempio, creazione sottotabelle Veicoli TargaCod_modCategoriaCilindrataCod_comb.cav.FiscVelocitaPostiImm Create table Veicoli1 (Targa char(10) Cod_Modello Char(3) Categoria char(2)) Create table Veicoli2 (Targa char(10), Cilindrata number(4), Cod_comb char(2), Cav.Fisc number(3), Velocita Number(6), Posti number(2), Imm date) TargaCod_modCategoria TargaCilindrataCod_comb.cav.FiscVelocitaPostiImm Veicoli1 Veicoli2

19/01/2014 Esempio, inserimento dati Veicoli TargaCod_modCategoriaCilindrataCod_comb.cav.FiscVelocitaPostiImm Insert into Veicoli1 (Targa, Cod_mod, Categoria) Select Targa, Cod_mod, Categoria From Veicoli Insert into Veicoli2 (Targa, Cilindrata, Cod_comb,Cav_Fisc, Velocita,Posti, Imm) Select Targa, Cilindrata, Cod_comb, Cav_fisc, Velocita, Posti, Imm From Veicoli Drop Table Veicoli TargaCod_modCategoria TargaCilindrataCod_comb.cav.FiscVelocitaPostiImm Veicoli1 Veicoli2

19/01/2014 Esempio, creazione vista TargaCod_modCategoria TargaCilindrataCod_comb.cav.FiscVelocitaPostiImm Veicoli1 Veicoli2 Create view Veicoli (Targa, cod_Mod, Cod_Categoria, Cilindrata, Cod_comb, Cav.Fisc, Velocita, Posti, Imm) AS Select Veicoli1.targa, cod_mod, Categoria, cod_comb, cav.Fisc, velocita, posti,Imm FROM Veicoli1, Veicoli2 WHERE Veicoli1.Targa=Veicoli2.Targa Veicoli TargaCod_modCategoriaCilindrataCod_comb.cav.FiscVelocitaPostiImm

19/01/2014 Esempio, conclusioni A questo punto lapplicazione che faceva uso della tabella Veicoli, farà uso (inconsapevolmente) della Vista Veicoli, che, anche se non è fisicamente una tabella, ne ha tutte le caratteristiche informative.

19/01/2014 Uninterrogazione non standard Il dipartimento che impiega il massimo budget in stipendi dei dipendenti Select Dipart from Impiegato group by Dipart having sum(Stipendio) >= all (select sum(Stipendio) from Impiegato group by Dipart) E sbagliata perché la nidificazione nella having non è ammessa

19/01/2014 Soluzione con le viste CREATE VIEW BudgetStipendi(Dipartimento,TotaleStipendi) AS SELECT Dipart, sum(Stipendio) FROM Impiegato GROUP BY Dipart SELECT Dipartimento FROM BudgetStipendi WHERE TotaleStipendi =(SELECT max(TotaleStipendi) FROM BudgetStipendi)

19/01/2014 Ancora sulle viste Interrogazione scorretta select avg(count(distinct Ufficio)) from Impiegato group by Dipart Con una vista create view UfficiDipart (NomeDip,NroUffici) as select Dipart, count(distinct Ufficio) from Impiegato group by Dipart select avg(NroUffici) from UfficiDipart Due operatori aggregati annidati Calcolare la media degli uffici distinti presenti in ogni dipartimento