SQL (Structured Query Language) Alice Pavarani Caratteristiche generali del linguaggio Linguaggio non procedurale (dichiarativo) Autoesplicativo e “intuitivo” Linguaggio standardizzato per la gestione di database relazionali Creare e modificare lo schema Gestire la memorizzazione in sistemi basati sul modello relazionale Manipolare i dati (inserire, modificare, cancellare) Controllare i permessi di accesso ai dati Interrogare ed elaborare i dati V B - Sistemi Informativi Aziendali Un po’ di storia… IBM (1974) nasce SEQUEL, linguaggio usato come strumento per lavorare con DB relazionali IBM (1981) iniziò a vendere prodotti relazionali Si diffuse rapidamente anche tra altre società IBM (1983) rilascia DB2, il DBMS ufficiale di IBM SQL diviene lo standard industriale per i database basati sul modello relazionale 1986 adottato da ANSI (American National Standards Institute) 1987 adottato da ISO (Internetional Standards Organization) Versioni di SQL: SQL-Base (SQL/86, SQL/89) SQL2 (SQL/92) SQL3 (SQL/99 – SQL/2008) Obiettivo della standardizzazione: creare un linguaggio che funzionasse su tutti i DBMS relazionali V B - Sistemi Informativi Aziendali SQL/86 SQL in Access Modalità QBE (Query by Example) Per imparare il linguaggio è molto utile passare dalla modalità QBE alla visualizzazione del codice SQL Il linguaggio SQL è di grande importanza anche se si sviluppano database direttamente con Access: La sola modalità QBE è limitante: ci sono interrogazioni che non si riescono a realizzare Le interrogazioni annidate si realizzano inserendo nella modalità QBE dei comandi SQL tra i criteri La creazione di maschere con caselle combinate necessita di un’interrogazione SQL Spesso è più facile modificare e controllare il codice SQL piuttosto che la versione QBE originale V B - Sistemi Informativi Aziendali Linguaggi “dentro” SQL DDL (Data Definition Language, linguaggio di definizione dei dati) permette di descrivere la struttura delle tabelle DMCL (Device Media Control Language, linguaggio per il controllo dei supporti di memorizzazione) consente di far corrispondere il modello logico (DDL) con il supporto fisico su cui conservare i dati DML (Data Manipulation Language, linguaggio per la manipolazione dei dati) permette di eseguire operazioni di manipolazione sui dati, quali: inserimento, modifica e cancellazione DCL (Data Control Language, linguaggio di controllo dei dati) consente di definire i limiti sui dati (permessi di accesso, vincoli di integrità, ecc…) QL (Query Language, linguaggio di interrogazione) utilizzato per interrogare ed elaborare la base di dati, al fine di estrapolare dati in risposta alle richieste dell’utente V B - Sistemi Informativi Aziendali Identificatori in SQL Identificatori (nomi di tabelle ed attributi) Sequenze di caratteri, iniziano con una lettera Possono contenere il carattere speciale “_” Lunghezza massima di 18 caratteri Attributi Notazione standard: NomeTabella.NomeAttributo NOTA: Il nome della tabella può essere omesso se non ci sono ambiguità V B - Sistemi Informativi Aziendali Il delimitatore per le stringhe (e spesso anche per le date) è ‘ (apice singolo) Tipi di dato standard Per i dati numerici la precisione p indica il numero massimo di cifre che il numero può contenere (escluso il punto decimale e il segno) Tipo di dato Descrizione Valori BOOLEAN Valore logico True, False CHARACTER(n) Stringa di lunghezza n default n =1 CHAR(n) VARCHAR(n) Stringa variabile di lung n n obbligatorio non c’è blank padding DATE Data MM/GG/AA TIME Ora HH:MM INTEGER(p) Numero intero p da 1 a 45 SMALLINT Numero intero (p = 5) da -32768 a 32767 INTEGER Numero intero (p = 10) da -2^31 a 2^31-1 DECIMAL(p,s) Numero decimale con s cifre decimali p da 1 a 45 s da 0 a p NUMERIC(p,s) DEC(p,s) REAL Numero reale Dipende Singola precisione DOUBLE Numero reale Dipende Doppia precisione Dipende Precisione p FLOAT(p) NumeroAziendali reale V B - Sistemi Informativi NOTE INT(p) Operatori in SQL Operatori aritmetici + * / Operatori di confronto = != o <> > >= < <= Operatori logici AND OR NOT V B - Sistemi Informativi Aziendali Valore NULL Il valore NULL rappresenta un valore non disponibile o non definito NULL è compatibile con tutti i tipi di dato NULL non è mai uguale a nessun altro valore: È diverso dal valore 0 per i dati numerici È diverso dalla stringa vuota (‘’) per i dati alfanumerici Tutti i confronti che coinvolgono attributi con valore NULL vengono considerati sconosciuti NULL non è uguale, maggiore o minore di nessun altro valore Tutte le operazioni aritmetiche che coinvolgono il valore NULL restituiscono sempre il valore NULL Negli ordinamenti compare, di norma, all’inizio delle sequenze crescenti e alla fine delle sequenze decrescenti Il linguaggio SQL può solo controllare la presenza o l’assenza di NULL in un campo (IS NULL / IS NOT NULL) V B - Sistemi Informativi Aziendali Valore NULL (Nota Bene) Se A vale NULL : A=0 è falsa A>0 è falsa A<0 è falsa A != 0 è vera A = NULL è falsa A IS NULL è vera V B - Sistemi Informativi Aziendali Esempio di riferimento Nelle prossime lezioni sul linguaggio SQL faremo riferimento al seguente esempio: Un’azienda è articolata in un certo numero di dipartimenti. I dipendenti sono assegnati ai diversi dipartimenti che hanno a capo un manager responsabile della gestione. Un dipendente afferisce ad un solo dipartimento e non ne è necessariamente responsabile. Un dipendente può essere manager di più dipartimenti. Di ciascun impiegato si vogliono conoscere: codice identificativo, nome, cognome, residenza e stipendio. Dei dipartimenti occorre conoscere: il codice, il nome del dipartimento e il suo indirizzo. V B - Sistemi Informativi Aziendali Esempio di riferimento Progettazione Concettuale (modello ER) IDImpiegato Nome Cognome Residenza (1 , 1) LAVORA (0 , N) Codice Descrizione IMPIEGATO DIPARTIMENTO Sede Stipendio (0 , N) E’ RESPONSABILE (1 , 1) Progettazione Logica (modello relazionale) Impiegato (IDImpiegato, Nome, Cognome, Residenza, Stipendio, Dipartimento) Dipartimento (Codice, Descrizione, Sede, Manager) V B - Sistemi Informativi Aziendali Esempio di riferimento V B - Sistemi Informativi Aziendali