SQL
Structured Query Language
Definizione dei dati in SQL
Istruzione CREATE TABLE:
- definisce uno schema di
relazione e ne crea un’istanza
vuota
- specifica attributi, domini e
vincoli
CREATE TABLE impiegato(
matricola CHAR(6) PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
cognome VARCHAR(20) NOT NULL,
Dipart CHAR(15),
Stipendio DECIMAL(4,2) DEFAULT 0,
FOREIGN KEY(Dipart) REFERENCES
Dipartimento(NomeDip),
UNIQUE (matricola,cognome,nome))
Vincoli intrarelazionali
- NOT NULL
- UNIQUE definisce chiavi
- PRIMARY KEY: chiave primaria
(una sola, implica NOT NULL)
-
Caratteri(Stringhe)
char(dimensione fissa)
varchar (dimensione variabile) 255 caratteri
text (dimensione variabile) 65000 caratteri
Numeri
numeric
integer
decimal (intera,decimale) es. (3,2) 999.99
Data e ora
time (08:00:00)
date (2020-02-01) YYYY-MM-GG
datetime (2020-02-01 08:00:00)
timestamp (13425346546754) la quantità di secondi che
sono trascorsi dal 1 genn 1970 ad oggi
Booleano
boolean
Aggiungere un campo:
ALTER TABLE DIRIGENTI
ADD NOTE VARCHAR2 (2000);
Modificare il tipo ad un campo:
Supponiamo ora che alla tabella DIRIGENTI vogliamo modificare il tipo
del campo TITOLO_STUDIO che è un CHAR(30) in CHAR(60):
ALTER TABLE DIRIGENTI
MODIFY TITOLO_STUDIO CHAR(60);
Modificare l’opzione NOT NULL:
L’opzione MODIFY può anche essere utilizzata per cambiare l’opzione di
un campo da NOT NULL a NULL; vediamo un esempio:
Supponiamo che vogliamo cambiare l’opzione del campo ID_DIRIGENTE
da NOT NULL a NULL
ALTER TABLE DIRIGENTI
MODIFY ID_DIRIGENTE CHAR(3) NULL;
è possibile anche effettuare l’operazione inversa, ovvero modificare
l’opzione NULL di un campo in NOT NULL a patto però che in quella
colonna non appaiono valori nulli.
UNIQUE e PRIMARY KEY
due forme:
- nella definizione di un attributo,
se forma da solo la chiave
- come elemento separato
ESEMPIO
Matricola CHAR(6) PRIMARY KEY
Matricola CHAR(6),
…,
PRIMARY KEY (Matricola)
Nome CHAR(20) NOT NULL,
Cognome CHAR(20) NOT NULL,
UNIQUE (Cognome,Nome),
Nome CHAR(20) NOT NULL UNIQUE,
Cognome CHAR(20) NOT NULL UNIQUE,
Vincoli interrelazionali
REFERENCES e FOREIGN KEY
permettono di definire vincoli di
integrità referenziale
due sintassi
- per singoli attributi
- su più attributi
CREATE TABLE Infrazioni(
Codice CHAR(6) PRIMARY KEY,
Data DATE NOT NULL,
Vigile INTEGER NOT NULL
REFERENCES Vigili(Matricola),
Provincia CHAR(2),
Numero CHAR(6) ,
FOREIGN KEY(Provincia, Numero)
REFERENCES Auto(Provincia, Numero))
Modifica tabella - Inserire chiavi primarie
A volte nasce la necessità di dichiarare un particolare
campo di una tabella, chiave primaria.
ALTER TABLE nome_tabella
ADD CONSTRAINT nome_chiave PRIMARY
KEY (nome_campo);
Modifica tabella - Aggiungere chiavi esterne
La necessità di aggiungere chiavi esterne è
abbastanza frequente.
ALTER TABLE nome_tabella
ADD CONSTRAINT nome_chiave FOREIGN KEY
(nome_campo)
REFERENCES nome_tabella_master;
Operazioni di aggiornamento
- operano su una o più ennuple di
una relazione
- sulla base di una condizione
anche complessa
Inserimento
INSERT INTO Tabella [ ( Attributi ) ]
VALUES( Valori )
INSERT INTO Persone
VALUES('Mario',25,52)
INSERT INTO
Persone(Nome, Eta, Reddito)
VALUES('Pino',25,52)
INSERT INTO Persone SET
Nome=‘Lino’,
Reddito=55,
Eta=25
Eliminazione di ennuple
DELETE FROM Tabella
[ WHERE Condizione ]
DELETE FROM Persone
WHERE Eta < 35
DELETE FROM Paternita
Truncate Paternita
Modifica di ennuple
UPDATE NomeTabella
SET Attributo = < Espressione |
SELECT … |
NULL |
DEFAULT >
[ WHERE Condizione ]
UPDATE Persone SET Reddito = 45
WHERE Nome = 'Piero‘
UPDATE Persone
SET Reddito = Reddito * 1.1
WHERE Eta < 30
UPDATE Person
SET given_names = 'Stefano'
WHERE surname = 'Spaccapietra'
DROP TABLE
Questa istruzione serve per eliminare
completamente una tabella dal database.
Questa istruzione è particolarmente
pericolosa.
DROP TABLE DIRIGENTI;
Il comando non chiede conferma dell’utente
ed elimina definitivamente la tabella.
SQL, operazioni sui dati
interrogazione:
SELECT
Istruzione SELECT
SELECT Lista Attributi
FROM Lista Tabelle
[ WHERE Condizione ]
- "target list"
- clausola FROM
- clausola WHERE
Selezione e proiezione
- Nome e reddito delle persone con
meno di trenta anni
select nome, reddito
from persone
where eta < 30
SELECT, abbreviazioni
select nome, reddito
from persone
where eta < 30
select p.nome, p.reddito as entrate
from persone p
where p.eta < 30
SELECT
select nome, eta, reddito
from persone
where eta < 30
select *
from persone
where eta < 30
Espressioni nella target list
select Reddito/2 as
RedditoSemestrale
from Persone
where Nome = 'Luigi‘
RedditoSemestrale
20
Condizione “LIKE”
Le persone che hanno un nome
che inizia per 'A' e ha una 'd'
come terza lettera
select *
from persone
where nome like 'A_d%'
Gestione dei valori nulli
Gli impiegati la cui età è o
potrebbe essere maggiore di 40
select *
from impiegati
where eta > 40 or eta is null
Maternita Madre Figlio
Luisa Maria
Luisa Luigi
Anna Olga
Paternita Padre Figlio
Sergio Franco
Luigi Maria
Luigi Olga
Persone Nome Eta Reddito
Andrea 21 21
Olga 33 23
Franco 50 58
Selezione, proiezione e join
I padri di persone che
guadagnano più di venti milioni
select distinct padre
from persone, paternita
where figlio = nome and
reddito > 20
INNER JOIN
LEFT JOIN
RIGHT JOIN
INNER JOIN
select distinct padre
from persone INNER JOIN
paternita
on figlio = nome
where reddito > 20
LEFT JOIN
select distinct padre
from persone LEFT JOIN paternita
on figlio = nome
where reddito > 20
Join naturale
Padre e madre di ogni persona
paternita JOIN maternita
select paternita.figlio,padre,
madre
from maternita, paternita
where paternita.figlio =
maternita.figlio
Join complessi
Le persone che guadagnano più
dei rispettivi padri; mostrare
nome, reddito e reddito del padre
select f.nome, f.reddito, p.reddito
from persone p, paternita, persone f
where p.nome = padre and
figlio = f.nome and
f.reddito > p.reddito