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!!