Sei sulla pagina 1di 13

APPUNTI DI SQL

Gli appunti qui forniti vogliono essere un riferimento scritto di alcuni degli argomenti trattati a lezione per gli studenti a cui vengono messi a disposizione. Non viene fornita alcuna garanzia di completezza sullargomento trattato, essendo solo appunti informali. Il libro di riferimento, a cui spesso si rimanda per eventuali riferimenti e approfondimenti, Basi Di Dati modelli e linguaggi di interrogazione ; McGrawHill; terza edizione.
Nelle prossima trattazione, ed in particolare della stesura delle query sql, spesso si utilizzano caratteri upper case ed altre volte no. SQL non case sensitive, pertanto lutilizzo di un carattere piccolo o grande non influenza il risultato, e tuttavia la differenza mostrata nelle presente stesura la semplice, volta per volta, messa in evidenza.

SQL (structured query language, oggi nome a se stante) DATI: atomici strutturati DDL (Data Definition Language) DML (Data Manipolation Language)

DATI ATOMICI:
character [varyng] [(lunghezza)] bit [varyng] [(lunghezza)] ---------------------------------------------------------------------------decimal [(precisione [,scala] )] devono sparire numeric [(precisione [,scala] )] devono sparire integer smallint ---------------------------------------------------------------------------scala: quante cifre significative scala: quante cifre significative char; varchar

Mercogliano Isidoro - Appunti di SQL -Bozza n4

- pagina: -1

float [(precisione)] real precisione fissa

precisione: cifre per la mantissa

double precision precisione doppia alla precedente ---------------------------------------------------------------------------date data senza ora precisione: per la frazione precisione: per la

time [(precisione)] [with time zone] del secondo

timestamp [(precisione)] [with time zone] frazione del secondo

---------------------------------------------------------------------------boolean blob clob ---------------------------------------------------------------------------NULL: indica assenza di valore

VARI
create scheme NOMEDB; (crea il database) show databases; (mostra tutti I database esistenti) use NOMEDB; (imposta il database da utilizzare) show tables; (mostra tutte le tabelle si un database)

CREAZIONE TABELLA
CREATE TABLE <tabella> ( <campo> <tipo> [ NULL | NOT NULL ] [ <chiave> ] [ <vincolo> ], <campo> <tipo> [ NULL | NOT NULL ] [ <chiave> ] [ <vincolo> ], ... )

Mercogliano Isidoro - Appunti di SQL -Bozza n4

- pagina: -2

create table nome_tabella( nome_attributo dominio [valore di default] [vincoli] , etc.. altri vincoli )

Es: create table nominativi( cognome varchar(256), nome varchar(256) ); Lopzione DEFAULT <valore | NULL > , inserita subito dopo la definizione del dominio, permette di definire valori di default.

Vincoli
La violazione di un vincolo, usualmente (vedasi vincoli inter-relazionali), non permette loperazione.

Vincoli intrarelazionali
NOT NULL Impossibilit di assumere valore NULL. es: nome varchar(20) NOT NULL

UNIQUE (impostazione di una superchiave) Impossibilit di assumere valori uguali ad uno o pi attributi. I valori null sono assunti tutti diversi tra loro. Due modi: su un solo attributo: si specifica lattributo seguito dalla parola unique su pi attributi: dopo aver definito tutti gli attributi della tabella, si elencano quelli a cui fornire il vincolo: unique(attr1, attr)

Mercogliano Isidoro - Appunti di SQL -Bozza n4

- pagina: -3

PRIMARY KEY come unique ma implica anche il vincolo NOT NULL Definizione identica a unique.

Vincoli inter-relazionali
(foreigni key = chiave esterna) Crea un legame tra la tabella interna, il cui valore deve essere diverso da null, e quella esterna su un attributo con vincolo unique o primary key.

Brevemente: FOREIGN KEY (attr1) REFERENCES tabella_esterna(attr) Completo: CONSTRAINT nome_vincolo (rigo opzionale e dipendente dallimplementazione) FOREIGN KEY (attr1) REFERENCES tabella_esterna(attr) On <delete | update> <cascade | set null | set default | no action>

VIOLAZIONE: Violazioni del vincolo della tabella interna (che viene vista come subordinata) non vengono permesse. Violazioni del vincolo (modifica o cancellazione) della tabella esterna (master) : cascade: il nuovo valore dellattributo della tabella esterna viene riportato su ttutte le corrispondenti della tabella interna. Set null: allattributo referente viene assegnato NULL Set default: allattributo referente viene assegnato il valore di default No action: lazione non viene esegiuta

Modifica delle relazioni


