Lo Standard SQL: DDL, DML e DCL per la gestione dei database

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

Lo Standard SQL
Structured Query Language

Visualizza gratis il Pdf completo

Registrati per accedere all’intero documento e trasformarlo con l’AI.

Anteprima

Lo Standard SQL

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.

Funzioni del linguaggio SQL

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

Sintassi del linguaggio di programmazione

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

Blocchi e simboli nella sintassi SQL

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 in SQL

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.

Terminologia SQL e operatori

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).

Domini dei dati in SQL

Domini carattere

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.

Domini numerici esatti

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

Domini numerici approssimati

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.

Domini temporali

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

DOMINI BOOLEANI boolean Tipo booleano Esempi di valori booleani: TRUE, FALSE 't', 'f' 'true', 'false' 'yes', 'no'

Campi di incremento automatico

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.

Creare e selezionare un nuovo DB

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;

Creare una tabella e vincoli di integrità

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.

Vincoli per un singolo attributo

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

Clausola CHECK

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:

  • <Attributo> IN (<Valore1>, ... , <ValoreN>) Richiede che il valore di <Attributo> sia tra quelli specificati da <Valore1>, ... , <ValoreN>
  • <Attributo> BETWEEN <Min> AND <Max> Richiede che il valore di <Attributo> sia compreso tra i valori <Min> e <Max>
  • <Attributo> NOT BETWEEN <Min> AND <Max> Richiede che il valore di <Attributo> non sia compreso tra i valori <Min> e <Max>
  • <Attributo> LIKE <Espressione1> Richiede che il valore di <Attributo> assuma il formato specificato da <Espressione1>
  • <Attributo> NOT LIKE <Espressione1> Richiede che il valore di <Attributo> non assuma il formato specificato da <Espressione1>

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.

Esempio di creazione tabella AZIENDA

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) );

Non hai trovato quello che cercavi?

Esplora altri argomenti nella Algor library o crea direttamente i tuoi materiali con l’AI.