Linguaggio SQL
Linguaggi per database
• La diffusione del modello relazionale ha favorito l’uso
prevalente di linguaggi non procedurali: in questo modo
l’utente non ha la necessità di conoscere né le modalità con
le quali le informazioni sono state fisicamente registrate,
né i cammini per ritrovare le informazioni contenute nella
base di dati. Le informazioni vengono ritrovate
effettuando interrogazioni e controllando il valore di
verità di determinate condizioni, senza indicare le
operazioni necessarie per arrivare alle registrazioni
richieste. Si parla allora di linguaggio per basi di dati,
intendendo un insieme completo di comandi che consente e
facilita le operazioni di definizione e di manipolazione del
database.
IL LINGUAGGIO SQL
 Il linguaggio SQL (Structured Query Language)
è un linguaggio non procedurale o di tipo
dichiarativo, ed è ormai da tempo uno degli
standard tra i linguaggi per le basi di dati
relazionali.
 Diverse versioni, che sono aderenti agli
standard internazionali ANSI e
successivamente ISO.
 Tutte si rifanno alla versione dello standard
adottato nel 1992, detto SQL-2 o SQL-92 e al
successivo standard, indicato con SQL-3,
pubblicato nel 1999.
IL LINGUAGGIO SQL
• Assolve alle funzioni di:
 DDL (Data Definition Language): linguaggio per la definizione
della struttura delle relazioni della base di dati; serve quindi
per la descrizione dei dati, a creare tabelle, vincoli, ecc.
 DML (Data Manipulation Language): linguaggio per il
trattamento (o manipolazione) dei dati contenuti nel
database. In particolare consente le inserimenti, modifiche o
cancellazioni di tuple.
 DCL (Data Control Language): linguaggio per fissare i vincoli di
integrità, per stabilire le autorizzazioni agli accessi e i tipi di
permessi consentiti agli utenti (inserimento di nuovi dati, sola
lettura, modifica dei dati).
 Query Language: linguaggio per le interrogazioni alla base di
dati, che consente il ritrovamento dei dati che interessano,
sulla base dei criteri di ricerca richiesti dall’utente.
Concetti fondamentali:
Sql non distingue tra lettere minuscole e maiuscole nelle
parole chiavi delle istruzioni e nemmeno nei nomi di
tabelle, colonne e altri oggetti.
Gli identificatori utilizzati per i nomi delle tabelle e
degli attributi devono:
• avere lunghezza massima pari a 18 caratteri;
•iniziare con una lettera;
•contenere come unico carattere speciale il trattino
basso.
Concetti fondamentali:
 L’Sql standard prevede la possibilità di
inserire commenti (--)
 Nella terminologia SQL le relazioni sono
chiamate tabelle, le tuple righe o registrazioni
e gli attributi sono le colonne delle tabelle.
 Per riferirsi a un attributo di una tabella si
utilizza la seguente notazione:
Nometabella.Nomeattributo
TIPI DI DATI
I tipi di dato utilizzati per gli attributi sono:
Stringhe
Valori numerici
Informazioni data/orario
N.B: Occorre osservare che alcune versioni di Sql
in specifici ambienti DBMS differiscono dallo
standard nell’indicazione dei tipi di dati.
 Stringhe:
•
Variabili
•
Costanti
Apici singoli o doppi
 Valori numerici
(P=precisione ossia numero massimo di cifre ,S=scala ossia numero di
cifre dopo il punto decimale)
•Decimal
decimal(p,s) 1<=p<=45, 0<=s<=p
•Integer
intero con p=10 (da –2.147483.648 a 2.147483.647)
•Smallint
intero con p=5 (da –32768 a 32767)
•Float
•Real
•Double precision
numeri reali a virgola mobile
 Data/orario
•
DATE data nella forma MM/GG/AA
•
TIME Ora nella forma HH:MM
Operatori ed espressioni
Operatori aritmetici
Operatori relazionali
Operatori logici
Istruzioni del DDL di SQL
Creare un DataBase
Creare una tabella
Vincoli interni alla tabella
 Not null (non ammissibilità dei valori indefiniti)
 Unique(nomeattributo), indica che il dato deve essere unico