Vedi pag. 108 Mercogliano Isidoro - Appunti di SQL -Bozza n4 - pagina: -4

Interrogazioni
Vengono esaminate dal query optimizer per la loro ottimizzazione. Query base: select lista_attributi from nome_tabella [where condizioni] Query base: select Attr [ [as] alias ] {, Attr [ [as] alias ]} from nome_tabella [[as] alias ] {, nome_tabella [[as] alias ]} [where condizioni]

WHERE ammette unespressione booleana tramite gli operatori: And; or; not =; <>(diverso); >; <; <=; >= ordine di precedenza a mezzo di parentesi like (confronto tra stringhe: vedi dopo)

LIKE: utilizzato nella clausola where con due caratteri speciali: _: carattere arbitrario %: stringa arbitraria di lunghezza arbitraria (eventualmente nulla) Esempio: where cognome like _o%i

DISTINCT: Nelle selezioni pu facilmente accadere che il risultato presenti dei duplicati. Ove non siano richiesti, possibile rimuoverli tramite la clausola DISTINCT, immediatamente dopo select, il cui opposto ALL valore , di default. Esempio di utilizzo: select [ DISTINCT | ALL ] attr, from

Mercogliano Isidoro - Appunti di SQL -Bozza n4

- pagina: -5

JOIN INTERNI ED ESTERNI: Tipicamente possibile realizzare un join con una select su due o pi tabelle. Es: select * from tab1, tab2 where tab1.attr1=tab2.attr2 Lo standard sql mette a disposizione i seguenti costrutti. select Attr [ [as] alias ] {, Attr [ [as] alias ]} from nome_tabella [[as] alias ] { [TIPOJOIN] join nome_tabella [[as] alias ] on Condizione_di_join} [where alter_condizioni]

Tipo di join: inner left outer right outer full outer

L'inner, il join interno. Il left outer join: fornisce il risultato esteso con le righe della tabella a sinistra. In modo analogo si definisce il comportamento degli altri.

USO DI VARIABILI: Tramite lutilizzo degli alias vengono a crearsi delle variabili il cui utilizzo non si limita ad una semplice ridenominazione: infatti possibile riferirsi, per esempio, alla stessa tabella con due variabili differenti le quali rappresentano due istanze della tabella stessa. Es: .. from Tab1 as A1, Tab1 as A2, Ancora una volta ne viene a guadagnare lespressivit generale.

Mercogliano Isidoro - Appunti di SQL -Bozza n4

- pagina: -6

Nelle selezioni nidificate (non ancora esaminate) vale lo scope per le variabili.

ORDINAMENTI: possibile specificare un ordinamento delle righe delle selezioni terminando la selezione in questo modo: ORDER BY attr_di_ordinamento [ ASC | DESC ] {, attr_di_ordinamento [ ASC | DESC ]} ASC (ascendente) il valore di default. DESC lopposto.

Operatori aggregati
(estendono lalgebra relazionale) Sono operatori che agiscono non pi su una tupla alla volta, bens su insiemi di tuple. In prima analisi vediamo loperatore count(*), il quale conta il numero di righe. Utilizzo: select count(*) from tabella where condizione Nella risoluzione della query vengono esaminate prima le ultime due righe, ed il risultato viene passato alloperatore.

Nello standard SQL ci sono 5 operatori: count (< *| [distinct|all] lista_attributi > ) < sum | max | min | avg > (< [distinct|all] lista_attributi > ) Sum e avg ammettono espressioni che contengono valori numerici o intervalli di tempo. Max e min ammettono espressioni su cui sia definito un ordinamento. Rimane ovvio il significato degli operatori (deducibile dal nome). Le varie implementazioni sql spesso offrono ulteriori operatori. Gli operatori non possono essere utilizzati per condizionare le select (cio utilizzati dopo il where).

Mercogliano Isidoro - Appunti di SQL -Bozza n4

- pagina: -7

Raggruppamenti
possibile definire un ordinamento delle righe tramite linserimento in coda della clausola: order by attr. Gli operatori precedentemente introdotti, possono in questo modo agire su gruppo di tuple. Esiste una limitazione di sintassi: vedi pag 131.

PREDICATI SUI GRUPPI: per effettuare una selezione sui gruppi si utilizza la clausola: having vedi pag 133 Lutilizzo di questo costrutto senza il precedente order by, tratta le tuple come un unico gruppo.

Interrogazioni di tipo sistemistico


selectSQL <union | intersec | except > [all] selectSQL except sta per differenza. [all] va inserito in quanto questa volta il valore di defaul, quello utilizzato in caso in cui non sia inserito alcunch, distinct (che toglie tutti i valori uguali).

