Manipolazione dei dati I comandi SQL che permettono di modificare il contenuto di una base di dati sono insertdeleteupdate insert ha la seguente sintassi:

Slides:



Advertisements
Presentazioni simili
Interrogazioni Semplici Le operazioni di interrogazione vengono specificate per mezzo dellistruzione select select ListaAttributi from ListaTabelle [where.
Advertisements

Calcolo Relazionale.
Stored Procedure Function Trigger
Procedure e funzioni A. Ferrari.
© 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 Comandi per la manipolazione dei dati. 2 Tipi di comandi INSERT UPDATE DELETE COMANDI COMANDI 2.
Biglietti e Ritardi: schema E/R
1 Biglietti: schema E/R. 2 Biglietti: albero degli attributi.
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
1 SQL come linguaggio di definizione di dati Eugenio Di Sciascio.
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
SQL.
SQL Structured Query Language
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.
Elementi di PL/SQL.
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,
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.
Basi di dati. Vantaggi degli archivi digitali Risparmio di spazio: sono facilmente trasferibili e duplicabili Risparmio di tempo: si può accedere ai dati.
SQL: Lezione 7 Nataliya Rassadko
SQL Per la modifica di basi di dati
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.
Modello Relazionale Definisce tipi attraverso il costruttore relazione, che organizza i dati secondo record a struttura fissa, rappresentabili attraverso.
Modello Relazionale Definisce tipi attraverso il costruttore relazione, che organizza i dati secondo record a struttura fissa, rappresentabili attraverso.
Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione.
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.
Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione.
Daniel Stoilov Tesi di Laurea
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.
Basi di dati Claudia Raibulet
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL IDENTIFICATORI di tabelle e attributi: stringhe di lunghezza max 18 caratteri, composte da.
Basi di Dati e Sistemi Informativi SQL per Applicazioni Home page del corso:
1 Il Linguaggio SQL Il Linguaggio SQL Prof. Lorenzo Vita, Ing. Luigi Testa.
Basi di Dati e Sistemi Informativi Il Linguaggio SQL Home page del corso:
SQL.
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre Utenti e privilegi del database - 1 Root è lutente amministratore predefinito, ma.
Dati e DBMS DBMS relazionali SQL Progettazione di una base di dati Programma del Corso.
Informatica II – Basi di Dati (07/08) – Parte 2 Gianluca Torta Dipartimento di Informatica dell’Università di Torino
Microsoft Access (parte 5) Introduzione alle basi di dati Scienze e tecniche psicologiche dello sviluppo e dell'educazione, laurea magistrale Anno accademico:
SQL (IV) Data Definition Language/ Data Manipulation Language.
Pagine ASP parte 3 I data base Stefano Schacherl.
Microsoft Access Maschere (II).
Progettazione Logica Il prodotto della progettazione logica è uno schema logico che rappresenta le informazioni contenute nello schema E-R in modo corretto.
PLSQL 1.1 LA REALIZZAZIONE DI APPLICAZIONI Quattro parti: Gestione dati Business rules Logica applicativa Interfaccia utente Molte possibili architetture.
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?
Microsoft Access Query (III).
Interazione col DB Per interagire con una base dati da una pagina PHP occorre procedere come segue: Eseguire la connessione al DBMS MySQL in ascolto;
1 Basi di Dati S tructured Q uery L anguage Appunti Matteo Longhi.
SQL (III) Data Definition Language/ Data Manipulation Language.
MySQL Database Management System
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.
Query languages per Basi di Dati Relazionali  Algebra Relazionale:  basato sulla teoria degli insiemi  procedurale  usato per l’implementazione di.
Elementi di PL/SQL. Pl/Sql Il PL/SQL (Procedural Language/Structured Query Language) è un linguaggio di programmazione procedurale di Oracle che costituisce.
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 =
Approfondimenti SQL.
Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso:
Linguaggi per basi di dati Linguaggi di definizione dei dati Utilizzati per definire gli schemi e le autorizzazioni per l’accesso Linguaggi di manipolazione.
Linguaggio SQL prima parte Linguaggio SQL prima parte A. Lorenzi, E. Cavalli INFORMATICA PER SISTEMI INFORMATIVI AZIENDALI Copyright © Istituto Italiano.
Access Breve introduzione. Componenti E’ possibile utilizzare Access per gestire tutte le informazioni in un unico file. In un file di database di Access.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Basi di Dati attive. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Definizione Una base di dati si dice attiva quando dispone.
Linguaggio SQL. Linguaggi per database La diffusione del modello relazionale ha favorito l’uso prevalente di linguaggi non procedurali: in questo modo.
SQLite. Introduzione a SQLite Oltre alla possibilità di memorizzare informazioni persistenti attraverso Preferences e files, Android mette a disposizione.
Transcript della presentazione:

Manipolazione dei dati I comandi SQL che permettono di modificare il contenuto di una base di dati sono insertdeleteupdate insert ha la seguente sintassi: insert into NomeTabella [ListaAttributi] Nel primo caso si inserisce una singola riga allinterno della tabella. Nel secondo si possono aggiungere degli insiemi di righe, estratti dal contenuto della base di dati.

Inserimento insert into Dipartimento(NomeDip, Città) values(Produzione,Torino) Si utilizza in genere mediante una maschera (form) per consentire agli utenti di inserire dati. Lordinamento degli attributi (se presente) e dei valori è significativo e le due liste devono avere lo stesso numero di elementi insert into ProdottiMilanesi (select codice, descrizione from Prodotto where LuogoProd = Milano) Se in un inserimento non vengono inseriti tutti i dati di una riga si usa o il default (se esiste) o il valore nullo. La corrispondenza fra valori inseriti e attributi è per posizione.

INSERT INTO Persone VALUES ('Mario',25,52) INSERT INTO Persone(Nome, Eta, Reddito) VALUES('Pino',25,52) INSERT INTO Persone(Nome, Reddito) VALUES('Lino',55) INSERT INTO Persone ( Nome ) SELECT Padre FROM Paternita WHERE Padre NOT IN (SELECT Nome FROM Persone)

Cancellazione delete from NomeTabella [ where Condizione ] se where non è specificato tutte le righe della tabella vengono eliminate. Se esiste un vincolo di integrità referenziale con politica di cascade … ATTENZIONE!!!! Siccome delete ha la stessa sintassi di select, è possibile utilizzare interrogazioni nidificate al suo interno. delete from Dipartimento where Nome not in (select Dipart from Impiegato) delete from Dipartimento distrugge il contenuto della tabella drop table Dipartimento cascade altera lo schema

Modifica update NomeTabella set Attributo = {, Attributo = } [ where Condizione ] aggiorna uno o più attributi delle righe di NomeTabella che soddisfano leventuale Condizione. Se non cè condizione la modifica avviene per tutte le righe. Il nuovo valore può essere: il risultato di unespressione valutata sugli attributi della tabella il risultato di una generica interrogazione SQL il valore nullo il valore di default

Modifica update Dipendente set Stipendio = StipendioBase + 5 where Matricola = XYZ aggiorna una sola riga (Matricola è chiave) update Dipendente set Stipendio = Stipendio * 1.1 where Dipart = Amministrazione aggiorna un insieme di righe Nella valutazione delle espressioni bisogna ricordarsi che SQL ha una natura orientata agli insiemi e non alle tuple. Quindi non è possibile pensare allesecuzione di un comando come esecuzione riga per riga, ma come unoperazione effettuata contemporaneamente su tutto un insieme.

Modifica Attenzione! Vogliamo aumentare del 10% gli stipendi degli impiegati con stipendio inferiore ai 30 milioni e del 15% quello degli impiegati con stipendio superiore ai 30 milioni. Se scriviamo update Impiegato set Stipendio = Stipendio*1.1 where Stipendio <= 30 update Impiegato set Stipendio = Stipendio*1.15 where Stipendio > 30 ad alcuni impiegati lo stipendio viene aumentato 2 volte!!! Se invertiamo lordine la procedura risulta corretta. Ma non sempre è così facile……...

Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione check (Condizione) La condizione specificata deve essere verificata da tutte le tuple in ogni momento. E possibile con check definire tutti i vincoli predefiniti. Però è meno leggibile e non si possono applicare le politiche di reazione alle violazioni. Tuttavia è molto potente

Check, esempio create table Impiegato ( Matricola character(6), Cognome character(20), Nome character(20), Sesso character not null check (sesso in (M,F)) Stipendio integer, Superiore character(6), check(Stipendio <= (select Stipendio from Impiegato J where Superiore = J.Matricola) )

Asserzioni Le asserzioni sono vincoli che fanno parte dello schema e non sono associati ad alcun attributo o tabella. Permettono di definire tutti i vincoli utilizzabili nella definizione di una tabella, ma anche vincoli su più tabelle o vincoli che richiedono che una tabella abbia certe caratteristiche (es. una certa cardinalità). create assertion NomeAsserzione check (Condizione) Es. create assertion AlmenoUnImpiegato check (1 <= (select count(*) from Impiegato))

Asserzioni Ogni vincolo di integrità è associato ad una politica di controllo che specifica se è immediato o differito. Se è immediato è verificato immediatamente dopo una modifica. Se è differito solo al termine dellesecuzione di una serie di operazioni (transazione). Se un vincolo immediato viene violato, loperazione di modifica può essere annullata immediatamente (rollback parziale). Tutti i vincoli predefiniti sono immediati. Se invece è differito al momento in cui si verifica la violazione non è più possibile identificare loperazione che lha causata e quindi va annullata tutta la transazione (rollback). Questo garantisce la consistenza della base di dati. Per cambiare il tipo di controllo: set constraints [ NomeVincolo ] immediate set constraints [ NomeVincolo ] deferred

Viste Le viste sono tabelle virtuali ricavate da informazioni contenute in altre tabelle. Nella definizione possono essere contenute anche altre viste purché non vi siano dipendenze ricorsive o immediate (una vista non può dipendere da se stessa), né transitive. create view NomeVista [( ListaAttributi )] as SelectSQL [ with [ local | cascaded] check option ] La query SQL deve restituire un numero di attributi pari a quelli contenuti nello schema; lordine degli attributi nella target list deve rispettare quello dello schema

Viste Es. create view ImpiegatiAmmin(Matricola,Nome,Cognome,Stipendio) as select Matricola, Nome, Cognome, Stipendio from Impiegato where Dipart = Amministrazione and Stipendio > 10 Su certe viste è possibile fare modifiche che alterano le tabelle che le compongono. Ci sono problemi se la vista è definita tramite un join. SQL permette la modifica di una vista solo se una sola riga di ciascuna tabella di base corrisponde a una riga della vista. Di solito si richiede che sia definita su una sola tabella e/o che contenga almeno una chiave primaria.

Viste check option richiede che si facciano modifiche solo sulle righe della vista e che le righe continuino ad appartenere alla vista dopo le modifiche. Se una vista è definita in termini di altre viste lopzione local o cascaded specifica se il controllo debba coinvolgere solo la vista più esterna o se deve essere propagato a tutti i livelli. Il default è cascaded. Quindi se è specificata la check option ogni comando di aggiornamento per essere propagato non deve eliminare righe dalla vista.

Viste Le viste consentono anche di sostituire interrogazioni nidificate o di creare interrogazioni altrimenti impossibili da definire. Es. create view BudgetStipendi(Dip,TotaleStipendi) as select Dipart, sum(Stipendio) from Impiegato group by Dipart Trovare il dipartimento che spende di più in stipendi select Dip from BudgetStipendi whereTotStipendi=(select max(TotaleStipendi) from BudgetStipendi)

Controllo degli accessi SQL prevede la definizione di utenti, per assegnare diversi privilegi. Gli utenti possono essere gli stessi del sistema su cui è attivo il server SQL, oppure indipendenti dal sistema. Ogni componente del sistema è proteggibile, di solito si proteggono le tabelle. Il controllo degli accessi è basato sul concetto di privilegio, caratterizzato da: risorsa cui si riferisce utente che concede il privilegio utente che lo riceve azione che viene permessa possibilità di trasmettere o meno il privilegio ad altri utenti

Controllo degli accessi Il creatore di una risorsa ha tutti i privilegi, al momento della sua creazione. Esiste anche un utente speciale _system, che ha tutti i privilegi su tutte le risorse in qualsiasi momento. I privilegi sono: insert, (applicabile a tabelle o viste) inserisce un nuovo oggetto nella risorsa update (tabelle viste attributi) aggiorna il valore di un oggetto delete (tabelle e viste) rimuove un oggetto select (tabelle viste attributi) permette di leggere la risorsa references (tabelle ed attributi) permette che venga fatto riferimento ad una risorsa nellambito della definizione dello schema di una tabella. usage (domini) permette che venga usata la risorsa

Controllo degli accessi drop e alter sono riservati al creatore degli oggetti cui si applicano I comandi per concedere o revocare privilegi sono grant e revoke grant Privilegi on Risorsa to Utenti [ with grant option ] concede i Privilegi sulla Risorsa agli Utenti

Controllo degli accessi Es. grant select on Dipartimento to Stefano concede allutente Stefano il privilegio di select sulla tabella Dipartimento. Se si specifica anche with grant option lutente può propagare i diritti anche ad altri. La parola chiave all privileges specifica tutti i possibili privilegi. revoke Privilegi on Risorsa from Utenti [ restrict|cascade ] fa loperazione inversa. Con restrict si impedisce che la revoca provochi altre revoche, con cascade si concede.

SQL e linguaggi di programmazione Linterazione con lambiente SQL può avvenire in 3 modi: in modo interattivo col server attraverso interfacce o linguaggi ad hoc legati a particolari DBMS attraverso i normali linguaggi di programmazione In questultimo caso è necessario che un preprocessore si occupi di riconoscere in un sorgente il codice SQL e lo trasformi in codice del linguaggio che si sta usando.

SQL e linguaggi di programmazione Uno dei problemi che sorgono è il fatto che SQL sia orientato agli insiemi mentre i linguaggi di programmazione, ad eccezione di alcuni linguaggi ad oggetti, possono essere soltanto orientati alle tuple. Le tuple dovranno quindi essere scandite una per una per eseguire un comando SQL. Si può ovviare a questo o con linguaggi ad oggetti che supportino operazioni evolute sugli insiemi o mediante i cursori.

Cursori I cursori estendono SQL in modo tale da fornire la possibilità ad un programma di accedere alle tabelle una riga alla volta. Hanno un comportamento simile ai puntatori a file. declare NomeCursore [ scroll ] cursor for SelectSQL [ for < read only | update [ of Attributo {, Attributo }] > ] associa un cursore ad una interrogazione. scroll indica se il programma può spostarsi liberamente nellinterrogazione for [read only | update] specifica se il cursore deve essere usato in un comando di modifica o in sola lettura.

Cursori open NomeCursore attiva linterrogazione cui è collegato il cursore e permette di accedere al risultato tramite il comando fetch [ Posizione from ] NomeCursore into ListadiFetch che prende una riga dal cursore e la ripone nelle variabili della ListadiFetch. La corrispondenza fra attributi e variabili è per posizione. Quando si parla di riga corrente si intende lultima riga letta.

Cursori Posizione può assumere i valori: next (il cursore legge la riga successiva alla corrente) prior (la precedente) first (la prima) last (lultima) absolute EsprIntera (la i-esima, i è il risultato dellespressione) relative EsprIntera (la i-esima rispetto alla corrente)

Cursori Le opzioni di posizione viste possono essere usate solo se è stata specificata lopzione scroll. Altrimenti solo next. In quel caso limplementazione è più efficiente. update e delete possono usare i cursori. update NomeTabella set Attributo = {, Attributo = } where current of NomeCursore

Cursori delete from NomeTabella where current of NomeCursore close NomeCursore chiude il cursore e libera la memoria dalla copia del risultato della query cui è collegato. Se la query restituisce solo una riga si può evitare il cursore e usare select ListaAttributi into ListaVariabili

SQL dinamico In molti casi è necessario formulare interrogazioni arbitrarie, non solo parametrizzabili, ma anche dipendenti ad esempio dallo stato dellesecuzione di un programma. Le interrogazioni che si possono formulare attraverso le istruzioni viste sinora sono di tipo statico, cioè scritte una volta per tutte. SQL dinamico consente di costruire interrogazioni al momento dellesecuzione di un programma. In SQL statico, i comandi vengono compilati una volta per tutte. Questo si traduce in elevata efficienza. In SQL dinamico, per ottimizzare lefficienza di un programma e mantenerla equivalente a quella di SQL statico, sono previste due modalità di esecuzione.

SQL dinamico execute immediate IstruzioneSQL Questo comando provoca lesecuzione immediata dellistruzione e può quindi essere usato solo per comandi che non richiedono parametri in ingresso o in uscita. Es. istruzioneSQL= delete from Dipartimento where Nome = Amministrazione ; $ execute immediate :istruzioneSQL Se il comando viene eseguito più volte o se il programma deve gestire uno scambio di parametri bisogna distinguere 2 fasi: preparazione ed esecuzione.

SQL dinamico Fase di preparazione prepare NomeComando from IstruzioneSQL fa analizzare listruzione e la fa tradurre nel linguaggio procedurale del sistema. Gli eventuali parametri sono sostituiti da ? In pratica, definisce una funzione che sarà possibile chiamare dal linguaggio ad alto livello. prepare :comando from select Città from Dipartimento where Nome = ? Quando non serve più listruzione è possibile deallocare la memoria deallocate prepare NomeComando deallocate prepare :comando

SQL dinamico Fase di esecuzione execute NomeComando [ into TargetList ] [ using ListaParametri ] La target list contiene le variabili in cui deve essere inserito il risultato dellesecuzione del comando. La lista dei parametri specifica i valori che devono essere assunti dai parametri della funzione. execute :comando into :citta using :dipartimento diventa, se :dipartimento assume il valore Produzione, select Città from Dipartimento where Nome = Produzione

SQL dinamico e cursori I cursori vengono utilizzati come in SQL statico, con la sola differenza che si associa al cursore lidentificativo dellinterrogazione invece che linterrogazione stessa e che si possono usare using e into per specificare i valori dei parametri di ingresso e uscita. Es. prepare :comando from :istruzioneSQL declare Cursore cursor for :comando open Cursore using :nome1