SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language...
-
Upload
biagio-basso -
Category
Documents
-
view
220 -
download
2
Transcript of SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language...
![Page 1: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/1.jpg)
SQL
SQL (pronunciato anche come l’inglese sequel) è l’acronimo di Structured Query Language(linguaggio di interrogazione strutturato)
E’ un linguaggio completo che presenta anche le proprietà di:DDL (Data Definition Language)DML (Data Manipulation Language)
Con SQL è quindi possibile: definire schemi di basi di dati eseguire query modificare il contenuto della base di dati
![Page 2: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/2.jpg)
SQL
1986 Prima standardizzazione1989 SQL-891992 SQL-2 (SQL-92): versione attualmente diffusa (e tuttora non completamente implementata)1998 SQL-3 (SQL-99): nuovo standard proposto con funzionalità avanzate (DB a oggetti, operazioni ricorsive ecc.)
3 implementazioni disponibili: Entry SQL Intermediate SQL Full SQL
![Page 3: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/3.jpg)
Definizione dei dati
Esistono 6 domini elementari:
Character Bit Tipi numerici esatti Tipi numerici approssimati Data e ora Intervalli temporali
![Page 4: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/4.jpg)
Domini
Characterrappresenta singoli caratteri o stringhe
character [varying] [(Lunghezza)]
[character set NomeFamigliaCaratteri]
character(20) stringa di lunghezza 20
character varying(100) stringa di lunghezza max. 100
character(20) character set Greekstringa di lunghezza 20 in caratteri greci
![Page 5: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/5.jpg)
DominiBitrappresenta attributi o vettori di attributi che possono assumere solo valori 0 o 1. Utilizzato per implementare flag.
bit [varying] [(Lunghezza)]
Intervalli Temporaliinterval UnitàDiTempo1[(Precisione)]
[to UnitàDiTempo2[(Precisione)]]UnitàDiTempo1 e UnitàDiTempo2 specificano le unità di misura da usare dalla più lunga alla meno lunga
NB La definizione è valida nei 2 sottointervalli [year,month] e [day,second].
interval day(4) to second(6) rappresenta l’intervallo [0,10000) giorni e secondi con precisione al milionesimo di s.
![Page 6: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/6.jpg)
Domini
Tipi numerici esattiValori interi o con parte decimale di lunghezza prefissatanumeric [(Precisione [,Scala])]decimal [(Precisione [,Scala])]integersmallint
Precisione specifica il numero di cifre significative
Scala quante cifre si rappresentano dopo la virgola
decimal(4) numeri da -9999 a 9999
numeric(6,3) numeri da -999.999 a 999.999
La precisione degli interi dipende dall’implementazione
![Page 7: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/7.jpg)
Domini
Tipi numerici approssimatirappresentano valori reali approssimati
float [(Precisione)]double precisionreal
Precisione specifica il numero di cifre dedicato alla mantissa(la precisione dell’esponente dipende dall’implementazione)
real e double precision hanno precisione prestabilita, una doppia rispetto all’altra.
![Page 8: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/8.jpg)
Domini
Data e oratipi utilizzati per rappresentare istanti di tempo
date
time [(Precisione)][with time zone]
timestamp [(Precisione)][with time zone]
Ciascun tipo è divisibile in campi.
date ammette come campi year, month e day
time i campi hour, minute, second
timestamp tutti i campi da year a second
I campi sono divisi da “:” 20:03:04+1:00
![Page 9: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/9.jpg)
Definizione di schemi
E’ possibile definire uno schema di base di dati come collezione di oggetti.
create schema[NomeSchema]
[[authorization] Autorizzazione]]
{DefElementoSchema}
Autorizzazione rappresenta il nome dell’utente proprietario dello schema
![Page 10: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/10.jpg)
Definizione tabelleUna tabella SQL è costituita da una collezione ordinata di attributi e da un insieme di vincoli
create table NomeTabella
( NomeAttributo Dominio [ValDefault] [Vincoli]
{,NomeAttributo Dominio [ValDefault] [Vincoli] }
AltriVincoli
)
Una tabella è inizialmente vuota e chi la crea possiede tutti i diritti su di essa
![Page 11: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/11.jpg)
Definizione Tabelle
Es.
create table Dipartimento
(
Nome char(20) primary key,
Indirizzo char(50),
Città char(20)
)
![Page 12: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/12.jpg)
Definizione Domini
Come nei linguaggi ad alto livello (es. C) è possibile definire nuovi domini (tipi di dati) a partire da quelli predefiniti, anche se il costruttore è più limitato.
create domain NomeDominio as
TipodiDato [ValDefault] [Vincolo]
Non si possono creare array o strutture poiché il modello relazionale impone attributi definiti su un dominio elementare.
E’ però possibile associare dei vincoli ad un dominio definito dall’utente. Se si modifica la definizione di un dominio, la modifica si propaga a tutte le tabelle.
![Page 13: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/13.jpg)
CREATE DOMAIN Voto AS SMALLINT
DEFAULT NULL
CHECK ( value >=18 AND value <= 30 )
CREATE DOMAIN, esempio
![Page 14: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/14.jpg)
Valori di default
Si possono specificare valori di default per un attributo quando, al momento della creazione di una nuova tupla, in un campo non viene inserito alcun valore.
default < GenericoValore | user | null >
GenericoValore è un valore compatibile col dominio
user è il nome dell’utente che aggiorna la tabella
null corrisponde al valore di default di base
![Page 15: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/15.jpg)
Valori di default
Un nuovo default (es. nella definizione di un tipo a partire da un altro) sostituisce il precedente
Es. NumeroFigli smallint default 0
impone il valore 0 quando non viene specificato il valore dell’attributo.
![Page 16: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/16.jpg)
Vincoli intrarelazionali
I più semplici vincoli intrarelazionali predefiniti sono:
not null indica che il valore nullo non è ammesso su uno specifico attributo, cioè che sia inserito in ogni caso un valore, salvo che non sia già definito un valore di default.SQL non distingue i diversi tipi di valore nullo. Se è necessario, bisogna definire opportuni domini.
unique(Attributo {, Attributo}) indica che l’insieme di attributi deve essere una superchiave per la tabella.
primary key(Attributo {, Attributo}) definisce la chiave primaria. Può essere una sola. Tutti gli attributi sono not null.
![Page 17: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/17.jpg)
Vincoli intrarelazionali
Nome character(20) not null,
Cognome character(20) not null,
unique (Nome, Cognome)impone che non esistano due tuple in cui sia i valori di Nome che di Cognome siano uguali
Nome character(20)
not null unique,
Cognome character(20)
not null uniqueimpone che non esistano due tuple che abbiano uguali valori di Nome o di Cognome
![Page 18: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/18.jpg)
Vincoli interrelazionali
Vincoli di integrità referenziale
In SQL si usa il vincolo di foreign key (chiave esterna) per creare un legame fra i valori di un attributo della tabella corrente (interna) e un attributo di un’altra tabella (esterna). Si impone che per ogni riga della tabella interna il valore dell’attributo sia presente nel corrispondente attributo della tabella esterna.
L’attributo della tabella esterna deve essere unique.
Se l’attributo è unico allora si usa references.
Altrimenti si usa foreign key
![Page 19: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/19.jpg)
Vincoli interrelazionali
create table Impiegato
(
Matricola character(6) primary key,
Nome character(20) not null,
Cognome character(20) not null,
Dipart character(15)
references Dipartimento(NomeDip),
Stipendio numeric(9) default 0,
unique (Cognome, Nome),
foreign key(Nome, Cognome)
references Anagrafica(Nome,Cognome)
)
![Page 20: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/20.jpg)
Vincoli Interrelazionali
Per i vincoli visti l’inserimento di un valore che li viola viene semplicemente impedito.
In caso di vincoli di integrità referenziale, quando la violazione avviene per un cambiamento apportato alla tabella esterna, si deve associare una politica alle operazioni che possono causare inconsistenza:
on < delete | update ><cascade|set null|set default|no action> subito dopo la specifica del riferimento
![Page 21: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/21.jpg)
Vincoli Interrelazionali
Modifica (comando update):cascade il nuovo valore dell’attributo della tabella esterna viene riportato su tutte le corrispondenti righe della tabella interna.
set null all’attributo referente viene assegnato il valore nullo.
set default all’attributo referente viene assegnato il valore di default.
no action la modifica non viene consentita.
![Page 22: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/22.jpg)
Vincoli Interrelazionali
Cancellazione (comando delete):cascade tutte le corrispondenti righe della tabella interna vengono cancellate.
set null all’attributo referente viene assegnato il valore nullo.
set default all’attributo referente viene assegnato il valore di default.
no action la cancellazione non viene consentita.
![Page 23: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/23.jpg)
Modifica degli schemi
E’ possibile modificare gli schemi con i comandi
alter e drop.
alter consente di modificare domini e schemi di tabelle.
alter domain NomeDominio
< set default ValDefault |
drop default |
add constraint DefVincolo |
drop constraint NomeVincolo >
![Page 24: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/24.jpg)
Modifica degli schemi
alter table NomeTabella <
alter column NomeAttributo
< set default NuovoDefault |
drop default > |
add constraint DefVincolo |
drop constraint NomeVincolo |
add column NomeAttributo |
drop column NomeAttributo >
NB Quando si inserisce un nuovo vincolo, questo deve essere soddisfatto dai dati già presenti
![Page 25: SQL SQL (pronunciato anche come linglese sequel) è lacronimo di Structured Query Language (linguaggio di interrogazione strutturato) E un linguaggio completo.](https://reader036.fdocumenti.com/reader036/viewer/2022081518/5542eb59497959361e8c5518/html5/thumbnails/25.jpg)
Modifica degli Schemi
Il comando drop permette di rimuovere dei componenti
drop < schema | domain | table | view | assertion > NomeElemento
[ restrict | cascade ]
restrict specifica di non eseguire il comando in presenza di oggetti non vuoti.
cascade implica che gli oggetti specificati siano rimossi.
Inoltre vengono rimossi tutti gli oggetti da essi dipendenti.
Quindi, ATTENZIONE!!!!