Slide dall'Università su Lo Standard SQL. Il Pdf è una presentazione che introduce lo Standard SQL, spiegando le sue componenti principali come DDL, DML e DCL. Il materiale, adatto per l'università e la materia Informatica, include esempi pratici di creazione di tabelle con vincoli di integrità.
Mostra di più69 pagine


Visualizza gratis il Pdf completo
Registrati per accedere all’intero documento e trasformarlo con l’AI.
Lo Standard SQL Structured Query LanguageSTANDARD SQL DDL-DML-DCL Operazione di inserimento Operazioni di aggiornamento InterrogazioniIl linguaggio SQL (Structured Query Language), di tipo non procedurale (o dichiarativo), è il linguaggio standard per creare, manipolare e interrogare database relazionali (come ad esempio, Microsoft Access, Oracle, Microsoft SQL Server, Informix, MySQL e così via). È presente in diverse versioni o dialetti, che sono in genere aderenti agli standard internazionali ANSI (American National Standards Organization) e ISO, (International Standards Organization) Tutte comunque si rifanno alla versione dello standard adottata nel 1992, detta SQL-2 o SQL-92.
Il linguaggio SQL assolve alle funzioni di: DDL (Data Definition Language), che prevede le istruzioni per definire la struttura delle relazioni della base di dati. Serve quindi a creare tabelle, vincoli, viste e così via; DML (Data Manipulation Language), che prevede le istruzioni per manipolare i dati contenuti nelle diverse tabelle; in particolare permette inserimenti cancellazioni e modifiche delle righe delle tabelle. nonche di effettuare interrogazioni sulle basi di dati DCL (Data Control Language), che prevede istruzioni per controllare il modo in cui le operazioni vengono eseguite; consente di gestire il controllo degli accessi per più utenti e i permessi per gli utenti autorizzati
Per descrivere la sintassi di un linguaggio di programmazione ci si serve generalmente di un formalismo molto usato: la BNF (Backus-Naur Form) o Forma Normale di Backus Nel corso della nostra trattazione impiegheremo solo alcuni simboli propri della BNF e pochissime regole. In particolare. adotteremo le seguenti convenzioni: le parole chiave del linguaggio sono scritte (nei listati) in GRASSETTO ;. le parole racchiuse tra parentesi angolari(< >) rappresentano categorie sintattiche, ossia elementi generali del linguaggio che, negli specifici programmi, saranno sostituiti con opportune occorrenze. Per esempio la scrittura: WHERE <Attributo> <Operatore> <valore> Significa che lasciamo la parola chiave WHERE e mettiamo al posto di <Attributo> <Operatore> <valore> le opportune categorie sintattiche ad esempio: WHERE Stipendio = 65000
I blocchi racchiusi dentro parentesi quadre [ ] indicano l'opzionalità, ossia tali blocchi possono non essere presenti. Per esempio: SELECT [DISTINCT] <Attributo1>, <Attributo2>, .... , <AttributoN> indica che la parola chiave DISTINCT può non esserci ma se c'è va posta esattamente dopo SELECT. I blocchi racchiusi da parentesi graffe } indicano possibilità di ripetizione, ad esempio: SELECT [DISTINCT] {, <Attributo1>} Indica che possiamo inserire più attributi separati da virgola. Il simbolo| ha significato di OR quindi quando è posto tra le parole di una lista significa che possiamo sceglierne solo una.
Identificatori e dati SQL non è un linguaggio case-sensitive, pertanto le istruzioni possono essere scritte utilizzando indifferentemente caratteri maiuscoli o minuscoli. Le istruzioni vengono generalmente separate dal punto e virgola ';' ma questo non accade per tutte le versioni. Per garantire la migliore leggibilità, utilizzeremo caratteri maiuscoli per le parole chiave e per le tabelle. Gli identificatori utilizzati per i nomi delle tabelle e degli attributi devono: avere una lunghezza massima di 18 caratteri; iniziare con una lettera; contenere come unico carattere speciale l'underscore '_' che in molte versioni, comunque, può creare problemi quando si usano le espressioni regolari.
Nella terminologia SQL: > le relazioni sono chiamate tabelle; > le tuple sono chiamate righe o record; > gli attributi sono le colonne delle tabelle. I tipi di dato o domini li elenchiamo nelle tabelle seguenti. Le costanti di tipo stringa possono essere rappresentate racchiuse fra apici o doppi apici indifferentemente. Nelle espressioni possono essere usati i seguenti operatori: > aritmetici (+, -, /, *); > relazionali (<, >, <= (minore o uguale), >= (maggiore o uguale),<> (diverso)); > logici (AND, OR, NOT). I confronti tra dati numerici sono effettuati in base al loro valore algebrico. I confronti tra dati alfanumerici sono effettuati in base al valore del codice ASCII dei caratteri che li compongono, cominciando dal carattere più a sinistra (se si tratta di stringhe di più caratteri).
Dominio Descrizione char(n) Stringhe di n caratteri (lunghezza fissa). A stringhe più corte sono aggiunti spazi in coda. DOMINI CARATTERE char Sinonimo di char(1). varchar(n) Stringhe di al più n caratteri.
smallint Intero. 2 byte, range [-215; 215 -1]. integer Intero. 4 byte, range [-231; 231 -1]. numeric(prec,scala) Per calcoli esatti fino a 1000 cifre significative. scala è il numero di cifre dopo la virgola. prec è il numero di cifre significative. Esempio: 22,4454 ha precisione 6 e scala 4. Gli interi hanno scala 0. numeric Memorizza numeri decimali fino alla precisione massima consentita dall'implementazione, e assume scala 0. decimal(prec,scala) Come numeric(prec,scala) ma assume che prec sia limite inferiore alla precisione. DOMINI NUMERICI: TIPI NUMERICI ESATTI
real Numeri in virgola mobile. Tipicamente nel range [10-37; 1037], con almeno 6 cifre corrette. DOMINI NUMERICI: TIPI NUMERICI APPROSSIMATI double precision Numeri in virgola mobile. Tipicamente nel range [10-307; 10307], con almeno 15 cifre corrette. float(prec) prec specifica la precisione minima accettabile come numero di cifre binarie.
timestamp Data e ora Esempio: '25-may-2014 11:15:48' date Data Esempio: (formato raccomandabile 'anno-mese-giorno') '2014-02-10' time Ora Esempio: '2.25 am' interval Intervalli di tempo Esempio: '1 day 12 hours 50 min 10 sec ago' DOMINI TEMPORALI
DOMINI BOOLEANI boolean Tipo booleano Esempi di valori booleani: TRUE, FALSE 't', 'f' 'true', 'false' 'yes', 'no'
auto_increment Campi di incremento automatico vengono utilizzati per i valori di generazione automatica di una particolare colonna ogni volta che viene inserita una nuova riga. Molto spesso la chiave primaria di una tabella deve essere creata automaticamente; definiamo quel campo come campo che si incrementa automaticamente.
Per creare un nuovo database utilizzeremo il comando CREATE DATABASE, la cui sintassi è: CREATE DATABASE <NomeDatabase> [AUTHORIZATION <Proprietario> ]; Questo comando crea un nuovo database di nome <NomeDatabase> ed eventualmente specifica in <Proprietario> il nome dell'utente proprietario, cioè dell'utente che possiede i privilegi di accesso e che, come tale, è l'unico a poter svolgere determinate azioni sul database. Se non viene specificata la clausola AUTHORIZATION si suppone che il nome del proprietario sia quello dell'utente collegato in quel momento. Ad esempio: CREATE DATABASE Negozio AUTHORIZATION Venditore; crea un nuovo database di nome Negozio e assegna i privilegi di accesso all'utente Venditore. Per impartire i comandi SQL per uno specifico database occorre prima selezionare quest'ultimo utilizzando il comando USE, la cui sintassi è: USE <NomeDatabase>; e riferendoci alla tabella precedente: USE Negozio;
Per creare una tabella si utilizza la seguente sintassi: CREATE TABLE <nometabella> (<Attributo1> <Tipo1> [<VincoloAttributo1> ], <Attributo2> <Tipo2> [<VincoloAttributo2>], <AttributoN> <TipoN> [<VincoloAttributoN> ], [<VincoloTabella>]); Nella definizione di una tabella sono presenti vincoli: · per un singolo attributo; · per un gruppo di attributi, detti vincoli di n-upla; · per l'integrità referenziale.
I vincoli per un singolo attributo (detti vincoli di dominio) impostano limitazioni da specificare sui valori di un singolo attributo. Possono essere impostati attraverso le seguenti clausole: NOT NULL: se presente, richiede che il corrispondente attributo debba necessariamente avere un valore e quindi non possa rimanere "non specificato" (valore NULL). Ad esempio: Stipendio DECIMAL(8,3) NOT NULL DEFAULT <ValoreDiDefault>: assegna all'attributo il valore di default (cioè predefinito) specificato in <ValoreDiDefault>. Ad esempio: Stipendio DECIMAL(8,3) DEFAULT 0
CHECK(<Condizione>): serve per specificare un vincolo qualsiasi che riguarda il valore di un attributo. Ad esempio: CHECK(Stipendio > 1000) impedisce che il valore di Stipendio sia inferiore a 1000. All'interno di CHECK è possibile utilizzare, oltre agli operatori di confronto, anche gli operatori in tabella:
Ad esempio, per richiedere che l'attributo Stipendio sia uguale a uno dei valori 1500, 2000, 2500 e 3000, scriveremo: CHECK(Stipendio IN(1500, 2000, 2500, 3000)) Per specificare che l'attributo Stipendio sia compreso tra 1500 e 3000 scriveremo: CHECK(Stipendio BETWEEN 1500 AND 3000) Per specificare che l'attributo CodiceArticolo inizi con Cod scriveremo: CHECK(CodiceArticolo LIKE "(Cod%"') Il carattere % (carattere jolly ) rappresenta una sequenza di zero o più caratteri.
Esercizio: Consideriamo la seguente relazione: AZIENDA (CodAzienda, RagioneSociale, Fatturato, NumDipendenti) Creiamo la relativa tabella imponendo i seguenti vincoli: · i valori degli attributi CodAzienda, RagioneSociale e NumDipendenti devono essere sempre presenti; · il valore di default del Fatturato è 1000000; · il numero dei dipendenti NumDipendenti deve essere compreso tra 5 e 200. CREATE TABLE AZIENDA ( CodAzienda CHAR(5) NOT NULL, RagioneSociale CHAR(30) NOT NULL, Vincoli su attributi Fatturato NUMERIC(9,2) DEFAULT 1000000.00, NumDipendenti INTEGER, NOT NULL, CHECK ( NumDipendenti BETWEEN 5 AND 200) );