Interrogazioni nidificate
Viene inserita una interrogazione (select) in una clausola where di unaltra interrogazione. Select.. From where attr operatore any|all ( selectSQL ) Dove: Operatore: =; <>(diverso); >; <; <=; >= Mercogliano Isidoro - Appunti di SQL -Bozza n4 - pagina: -8

Any: la condizione deve essere verificata per almeno una tupla All: la condizione deve essere verificata per tutte le tuple I domini devono essere confrontabili Per rappresentare il controllo di appartenenza o esclusione rispetto ad uninsieme, SQL mette a disposizione due operatori in e not in, i quali risultano del tutto identici a = any e <> all.

Interrogazioni nidificate complesse


Pag140

Inserimento
(dei dati nelle tabelle)
insert into nome_tabella (attr.1,attr.2,..) values (val1,val2,..); oppure insert into nome_tabella ( selectSQL ) nellultimo caso serve la compatibilit tra i domini.

Cancellazione di righe
Delete from nome_tabella where condizione; condizione: rispetta la sintassi delle select; pu valutare anche select nidificate.

Cancellazione di tabelle
Drop table nome_tabella cascade | restrict

Cascade: elimina anche le viste e le tabelle che nella loro definizione fanno riferimento alla tabella Restrict: se vi sono viste o tabelle che vi fanno riferimento, allora la cancellazione fallisce.

Mercogliano Isidoro - Appunti di SQL -Bozza n4

- pagina: -9

Modifica dei dati


Update nome_tabella set attr = <espressione | selectSQL | NULL | defaul > {, attr = <espressione | selectSQL | NULL | defaul >} [where condizione] Es: Update alunno set anno =3 where id=1;

Vincoli di integrit generici


Tutti i vincoli si possono anche in un altro modo, peraltro pi espressivo, e cio tramite la clausola: check ( condizione ) applicato al seguito della definizione di ciascun attributo. Tutti gli altri vincoli possono essere specificati in questo modo, il quale per meno pratico rispetto ai vincoli su visti. Inoltre di perde la possibilit di definire una politica di reazione.

Asserzioni
Sono vincoli definiti tramite la clausola check ed associati allo schema. Create assertion nome_asserzione Check (condizione)

Politiche di controllo
Il controllo dei vincoli pu essere immediato differito (da controllare alla fine di una transazione)

Mercogliano Isidoro - Appunti di SQL -Bozza n4

- pagina: -10

Viste
Vedi pag. 160

Funzioni scalari
Vedi pag. 165

Controllo dellaccesso
SQL permette di specificare chi opera, su cosa opera e come. Si basa sul concetto di privilegio. Ogni privilegio caratterizzato da: 1- la risorsa a cui si riferisce 2- lutente che concede il privilegio 3- lutente che riceve il privilegio 4- lazione che viene permessa alla risorsa 5- se il privilegio pu essere trasmesso o meno ad altri utenti Quando una risorsa viene creata, il sistema concede automaticamente tutti i privilegi su tale risorsa al creatore. Esiste inoltre un utente predefinito (_system) che rappresenta il database administrator, il quale possiede tutti i privilegi su tutte le risorse. I privilegi disponibili sono: insert update delete select references (per fornire lautorizzazione ad effettuare un riferimento) usage

drop ed alter possono essere concessi ma rimangono prerogativa del creatore.

Concedere privilegi: grant Privilegi on Risorsa to Utente [with grant option] Privilegi: se tutti allora all privileges with grant option: indica se il privilegio pu essere propagato

Mercogliano Isidoro - Appunti di SQL -Bozza n4

- pagina: -11

Rimuovere privilegio: revoke Privilegi on Risorsa from Utente [restrict | cascade] Nei privilegi si pu anche specificare grant option. Nella revoca dei privilegi pu nascere un problema quando lutente aveva concesso, a sua volta, altri privilegi. In questo caso, il comportamento specificato secondo i valori: restrict: il valore di default, ed indica di non eseguire la revoca qualora li si debba revoca anche ad altri utenti cascade: li toglie a tutti

SQL-3 ha introdotto laccesso basato sui ruoli.

Transazioni
Start transaction < commit | rollnack > work

Procedure
Sql permette procedure molto molto semplici.

Trigger
Detti anche regole attive, seguono il paradigma evento-condizione-azione (ECA). Ogni trigger si attiva dopo uno specifico evento e se si verifica una condizione, eseguono unazione.

Mercogliano Isidoro - Appunti di SQL -Bozza n4

- pagina: -12

Documento redatto da Mercogliano Isidoro con diritti di cui art. 2576 c.c.

Mercogliano Isidoro - Appunti di SQL -Bozza n4

- pagina: -13