SQL (III) Data Definition Language/ Data Manipulation Language.

Slides:



Advertisements
Presentazioni simili
TIPI STANDARD DI SQL BOOLEAN Valori: vero, falso CHAR(n)
Advertisements

DB - Modello relazionale dei dati
Structured Query Language
SQL applicato a SQL Server
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità C1 Il linguaggio SQL.
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
Sistemi per il recupero delle informazioni
Biglietti: schema E/R.
1 Biglietti: schema E/R. 2 Biglietti: albero degli attributi.
Asserzioni, Viste & Triggers
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
1 SQL come linguaggio di definizione di dati Eugenio Di Sciascio.
Basi di Dati prof. A. Longheu
SCUOLA INTERUNIVERSITARIA SICILIANA DI SPECIALIZZAZIONE PER LINSEGNAMENTO SECONDARIO Classe di Concorso: 42A Massimo Mancino MODULO DIDATTICO - Ambienti.
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.
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.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1999
Basi di dati Università Degli Studi Parthenope di Napoli
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.
Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJCapo (SELStipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))
Equivalenza di espressioni
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.
SQL SQL (pronunciato anche come l’inglese sequel) è l’acronimo di Structured Query Language (linguaggio di interrogazione strutturato) E’ un linguaggio.
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:
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.
SQL basato su ANSI (American National Standards Institute) – standard SQL SQL – Structured Query Language è un linguaggio dichiarativo e permette di comunicare.
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.
Corso di Basi di Dati Il Linguaggio SQL Home page del corso:
sql: esempi di linguaggio sql nell'implementazione mysql
1 Il Linguaggio SQL Il Linguaggio SQL Prof. Lorenzo Vita, Ing. Luigi Testa.
Basi di Dati e Sistemi Informativi
Basi di Dati e Sistemi Informativi Il Linguaggio SQL Home page del corso:
SQL.
LINGUAGGIO S Q L breve presentazione curata da Aldo Pappalepore
SQL (IV) Data Definition Language/ Data Manipulation Language.
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?
1 Basi di Dati S tructured Q uery L anguage Appunti Matteo Longhi.
Il linguaggio SQL.
MySQL Database Management System
Database Elaborato da: Claudio Ciavarella & Marco Salvati.
1 Vincoli Ci sono i vincoli predefiniti ( unique, primary key, not null, foreign key … ) In SQL2 si ha anche check check Condizione Serve per dare condizioni.
Basi di dati e Relazioni Uno schema di relazione R(X) è costituito da un simbolo (nome della relazione) R e da una serie di attributi X={A 1, A 2, …, A.
Vincoli Interrelazionali Per i vincoli visti l’inserimento di un valore che li viola viene semplicemente impedito. In caso di vincoli di integrità referenziale,
Claudia Raibulet Basi di dati Claudia Raibulet
Vincoli interrelazionali
Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL: Amministrazione e Viste.
© 2015 Giorgio Porcu - Aggiornamennto 28/03/2015 UdA 1A Database Progettazione Fisica G IORGIO P ORCU
Lezione 5 - SQL. Linguaggi per DB Per interagire con le basi di dati occorre un linguaggio Linguaggio SQL (Structured Query Language), linguaggio standardizzato.
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.
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.
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
Corso di Basi di Dati Il Linguaggio SQL
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Transcript della presentazione:

SQL (III) Data Definition Language/ Data Manipulation Language

2 Riprendiamo SQL… Abbiamo visto parte del DML (Data Manipulation Language), le query Linguaggio di interrogazione per DBMS relazionali Vedremo brevemente il DDL (Data Declaration Language) e l’altra parte del DML (per fare modifiche), diventerà interessante quando farete le transazioni Ricordiamo: non esiste una versione di SQL che sia veramente lo standard

3 Notazione : isola il termine x [x]: x è opzionale {x}: x ripetuto da 0 a numero arbitrario di volte x | y: x e y sono in alternativa (, ) appartengono a SQL schema  relazione  tabella riga  tupla

4 Domini elementari per gli attributi SQL offre 6 famiglie di domini elementari, che possono essere usati anche per costruire domini compositi Carattere Bit Tipi numerici esatti Tipi numerici approssimati Data e ora Intervalli temporali

5 Character Per rappresentare caratteri singoli e stringhe a lunghezza fissa o variabile Si può scegliere tra diversi alfabeti character [varying][( lunghezza )] [character set Famiglia ] Forme abbreviate: char, varchar Per esempio: character (20) char varying (1000) character set Greek

6 Bit Per rappresentare bit (0,1) e stringhe di bit a lunghezza fissa o variabile Utili per rappresentare in modo compatto insiemi di valori booleani bit [varying][( lunghezza )] Forme abbreviate: varbit (per bit varying) Per esempio: varbit(20), stringhe di bit lunghe al massimo 20

7 Tipi numerici esatti Domini (4) per rappresentare valori esatti, interi o con parte decimale di lunghezza prefissata numeric [(precisione [, scala])]  precisione esatta decimal [(precisione [, scala])]  precisione minima precisione = numero cifre significative (se non si indica, si usa quella specifica del DBMS) scala = numero cifre dopo la virgola

8 Tipi numerici esatti Per esempio: decimal(4)  tra –9.999 e Per esempio: numeric(6,3)  tra -999,999 e +999,999 Altri due domini: integer smallint

9 Tipi numerici approssimati Domini (3) per rappresentare valori reali float[( Precisione )] double precision real Per tutti questi domini: Rappresentazione mantissa e esponente (precisione indica cifre della mantissa) Per esempio: 0.17E16 = 0,17 * 10 16

10 Altri domini Data e ora date time [( Precisione )][ with time zone ] Ecc. Intervalli temporali interval year to month : la durata dell’intervallo di tempo deve essere misurata in numero di anni e di mesi interval hour to second: la durata dell’intervallo di tempo deve essere misurata in numero di ore e di secondi

11 Valori di default Per attributi di tabelle e domini Valore che viene assegnato se non ne viene specificato un altro default GenericoVal: valore o espressione con tipo compatibile con il dominio user: identificativo utente null: … Per esempio: NumeroFigli smallint default 0

12 Definizione di domini Un dominio è un insieme di valori ammissibili per un attributo (concetto simile a quello di “tipo”) Si possono creare domini nuovi a partire da quelli di base create domain NomeDominio as TipoDiDato [ ValoreDiDefault ][ Vincolo ] Per esempio: create domain anniCorso as smallint default 1 not null

13 Definizione di schemi di DB Schema di DB come collezione di oggetti: domini, tabelle, asserzioni, viste, privilegi create schema [ NomeSchema ] [[authorization] Autorizzazione ] { DefElementoSchema } Autorizzazione: se omessa, proprietario colui che ha lanciato il comando NomeSchema: se omesso, nome = identificatore del proprietario Uno schema può essere definito incrementalmente

14 Definizione delle tabelle Una tabella è una collezione di attributi e può avere vincoli create table NomeTabella ( NomeAttr Dominio [ ValoreDiDefault ][ Vincoli ] {, NomeAttr Dominio [ ValoreDiDefault ][ Vincoli ]} AltriVincoli )

15 Per esempio : create table Persona (Nome char varying(20) not null unique, Cogn char varying(20) primary key, NumFigli smallint default 0) Inizialmente tabella vuota e il creatore ha tutti i privilegi Definizione delle tabelle

16 Vincoli intrarelazionali Su tabelle e domini: specificano proprietà che ogni istanza del DB deve verificare Vincoli predefiniti: not null : non può assumere valore nullo unique : attributo (oppure insieme di attributi unique(attr {,attr}) ) è superchiave primary key : attributo (oppure insieme di attributi) come chiave primaria (implica il not null ) Vincoli non predefiniti: con check (vedremo dopo)

17 Vincoli interrelazionali (I) foreign key : chiave esterna, impone che su ogni riga della tabella corrente (interna) il valore degli attributi specificati, se diverso da null, sia presente nelle tuple della tabella esterna tra i valori dei corrispondenti attributi La sintassi impone che l’insieme di attributi della tabella esterna sia unique, cioè superchiave (vincolo di integrità referenziale)

18 Vincoli interrelazionali (II) references : foreign key su singolo attributo Esempio 1 create table Impiegato ( … Dip char(15) references Dipartimento(NomeDip) …) Impiegato(Matr,Nome, Cogn,Dip,Stip) Dipartimento(NomeDip, …)

19 Vincoli interrelazionali (III) Esempio 2 create table Impiegati (Matr character(6) primary key, Cogn character(20) not null, Nome character(20) not null, Dip character(15) references Dipartimento(NomeDip), Stip numeric(6) default 0, unique(Nome,Cogn), foreign key(Nome,Cogn) references Anagrafica(Nome,Cognome)) NB Conta l’ordine degli attributi nella foreign key

20 Gestione vincoli Vincoli intrarelazionali: DBMS verifica che per ogni istanza (inserimento/modifica) i vincoli non siano violati Se violazione, aggiunta/modifica rifiutata e messaggio di errore Vincoli interrelazionali: non tutte le violazioni vengono trattate nello stesso modo  politiche di reazione alle violazioni

21 Gestione vincoli integrità referenziale (I) Violazione su tabella interna (inserimento/modifica riga)  DBMS rifiuta l’operazione Violazione su tabella esterna (cancellazione/modifica riga a cui fa riferimento tabella interna)  l’esterna è la tabella principale  politiche specifiche

22 Gestione vincoli integrità referenziale (II): modifica cascade : valore di tabella esterna riportato su tutte tabella interne set null : inserisce null come valore degli attributi corrispondenti nelle tabella interne set default : inserisce il valore di default no action : non si permette la modifica alla tabella esterna

23 Gestione vincoli integrità referenziale (III): cancellazione cascade : cancellazione delle righe corrispondenti anche dalle tabella interne set null : inserisce null come valore degli attributi nelle tabella interne corrispondenti ai valori delle righe cancellate nella tabella esterna set default : inserisce il valore di default no action : non si permette la cancellazione nella tabella esterna

24 Gestione vincoli integrità referenziale (IV) cascade prevede stretta dipendenza tra tabelle esterna ed interne Si possono adottare politiche diverse per cancellare/modificare Si possono innescare reazioni a catena!

25 Specifica di politica di reazione La politica di reazione viene specificata immediamente dopo il vincolo di integrità: on <cascade | set null | set default | no action>

26 Esempio 2: create table Impiegati (Matr character(6) primary key, Cogn character(20) not null, Nome character(20) not null, Dip character(15), Stip numeric(6) default 0, unique(Cogn,Nome) foreign key(Dip) references Dipartimento(NomeDip) on delete set null on update cascade) Specifica di politica di reazione

27 Modifica schemi DB (I) Per modificare domini già definiti: alter domain NomeDominio < set default ValoreDefault | drop default | add constraint DefVincolo | drop constraint NomeVincolo > Quando si mette un nuovo vincolo i dati lo debbono soddisfare

28 Modifica schemi DB (II) Per modificare schemi già definiti: alter table NomeTabella < alter column NomeAttr < set default NuovoDefault | drop default> add constraint DefVincolo | drop constraint NomeVincolo | add column DefAttr | drop column NomeAttr > Per esempio: alter table Dipartimento add column Nuff numeric(4)

29 Modifica schemi DB (III) Per rimuovere componenti drop NomeElemento [restrict | cascade] restrict : il comando non deve essere eseguito in presenza di componenti non vuote o usate (è opzione di default) cascade : si rimuove tutto (esempio non banale: LongString:char(100)  char(100) sostituito)

30 Modifica schemi DB (IV) Come per la modifica, si possono avere reazioni a catena con la cascade drop cascade molto potente, potrebbe avere conseguenze indesiderate se non si conosco tutte le dipendenze del DB Molti sistemi permettono di controllare il risultato prima di fare la drop cascade

31 Inserire (I) insert into NomeTabella [( ListaAttr )] <values ( ListaDiValori ) | SelectSQL > Esempio 1: insert into Dipart (Nome,Citta) values (‘produzione’, ‘Torino’) Esempio 2: insert into Prodotti-Milanesi (select Cod,Descr from Prodotto where Luogo = ‘Milano’) query

32 Inserire (II) Conta l’ordine con cui si elencano gli attributi (anche nella query) e i valori Se i valori non sono specificati: o null o valore di default (a seconda di come è stata creata la tabella, per esempio se c’è vincolo not null ) Di solito vengono fornite delle form che nascondono le insert

33 Delete (I) delete from NomeTabella [where Condizione ] Esempio 1: delete from Dipart where Nome = ‘produzione’ Esempio 2: delete from Dipart where Nome not in (select Dip from Impiegato)

34 Delete (II) Se non c’è nessuna condizione, cancella tutta la NomeTabella (attenzione ai cascade !!!) 1. delete from Dipart diverso da 2. drop table Dipart cascade diverso da 3. drop table Dipart restrict 1. cancella le righe della tabella (se c’era cascade, cancella righe di altre tabella legate da vincoli integrità referenziale) 2. rimuove la tabella 3. non cancella la tabella se ha tuple

35 Update (I) update NomeTabella set Attributo = < Espressione | SelectSQL | null | default> {, Attributo = } [where Condizione ] Esempio 1: update Dipendente set Stip = StipBase + 5 where matr = ‘666’ Senza condizione, si modificano tutte le tuple

36 Update (II) Esempio 2: update Impiegato set Stip = Stip*1.1 where Stip <= 30 update Impiegato set Stip = Stip*1.15 where Stip > 30 Occorre invertirle, sennò non funziona, infatti SQL è set-oriented e non tuple-oriented (come alternativa paraziale uso dei cursori…) 15 % 10 %

37 Vincoli (I) Ci sono i vincoli predefiniti ( unique, primary key, not null, foreign key … ) In SQL2 si ha anche check check Condizione Serve per dare condizioni di correttezza della BD ed è molto potente

38 Vincoli (II) Esempio: create table Impiegati (Matr character(6) check (Matr is not null and 1 = (select count(*) from Impiegato I where Matr = I.Matr)), Cogn character(20) check (Cogn is not null and 2 > (select count(*) from Impiegato I where Nome = I.Nome and Cogn = I.Cogn)), Nome character(20) check (Nome is not null and 2 > (…)), Dip character(5) check (Dip in (select NomeD from Dipartimento)))

39 Vincoli (II) Esempio: create table Impiegati (Matr character(6) check (Matr is not null and 1 = (select count(*) from Impiegato I where Matr = I.Matr)), Cogn character(20) check (Cogn is not null and 2 > (select count(*) from Impiegato I where Nome = I.Nome and Cogn = I.Cogn)), Nome character(20) check (Nome is not null and 2 > (…)), Dip character(5) check (Dip in (select NomeD from Dipartimento))) Vincolo di integrità Un solo impiegato con stesso nome/ cognome

40 Vincoli (III) Esempio: create table Impiegati (Matr … primary key, Cogn … not null, Nome … not null, Dip … references Dipartimento(NomeD), unique(Cogn,Nome)) Così è più semplice (e più efficiente dal punto di vista dell’implementazione) ma check utile per vincoli complessi (per esempio, libro pagina 138)

41 Asserzioni (I) Asserzione = vincolo su schema di relazione e non su istanza (tabella) o attributo che permettono di avere DB consistente La drop può cancellare anche le asserzioni create assertion NomeAsserzione check ( Condizione ) Per esempio: create assertion Alm-Un-Imp (check (1 <= (select count(*) from Impiegato))

42 Check e Asserzioni 1. Immediati: verificate dopo ogni modifica (per esempio, i vincoli predefiniti) 2. Differiti: solo dopo una serie di operazioni (transazione) set constraint NomeVincolo

43 Check e Asserzioni Se i dati non soddisfano i vincoli: 1. Roll-back parziale: si disfa la modifica 2. Roll-back: si disfa tutta la transazione Quando si rileva una violazione di un vincolo differito al termine di una transazione, non c’è modo di individuare l’operazione che ha causato la violazione  si disfa la transazione

44 Viste (tabelle virtuali) (I) create view NomeVista [( ListaAttr )] as SelectSQL [with [local | cascaded] | check option] Esempio 1: create view ImpAmm(Matr,Nome,Cogn,Stip) as select Matr,Nome,Cogn,Stip from Impiegato where Dip = ‘Amm’ and Stip > 10 possibile modificare

45 Viste (II) Utili per interrogazioni complesse Le viste possono usare altre viste, ma non possono esserci dipendenze ricorsive immediate (esempio: V1 usa V1) o transitive (esempio: V1 usa V2 che usa V3… che usa V1)

46 Viste (III) Su certe viste possibile fare modifiche che si ripercuotono sulle tabelle di base (“reali”) In generale, problemi se ci sono join molto complessi Regola: 1 tupla vista = 1 tupla tabella di base Nei sistemi commerciali viste definite su una sola tabella reale e l’insieme attributi della vista contengono chiave primaria della tabella

47 Controllo dell’accesso (I) Utente identificato in modo univoco (per esempio, il system administrator, predefinito e molto potente) Si da il controllo e l’accesso a risorse tramite “privilegi” grant e revoke per dare e revocare i privilegi

48 Controllo dell’accesso (II) I privilegi sono: insert (es. tabelle, viste, asserzioni), update (es. tabelle, viste, attributi), delete (es. tabelle, viste, asserzioni), select (es. tabelle, viste, attributi nelle interrogazioni), reference (es. tabelle usate per vincoli di integrità referenziali), usage (es. domini nella definizione di schemi), drop/alter: solo il creatore può usarli

49 Controllo dell’accesso (III) grant Privilegi on Risorse to Utenti [with grant option] revoke Privilegi on Risorse from Utenti [restrict | cascade] Per propagare i priv Solo chi dà può revocare