in ogni riga
 Primary key (nomeattributo), permette di identificare
ciascuna riga
osservazione: questo vincolo stabilisce che i dati non
possono essere ne doppi ne indefiniti)
Check(condizione) che indica un vincolo
interno alla tabella
 esempio:
CREATE TABLE Studenti(
Matricola
CHAR(5) NOT NULL,
Nome
CHAR (30) NOT NULL,
Cognome
CHAR (30) NOT NULL,
Datanascita
DATE,
Sezione
CHAR (1) NOT NULL,
Classe
CHAR (1) NOT NULL,
Eta
INTEGER NOT NULL,
PRIMARY KEY (Matricola)
);
Vincoli esterni alla tabella
Integrità referenziale, cioè attributi che possono assumere
soltanto dei valori specificati in un'altra tabella. SQL permette di
utilizzare questa regola tramite un apposito costrutto, foreign key
(chiave esterna): si crea un collegamento tra gli attributi della
tabella che state creando con un insieme di attributi di una tabella
già esistente.
CREATE TABLE Dipartimenti(
CodiceDip smallint PRIMARY KEY,
Descrizione char(15) NOT NULL,
Sede char(10));
CREATE TABLE Impiegati(
Matricola smallint PRIMARY KEY,
Cognome char(30) NOT NULL,
Nome char(30) NOT NULL,
Residenza char(30) ,
DipartID smallint NOT NULL,
FOREIGN KEY(DipartID) REFERENCES Dipartimenti (CodiceDip));
Ulteriori comandi
CREATE TABLE Impiegati(
ID smallint PRIMARY KEY,
Cognome char(30) NOT NULL,
Nome char(30) NOT NULL,
Residenza char(30) ,
Fkdipart char(5) NOT NULL,
FOREIGN KEY(Fkdipart) REFERENCES Dipartimenti (CodiceDip),
On Delete set null,
On Update cascade
);
La dichiarazione On Delete set null, serve per eliminare i record
correlati a catena, mentre On Update cascade, permette di
aggiornare campi collegati.
Ad esempio se nella tabella Dipartimenti viene eliminato un record, con
esso viene eliminata anche la sua chiave primaria e tutti i record
nella tabella Impiegati correlati con esso, avranno il valore null nella
chiave esterna.
•
Ulteriori comandi
In alternativa alle dichiarazione On Delete set null, e On Update
cascade, si possono utilizzare On Delete no action, e On Update no
action, che impediscono di cancellare un record della tabella
Dipartimenti correlato alla chiave esterna di Impiegati o di
modificare il valore della chiave primaria di un Dipartimento.
Se nella clausola FOREIGN KEY non appaiono dichiarazioni, il
comportamento del sistema per garantire l’integrità referenziale è
del tipo no action.
Modifica della struttura della tabella

Aggiunta di nuove colonne
ALTER TABLE nometab
ADD nomecol tipocol;
 Eliminazione di colonne esistenti
ALTER TABLE nometab
DROP nomecol;
Eliminazione di una tabella
DROP TABLE nometab;
Istruzioni del DML di SQL
Inserimento, modifica e eliminazione dei dati
 Inserimento
INSERT INTO nometab
(col1, col2, … coln)
VALUES (val1, val2, …, valn);
Esempio:
INSERT INTO Studenti(Matricola, Nome, Cognome, Sezione, Classe)
VALUES (‘23434’, ‘Mario’, ‘Bianchi’, ‘A’, ‘1’);
 Modifica
UPDATE nometab
SET nomecol1 = valore
WHERE (condizione);
Esempio
UPDATE Dipartimenti
SET Sede = ‘roma’
WHERE (CodiceDip = ‘23434’) ;
 Eliminazione
DELETE FROM nometab
WHERE condizione;
Se la condizione non viene indicata si cancellano tutte le righe!!