Esplora E-book
Categorie
Esplora Audiolibri
Categorie
Esplora Riviste
Categorie
Esplora Documenti
Categorie
CF char(16) UNIQUE,
o dopo aver dichiarato tutti gli attributi, se la chiave consiste di uno o più
attributi:
UNIQUE(Cognome,Nome)
n Ovviamente, specificare
UNIQUE(Cognome),
UNIQUE(Nome)
sarebbe molto più restrittivo
n Va osservato che:
n La specifica di una chiave primaria non è obbligatoria
n Non è necessario specificare NOT NULL per gli attributi della primary
key
n Ovvero
FOREIGN KEY (Sede) REFERENCES Sedi(Sede)
non permette tuple con stipendio negativo, ma ammette valori nulli per
l’attributo Stipendio
n Se CHECK viene espresso a livello di tabella (anziché nella definizione
dell’attributo) è possibile fare riferimento a più attributi della tabella stessa
CHECK (ImportoLordo = Netto + Ritenute)
CONSTRAINT ForeignKeySedi
FOREIGN KEY (Sede) REFERENCES Sedi
Imp Sedi
CodImp Nome Sede Ruolo Stipendio Sede Responsabile Citta
E001 Rossi S01 Analista 2000 S01 Biondi Milano
E002 Verdi S02 Sistemista 1500 S02 Mori Bologna
E003 Bianchi S01 Programmatore 1000 S03 Fulvi Milano
SELECT A1,A2,..,Am
FROM R1,R2,..,Rn
WHERE <condizione>
ovvero:
n SELECT (o TARGET) list (cosa si vuole come risultato)
n clausola FROM (da dove si prende)
n clausola WHERE (che condizioni deve soddisfare)
SELECT *
FROM Imp
WHERE Sede = ‘S01’
n Quindi
SELECT *
FROM Imp
n Per chiarezza, ogni nome di colonna può essere scritto prefissandolo con
il nome della tabella:
…e si può anche usare uno pseudonimo (alias) in luogo del nome della
tabella
Nomi degli impiegati che finiscono con una ‘i’ e hanno una ‘i’ in seconda
posizione
Nome e stipendio degli impiegati che hanno uno stipendio compreso tra
1300 e 2000 Euro (estremi inclusi)
Nome Stipendio
Rossi 2000
Verdi 1500
n Nel caso di espressioni complesse, SQL ricorre alla logica a 3 valori: vero
(V), falso (F) e “sconosciuto” (?)
n Per ordinare il risultato di una query secondo i valori di una o più colonne
si introduce la clausola ORDER BY, e per ogni colonna si specifica se
l’ordinamento è per valori “ascendenti” (ASC, il default) o “discendenti”
(DESC)
Nome Stipendio
Neri 2500
SELECT Nome, Stipendio Rossi 2000
FROM Imp Verdi 1500
n L’interrogazione
SedeE001 AltraSede
S01 S02
S01 S03
Genitori G1 Genitori G2
Chi sono i nonni di Anna?
Genitore Figlio Genitore Figlio
Luca Anna Luca Anna
Maria Anna Maria Anna
Giorgio Luca Giorgio Luca
Silvia Maria Silvia Maria
Enzo Maria Enzo Maria
n In tutti i casi gli elementi delle SELECT list devono avere tipi compatibili e
gli stessi nomi se si vogliono colonne con un’intestazione definita
n L’ordine degli elementi è importante (notazione posizionale)
n Il risultato è in ogni caso privo di duplicati, per mantenerli occorre
aggiungere l’opzione ALL:
R A B S C B
SELECT A B
1 a 1 a SELECT B
FROM R 1
1 a 1 b FROM R a
UNION 2
2 a 2 a UNION ALL a
SELECT C 3
SELECT B a
2 b 2 c FROM S 4
2 c 3 c FROM S b
c
3 b 4 d
b
SELECT A,B a
FROM R b
SELECT A A
UNION a
FROM R 1
SELECT B,C AS A c
UNION 2
FROM S c
SELECT C AS A 3
d
FROM S 4 Non corretta!
R A B
1 a SELECT B B SELECT B B
1 a FROM R a FROM S d
2 a INTERSECT b EXCEPT
2 b SELECT B c SELECT B
2 c FROM S FROM R
3 b
S C B B B
SELECT B SELECT B
1 a FROM R a FROM R a
1 b
INTERSECT ALL a EXCEPT ALL b
2 a b
SELECT B SELECT B
2 c FROM S c FROM S
3 c
4 d
n INSERT può usare il risultato di una query per eseguire inserimenti multipli
n Gli schemi del risultato e della tabella in cui si inseriscono le tuple possono
essere diversi, l’importante è che i tipi delle colonne siano compatibili
n Anche l’istruzione UPDATE può fare uso di una condizione per specificare
le tuple da modificare e di espressioni per determinare i nuovi valori
UPDATE Sedi
SET Responsabile = ‘Bruni’,
Citta = ‘Firenze’
WHERE Sede = ‘S01’
UPDATE Imp
SET Stipendio = 1.1*Stipendio
WHERE Ruolo = ‘Programmatore’