SQL. SQL come Data Manipulation Language - Inserimento, cancellazione e aggiornamento di righe

Documenti analoghi
SQL-DML/3. Basi di Dati. Prof. Alfredo Cuzzocrea Università degli Studi di Trieste

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

insert into Dipartimento(NomeDip, Città) values('produzione','torino') insert into ProdottiMilanesi (select codice, descrizione from Prodotto

Inserimento. Cancellazione. Modifica. INSERT INTO Persone VALUES ('Mario',25,52) INSERT INTO Persone(Nome, Eta, Reddito) VALUES('Pino',25,52)

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

Vincoli di integrità generici: check

Check, esempio. Vincoli di integrità generici. Asserzioni. Asserzioni

Basi di dati. SQL: Caratteristiche evolute

Corso di Basi di Dati

Linguaggio SQL: costrutti avanzati Controllo dell accesso

Linguaggio SQL: costrutti avanzati D B M G

8 SQL : Check, Asserzioni,Viste

SQL Laboratorio di Basi di Dati a.a. 2002/2003

Corso di. Basi di Dati I. 9. Esercitazioni in SQL: Check, asserzioni, viste

Interpretazione delle query nidificate

Laboratorio di Basi di Dati e Multimedia

Laboratorio di Basi di Dati

Basi di Dati: Corso di laboratorio

Universita di Milano Bicocca Corso di Basi di dati 1 in elearning C. Batini 6. SQL DDL 6.2 Data Description Language - 2

Tipi numerici esatti Valori interi o con parte decimale di lunghezza prefissata

Aspetti avanzati nella definizione degli schemi DDL2 1

Il linguaggio SQL: autorizzazioni

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

Interrogazioni nidificate

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

SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

Corso di Basi di Dati

Corso sul linguaggio SQL

Manuale SQL. Manuale SQL - 1 -

Interrogazioni con ANY e ALL. Operatori ANY e ALL. Interrogazioni con ANY e ALL. Interrogazioni con ANY e ALL. Interrogazioni con ANY e ALL

SQL: DDL, VI, Aggiornamenti e Viste

SQL. Domini. Domini elementari (predefiniti) Domini definiti dall utente (semplici, ma riutilizzabili)

SQL Sintassi Dei Comandi

SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

SQL. Domini. Domini elementari (predefiniti) Domini definiti dall utente (semplici, ma riutilizzabili)

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

Il linguaggio SQL costrutti DDL.

SQL. Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL. Definizione dei dati in SQL. SQL: "storia" Domini

Stringhe di caratteri

Corso di Basi di Dati

E. Giunchiglia Basi di dati 1 (trasparenze basate su Atzeni, Ceri, Paraboschi, Torlone: Basi di dati, Capitolo 4) SQL SQL. Definizione dei dati in SQL

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL. Definizione dei dati in SQL. SQL: "storia" Domini. CREATE TABLE, esempio

SQL. Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL. Definizione dei dati in SQL. SQL: "storia" Domini

Controllo degli accessi

Controllo degli accessi. Controllo degli accessi. Controllo degli accessi. Controllo degli accessi

Vincoli, procedure e regole attive in SQL. SQL: vincoli, trigger 1

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

Laboratorio di Sistemi Informativi

Corso di. Basi di Dati I. 10. Esercitazioni in SQL: Complementi

Interrogazioni nidificate

Primo Compitino di Basi di Dati

Corso di. Basi di Dati I. 10. Esercitazioni in SQL: Complementi

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

Il linguaggio SQL: le viste

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

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

Corso di Basi di Dati

Structured Query Language

D B M G D B M G 2. Sistemi informativi. Linguaggio SQL: costrutti avanzati

Corso di Basi di Dati

SQL. Sistemi informativi Modulo di Basi di dati. CREATE TABLE, esempio. Definizione dei dati in SQL. Domini. Domini elementari

SISTEMI INFORMATIVI E TELEMEDICINA INFORMATICA MEDICA. 3. Panoramica su SQL Prof. Mauro Giacomini

Vincoli. Chiavi esterne Vincoli locali e globali Triggers Leggere Cap 2 Riguzzi et al. Sistemi Informativi

LABORATORIO di INFORMATICA

SQL Matteo Magnani, Danilo Montesi Università di Bologna SQL. Linguaggio di interrogazione per basi di dati relazionali

Cap. 7 -Trigger e loro uso

Basi di Dati e Sistemi Informativi. Asserzioni, Viste e Trigger Basi di dati Attive

Storia. Corso di Basi di Dati Spaziali. Componente DDL. Funzionalità. Esempio. Creazione di schema. Linguaggi: SQL. Storia:

SQL e algebra relazionale

SQL DDL. Create database. Alter database. Drop database

SQL. SQL: una visione panoramica. SQL: "storia" Definizione dei dati

Sistemi di Elaborazione delle Informazioni

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

SQL - Structured Query Language

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

PRODOTTO CARTESIANO Caso Generale

Istruzioni DCL di SQL. Pag. 119 par.5

SQL: "storia" 31/05/2006 2

Basi di Dati prof. Letizia Tanca lucidi ispirati al libro Atzeni-Ceri-Paraboschi-Torlone. SQL: il DDL

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

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

D B M G 2. Linguaggio SQL: fondamenti. Istruzioni di aggiornamento. Introduzione Istruzione INSERT Istruzione DELETE Istruzione UPDATE

Elena Baralis 2007 Politecnico di Torino 1

SQL non è solo un linguaggio di interrogazione (Query Language), ma. Un linguaggio per la definizione di basi di dati (Data-definition language (DDL))

Elena Baralis 2013 Politecnico di Torino 1

IL MODELLO RELAZIONALE

Basi di Dati. Dettagli e Approfondimenti SQL-92 25/02/2004. Dettagli e Approfondimenti. DDL: Tabelle. DML: Aggiornamenti.

SQL-DDL. Basi di Dati. Prof. Alfredo Cuzzocrea Università degli Studi di Trieste

Basi di Dati SQL-92. Dettagli e Approfondimenti

SQL /10/2016 Basi di dati - SQL 1

ESERCITAZIONE: AZIENDA

SQL PER LA DEFINIZIONE DI BASI DI DATI

ESERCITAZIONE: Fornitore-Fornisce-Articolo

Fondamenti di Informatica A. A / 1 9

Viste come strumenti di programmazione

Laboratorio di Basi di Dati

Linguaggio SQL: fondamenti

Corso di. Basi di Dati I. 7. Esercitazioni in SQL: Definizione e manipolazione dei dati

Transcript:

SQL SQL come Data Manipulation Language - Inserimento, cancellazione e aggiornamento di righe

Operazioni di aggiornamento Abbiamo visto come creare tabelle e come interrogarle. Vedremo ora come popolarle e modificarne il contenuto. Sono possibili tre tipi di aggiornamento dei dati contenuti nelle tabelle: Inserimento (INSERT) Eliminazione (DELETE) Modifica (UPDATE) 2

Esempio Assumiamo di avere creato la seguente tabella, momentaneamente vuota: ImpRaccomandati Nome Cognome Ufficio Stipendio 3

Inserimento di ennuple insert into ImpAmministrazione values( Mario', Rossi, 10, 45) ImpRaccomandati Nome Cognome Ufficio Stipendio Mario Rossi 10 45 4

Inserimento di ennuple insert into ImpRaccomandati(Cognome,Ufficio) values( Verdi, 20) ImpRaccomandati Nome Cognome Ufficio Stipendio Mario Rossi 10 45 Verdi 20 5

Inserimento di ennuple insert into ImpRaccomandati (select Nome, Cognome, Ufficio, Stipendio from Impiegati where Dipart= Direzione ) ImpRaccomandati Nome Cognome Ufficio Stipendio Mario Rossi 10 45 Verdi 20 Carlo Rossi 14 80 Lorenzo Lanzi 7 73 6

Inserimento di ennuple Istruzione per l inserimento di ennuple Nome della tabella INSERT INTO DIPARTIMENTO (Codice, Nome) VALUES(...) oppure (SELECT...) Specifica dei valori da inserire, o esplicitamente o tramite una query Eventuali attributi (colonne) in cui inserire i dati 7

Inserimento di ennuple L ordinamento degli attributi (se presente) e dei valori è significativo. Le due liste debbono avere lo stesso numero di elementi. Se la lista di attributi è omessa, si fa riferimento a tutti gli attributi della relazione, secondo l ordine con cui sono stati definiti. Se la lista di attributi non contiene tutti gli attributi della relazione, per gli altri viene inserito un valore nullo (che deve essere permesso) o un valore di default. 8

Eliminazione di ennuple Consideriamo la seguente tabella: ImpRaccomandati Nome Cognome Ufficio Mario Rossi 10 Verdi 20 Carlo Rossi 14 Lorenzo Lanzi 7 Stipendio 45 80 73 9

Eliminazione di ennuple delete from ImpRaccomandati where Cognome= Verdi ImpRaccomandati Nome Cognome Ufficio Stipendio Mario Rossi 10 45 Verdi 20 Carlo Rossi 14 80 Lorenzo Lanzi 7 73 10

Eliminazione di ennuple delete from ImpRaccomandati where Stipendio <> (select max(stipendio) from Impiegati) ImpRaccomandati Nome Cognome Ufficio Stipendio Mario Rossi 10 45 Carlo Rossi 14 80 Lorenzo Lanzi 7 73 11

Eliminazione di ennuple Istruzione per l eliminazione di ennuple Nome della tabella DELETE FROM DIPARTIMENTO WHERE condizione Condizione di eliminazione (opzionale) 12

Eliminazione di ennuple Elimina le ennuple che soddisfano la condizione. Può causare eliminazioni da altre relazioni, se i vincoli di integrità referenziale sono definiti con politiche di reazione cascade. ATTENZIONE: se la where viene omessa, si intende where true. Per cancellare tutte le ennuple mantenendo lo schema: delete from Dipartimento Per cancellare anche lo schema: drop Dipartimento 13

Modifica di ennuple Consideriamo la seguente tabella: ImpRaccomandati Nome Cognome Ufficio Mario Rossi 10 Carlo Rossi 14 Lorenzo Lanzi 7 Stipendio 45 80 73 14

Modifica di ennuple update ImpRaccomandati set Stipendio = Stipendio * 1.5 ImpRaccomandati Nome Cognome Ufficio Stipendio Mario Rossi 10 67.5 Carlo Rossi 14 120 Lorenzo Lanzi 7 109.5 15

Modifica di ennuple update ImpRaccomandati set Stipendio = Stipendio - 30 where Ufficio not in (Select Ufficio From Impiegati Where Dipart = Direzione ) ImpRaccomandati Nome Cognome Ufficio Stipendio Mario Rossi 10 37.5 Carlo Rossi 14 120 Lorenzo Lanzi 7 109.5 16

Modifica di ennuple update ImpRaccomandati set Stipendio = null, Ufficio = default ImpRaccomandati Nome Cognome Ufficio Stipendio Mario Rossi 0 null Carlo Rossi 0 null Lorenzo Lanzi 0 null 17

Modifica di ennuple Istruzione per la modifica di ennuple Nome della tabella UPDATE NomeTabella SET Attributo = < Espressione SelectSQL null default >, Attributo = < Espressione SelectSQL null default >... where condizione Condizione di eliminazione (opzionale) Specifica di uno o piu attributi da modificare, con i valori (impliciti o espliciti) da sostituire. 18

Modifica di ennuple Attenzione a modifiche consecutive simili alle seguenti: update ImpRaccomandati set Stipendio = Stipendio * 1.1 where Stipendio <= 30 update ImpRaccomandati set Stipendio = Stipendio * 1.15 where Stipendio > 30 19

Modifica di ennuple Ci aspetteremmo il seguente aggiornamento: Stipendio 32 28 32x1.15 = 28x1.1 = Stipendio 36.8 30.8 Qualcuno vede l errore? 20

Modifica di ennuple Il primo blocco funziona: update ImpRaccomandati set Stipendio = Stipendio * 1.1 where Stipendio <= 30 Stipendio 32 28 Stipendio 32 30.8 update ImpRaccomandati set Stipendio = Stipendio * 1.15 where Stipendio > 30 21

Modifica di ennuple update ImpRaccomandati set Stipendio = Stipendio * 1.1 where Stipendio <= 30 Il secondo fallisce. update ImpRaccomandati set Stipendio = Stipendio * 1.15 where Stipendio > 30 Stipendio 32 28 Stipendio 32 30.8 Stipendio 36.8 35.42 22

SQL Vincoli Generici e Viste

Vincoli di integrità generici: check Abbiamo visto come SQL metta a disposizioni costrutti per definire i vincoli piu frequenti di una base di dati relazionale. Talvolta sono richiesti vincoli piu complessi e/o troppo specifici per dedicarvi un costrutto speciale. SQL permette la definizione di ulteriori vincoli tramite il costrutto check. 24

Vincoli di integrità generici: check create table Impiegato ( Matricola character(6) primary key, Cognome character(20), Sesso char not null check (Sesso in ( M, F )), Stipendio integer, Superiore character(6), check (Stipendio <= (select Stipendio from Impiegato J where Superiore = J.Matricola) ) 25

Vincoli di integrità generici: check Check viene seguito da una condizione, che puo essere espressa come se si trattasse di una clausola where. Check e piu potente degli altri costrutti per specificare vincoli di SQL. ESERCIZIO: esprimere i vincoli not null, foreign key e unique utilizzando il costrutto check. 26

Vincoli di integrità generici: Asserzioni Alcuni vincoli possono non appartenere a un attributo o una tabella in particolare, ma direttamente allo schema. Check permette di definire questo tipo di vincoli: create assertion NomeAsserzione check ( Condizione ) create assertion AlmenoUnImpiegato check (1 <= (select count(*) from Impiegato )) 27

Viste Le Viste sono tabelle virtuali, il cui contenuto dipende da quello di altre tabelle. CREATE VIEW Nome ( ListaAttributi ) as SelectSQL modalita di aggiornamento La lista Attributi e opzionale Interrogazione che ne determina il contenuto. Ne specifica il comportamento nel caso la si voglia aggiornare. 28

Viste create view ImpiegatiAmmin (Matricola, Nome, Cognome, Stipendio) as select Matricola, Nome, Cognome, Stipendio from Impiegato where Dipart = 'Amministrazione' and Stipendio > 10 create view ImpiegatiAmminPoveri as select * from ImpiegatiAmmin where Stipendio < 50 with check option 29

Opzioni su Viste check option e permesso solo su viste aggiornabili. Controlla che dopo gli aggiornamenti le righe appartengano ancora alla vista. local (nel caso di viste su viste) specifica che il controllo deve essere verificato solo sulla vista corrente. cascaded (nel caso di viste su viste) specifica che l aggiornamento deve soddisfare i vincoli di tutte le viste (default). 30

Opzioni su Viste: with local check option Tabella (Stipendio) ACCETTATO Aggiornamento di una riga: Stipendio = 8 Vista1: Stipendio > 10 Vista2: Stipendio < 50 31

Opzioni su Viste: with cascade check option Tabella (Stipendio) PROIBITO Aggiornamento di una riga: Stipendio = 8 Vista1: Stipendio > 10 Vista2: Stipendio < 50 32

Interrogazioni tramite viste Le viste permettono di scrivere interrogazioni che non sarebbero altrimenti possibili. Le viste aumentano dunque il potere espressivo di SQL. 33

Esempio 1 Trova il dipartimento che spende il massimo in stipendi select Dipart from Impiegato nidificazione della HAVING group by Dipart da evitare (non e sempre supportata) having sum(stipendio) >= all (select sum(stipendio) from Impiegato group by Dipart) 34

Soluzione con le viste Trova il dipartimento che spende il massimo in stipendi create view BudgetStipendi(Dip,TotaleStipendi) as select Dipart, sum(stipendio) from Impiegato group by Dipart select Dip from BudgetStipendi where TotaleStipendi = (select max(totalestipendi) from BudgetStipendi) 35

Esempio 2 Trova il numero medio di uffici per ogni dipartimento select avg(count(distinct Ufficio)) from Impiegato group by Dipart nidificazione di funzioni aggregate non permessa 36

Soluzione con le viste Trova il numero medio di uffici per ogni dipartimento create view DipartUffici(NomeDip,NroUffici) as select Dipart, count(distinct Ufficio) from Impiegato group by Dipart select avg(nrouffici) from DipartUffici 37

SQL Controllo degli accessi

Controllo degli accessi Ogni componente dello schema (risorsa) può essere protetta (tabelle, attributi, viste, domini, ecc.). Il possessore della risorsa (colui che la crea) assegna dei privilegi agli altri utenti. Un utente predefinito (_system) rappresenta l amministratore della base di dati ed ha completo accesso alle risorse. Ogni privilegio è caratterizzato da: La risorsa a cui si riferisce. L utente che concede il privilegio. L utente che riceve il privilegio. L azione che viene permessa sulla risorsa. Se il privilegio può esser trasmesso o meno ad altri utenti. 39

Controllo degli accessi BD utente 1 _system utente 2 utente 3 40

Controllo degli accessi BD utente 1 crea risorsa x _system x: tutti i privilegi x: tutti i privilegi utente 2 x: nessun privilegio utente 3 41 x: nessun privilegio

Controllo degli accessi BD utente 1 risorsa x _system x: tutti i privilegi x: tutti i privilegi x: azione y trasmissibile utente 2 x: azione y utente 3 42 x: nessun privilegio

Controllo degli accessi BD utente 1 risorsa x _system x: tutti i privilegi x: tutti i privilegi x: azione y non trasmissibile utente 2 utente 3 43 x: azione y x: azione y

Tipi di privilegi SQL offre sei (+1) tipi di privilegi: insert inserire un nuovo oggetto nella risorsa. update modificare il contenuto di una risorsa. delete rimuovere un oggetto dalla risorsa. select accedere al contenuto della risorsa con una query. references costruire un vincolo di integrità referenziale con la risorsa (può limitare la capacità di modificare la risorsa). usage utilizzare la risorsa nella definizione di uno schema (per esempio, un dominio). all privileges tutti i privilegi precedenti. 44

grant e revoke Per concedere un privilegio ad un utente: grant Privilegio on Risorse opzionale to Utenti with grant option grant option specifica se gli utenti specificati possono propagare il privilegio ad altri utenti. Ad esempio: grant select on Department to Stefano grant all privileges on Impiegato to Paolo, Riccardo grant select on Department to Marco with grant option 45

grant e revoke Per revocare privilegi precedentemente concessi: revoke Privilegio on Risorse restrict e il valore di default to Utenti restrict/cascade grant option in questo caso e considerato un privilegio, e puo essere revocato. Ad esempio: revoke grant option on Department to Marco 46

Opzioni di grant e revoke La revoca deve essere fatta dall utente che aveva concesso i privilegi. restrict (di default) specifica che il comando non deve essere eseguito qualora la revoca dei privilegi all utente comporti qualche altra revoca (dovuta ad un precedente grant option). cascade invece forza l esecuzione del comando. Come sempre, attenti alle reazioni a catena. 47

SQL Stored procedures

(Stored) Procedure SQL-2 consente di definire procedure (chiamate stored procedures). Le stored procedure sono parte dello schema: procedure AssignCity(:Dep char(20), :City char(20)) update Department set City = :City where Name = :Dep SQL-2 non consente di scrivere procedure complesse, ma solo singoli comandi SQL. Ogni sistema adotta le proprie regole al riguardo. Molti sistemi offrono estensioni di SQL che consentono di scrivere procedure complesse (per esempio, Oracle PL/SQL). 49

Procedure in Oracle PL/SQL Procedure Addebita(CodConto char(5),prelievo integer) is TroppoScoperto exeption; AmmontarePrec integer; NuovoAmmontare integer; Limite integer; begin select Ammontare, Scoperto into AmmontarePrec, Limite from ContoCorrente where CodiceConto = CodConto for update of Ammontare; NuovoAmmontare := AmmontarePrec - Prelievo; if NuovoAmmonotare > Limite then update ContoCorrente set Ammontare = NuovoAmmonotare where CodiceConto = CodConto; else insert into TransazioniOltreScoperto values(codconto,prelievo,sysdate); end if; end Addebita; 50