Sie sind auf Seite 1von 18

SQL

Introduzione
Lo sviluppo dei mezzi e delle tecniche per la registrazione di informazioni scritte, raccolte ed organizzate, accompagnato dal progetto di costruire archivi di conoscenze e di esperienze, caratterizza la storia dellumanit sin dai suoi albori, circa 5000 anni fa; le prime raccolte di informazioni registrate sumere in cuneiforme su tavolette ed egizie in geroglifico su papiro, contenevano leggi, contratti e trattati, informazioni di natura legale ed economica. I romani istituzionalizzarono i censimenti delle popolazioni e delle propriet fin dal VI secolo a. C.; immense raccolte di papiri dove erano registrati atti catastali e fiscali erano conservati in Biblioteche, tra le quali la pi grande e famosa era quella di Alessandria dEgitto, fondata nel III secolo a.C., Linvenzione della stampa port al rapido diffondersi delle pubblicazioni letterarie e delle biblioteche europee a partire dal XVI secolo: nascono giornali e periodici, monografie, atti, rapporti, brevetti, bollettini, riviste scientifichetutte espressioni diverse di raccolte di informazioni di contenuto originale. Oggi, questo patrimonio di conoscenze reso pi accessibile e gestibile, da strumenti come indici e sommari, in uso sin dal XVI secolo, che aiutano ad identificare e localizzare le informazioni dinteresse e conservandone una porzione sempre pi grande anche in versione elettronica. Il fiorire della tecnologia digitale dalla met del XX secolo ha rivoluzionato il modo di registrare e di diffondere le informazioni grazie alluso dei computer, usati per registrare testi con il proposito di ridurre i costi ed i tempi richiesti. Dalla fine degli anni 60, grazie al proliferare ed il diffondersi del progresso tecnologico anche fuori degli ambiti istituzionali tradizionali, unenorme quantit delle informazioni in formato digitale da gestire, ha posto in maniera drammatica il problema del loro utilizzo, possibile solo organizzando con sistematicit il loro insieme ed utilizzando meccanismi per ricerca e reperimento di singoli elementi dinteresse. Linsieme di dati (data set) delle rappresentazioni digitali delle informazioni in un moderno sistema sono organizzati in diverse strutture che ne facilitano la creazione, laccesso e la modifica, ottimizzando la gestione delle risorse fisiche; si compone di una o pi basi di dati, ed ogni base un insieme di file mutuamente connessi. In tal senso utile distinguere tra dati strutturati, come avviene negli elenchi e nei cataloghi, dove gli oggetti sono rappresentati da brevi stringhe di simboli e da numeri, e dati non strutturati come nei testi scritti in un linguaggio naturale o nelle immagini figurative: la scelta di una particolare struttura di dati dettata dalla ricchezza espressiva che essa consente in vista dei compiti elaborativi assegnati al sistema informativo ed ha come obiettivo principale quello di facilitare lelaborazione dei dati sulla base delle loro relazioni. Le relazioni possono essere desunte dallindice, altro file di record ordinato e sequenziale, che fornisce linformazione necessaria a localizzare parole ed espressioni nei record. I due soli tipi di struttura comunemente usati fino agli anni 70, quella gerarchica e quella reticolare, per le relazioni tra basi di dati strutturati, sono state superate dalla prepotente affermazione delle strutture relazionali il cui successo dovuto alla sua semplicit concettuale, al rigore dellalgebra relazionale ed alla disponibilit di programmi software per il trattamento delle relazioni tra i dati con logica indipendente dalla rappresentazione fisica. Laspetto che distingue i moderni sistemi informativi, vari ed in continua evoluzione, la loro dimensione digitale, che consente il trattamento veloce ed automatico di dati registrati in forma digitale e la loro traduzione da ed in formato analogico; possono essere manuali ed automatici, interattivi (on-line) e non (offline), che operano in real-time o in batch. Il crescente interesse nel trattamento dellinformazione e nei sistemi informativi ha dato vita ad un campo di studi interdisciplinare, la cui struttura in continua evoluzione, che va sotto il nome di scienza dellinformazione, dove confluiscono discipline come linformatica, le scienze cognitive, lintelligenza artificiale, lingegneria, la matematica, le scienze sociali, la linguistica e larchivistica. Sotto il profilo squisitamente tecnico, un sistema informativo un complesso di dati organizzati concettualmente in aggregati di informazioni omogenee che costituiscono le componenti del sistema informativo; ogni operazione di aggiornamento ha per oggetto un singolo aggregato mentre uninterrogazione pu coinvolgerne uno o pi. Ma un sistema informativo, seppure di caratteristiche tecniche eccellenti, non vale nulla se le informazioni in esso contenute non sono veritiere; nasce quindi il bisogno di un metalinguaggio che risolva il problema di stabilire se le informazioni riflettono lo stato reale del mondo e di verificare la corrispondenza fra le informazioni ed il modo in cui stanno realmente le cose. Il metalinguaggio oggi pi comunemente usato lo SQL, che sfrutta le basi di dati relazionali, le cui componenti, chiamate relazioni, hanno una struttura tabellare e sono identificate individualmente da un nome proprio sia nelle operazioni di aggiornamento che nelle interrogazioni. Lo Structured Query Language (SQL) fu sviluppato per un prototipo di Relational Database Management System (RDBMS), System R, da IBM nella met degli anni ' e de70 scritto da Codd nel 1976. Nel 1979 fu introdotto commercialmente da IBM DB2 e Oracle Corporation. L' American National Standards Institutes (ANSI) adotta il SQL come linguaggio standard per database relazionali nell' Ottobre 1986 (ANSI X3.132-1986). SQL stato adottato dall' Iternational Standard Organization (ISO 9075). E' stato ridescritto come ANSI SQL89 (X3.132-1986 e 9075-1989) e recentemente come ANSI SQL92. I maggiori RDBMS supportano qualche forma di SQL e vi una generale tendenza allo standard ANSI-SQL. SQL un linguaggio non procedurale, in quanto non richiede la descrizione dei passi elementari di elaborazione, viene richiesta unicamente la descrizione del risultato finale, questo comporta che il SQL pu manipolare in una unica clausola un set di dati (la forma pi comune di set di dati la relazione). Le clausole SQL accettano set di dati in input e resti-

tuiscono set di dati, consentono quindi la nidificazione delle clausole in quanto una clausola pu essere usata come input per un' clausola. altra SQL non richiede che venga specificato il metodo di accesso ai dati, utilizza una porzione del RDBMS chiamata query optimizer per determinare la via pi veloce di accesso ai dati, per l' utilizzo di eventuali indici e la determinazione dei loro tipi.

Data Definition Language (DDL)


Viene utilizzato per definire lo schema di un database. Le definizioni vengono memorizzate nel Data Dictionary che un database speciale (system database). Il DDL pu operate sia a livello esterno (view definition), sia a livello interno (tables definition e Device Control Language).

Data Manipulation Language (DML)


Viene utilizzato sia per interrogare il database sia per inserire, modificare o cancellare i dati.

Tipi di dati
Ogni costante o variabile manipolata definita da un tipo di dato che fissa un set di propriet al valore. Queste propriet permettono di trattare differentemente tipi di dato diversi. I principali tipi di dato implementati sono i seguenti: CHAR (o VARCHAR) : permette di manipolare testi in formato libero di lunghezza fissa o variabile. La massima lunghezza ammessa di 255 caratteri. Questo il tipo di dato con caratteristiche meno restrittive. NUMBER: permette di manipolare valori numerici con segno, interi o in virgola mobile, virtualmente fino ad una magnitudine di 38 cifre. DATE: permette di manipolare valori in formato data. LONG: per testi in formato libero virtualmente fino a 65535 caratteri, su cui si applicano per restrizioni di diversa natura relativamente alle clausole SQL. RAW e LONGRAW: per dati di tipo byte-oriented, come stringhe di caratteri esadecimali. ROWID: stringa esadecimale che rappresenta il codice di identificazione per ogni riga di tabella. NULL: rappresenta un valore assente ed appropriato quando il valore sconosciuto o privo di significato.

Operatori
Tutti gli operatori accettano zero o pi argomenti e restituiscono uno o pi risultati. L' ordine di precedenza quello riportato per ciascun dei gruppi e pu comunque essere modificato mediante gli operatori. Aritmetici: il loro risultato sempre un valore numerico e sono: +odenotano espressioni positive o negative. *o/ moltiplicazione, divisione. +oaddizione, sottrazione. Su caratteri: l' operatore di concatenazione di stringhe l' unico operatore su carattere ed denotato da || Comparativi: sono usati per effettuare il confronto tra espressioni ed il risultato pu essere "vero" o "falso". = test di uguaglianza. != test di disuguaglianza. > maggiore di. < minore di. >= maggiore o uguale. 3

<= IN LIKE EXIST

minore o uguale. presente in. verifica la corrispondenza di pattern di caratteri. verifica l' esistenza di una t-upla.

Logici: sono usati per influire sul risultato di multiple condizioni e sono: NOT inverte il risultato di una espressione logica. AND verifica tutte le condizioni logiche. OR verifica almeno una delle condizioni logiche. Set: sono definiti come: UNION; MINUS; INTERSECT, e corrispondono rispettivamente agli operatori di Unione, Differenza ed Intersezione dell' algebra relazionale.

Principi del linguaggio SQL


Le strutture usate in SQL, contengono i tipi di dati fondamentali sopra elencate; ogni informazione contenuta in un Data Base sar di uno di questi tipi.

I Campi
Il Campo la coppia (Nome, Tipo), in cui Nome il nome del Campo e Tipo il tipo di Dati associati al Campo. Es: La coppia (Et, Intero) un campo che servir per contenere le informazioni riguardanti allet di un individuo, mentre la coppia (Data_di_Nascita, Data) un campo che servir per contenere la data di nascita di un individuo.

Le tabelle
Nei DBMS Relazionali le strutture che contengono i dati sono chiamate tabelle. La struttura di una tabella si pu vedere come la successione (ordinata) di vari campi. Es: La successione (Cognome, Testo), (Et, Intero), (Data_di_nascita, Data) una struttura di tabella che potremmo chiamare Anagrafica. I dati contenuti in una tabella dovranno ovviamente essere del tipo corrispondente al campo che li contiene. Es: La tabella seguente corretta (vd. esempio precedente): Cognome Rossi Verdi Mentre la seguente no: Cognome Rossi Verdi Et GINO 10/1/1987 Data_di_nascita 4 CIAO Et 20 10 Data_di_nascita 01/05/1979 12/12/1989

I Record
Per semplicit chiamiamo Record le righe di una tabella

Struttura del linguaggio SQL


Il linguaggio SQL (come tutti i linguaggi per RDBMS) si divide, come prima accennato, in due sottolinguaggi: 1. DDL: Data Definition Language = Linguaggio di Definizione dei Dati 2. DML: Data Manipulation Language = Linguaggio di Manipolazione dei Dati Il primo si occupa di creare e manipolare le strutture che contengono i dati mentre il secondo si occupa di ricercare, estrarre, ordinare, aggiungere e modificare i dati.

DDL
L' istruzione CREATE TABLE serve per create tabelle. CRETE TABLE nome_tabella ( nome_colonna tipo_colonna costrizioni_colonna [, nome_colonna tipo_colonna costrizioni_colonna] [ ... ] ) nome_tabella in nome che viene dato alla tabella; nome_colonna il nome di una colonna della tabella; tipo_colonna il tipo della colonna specificata col nome_colonna e, se necessario, seguito dalla dimensione; costrizioni_colonna consentono di specificare alcune caratteristiche della colonna considerata: o NOT NULL significa che la colonna considerata non pu assumere valore nullo, o CONSTRAINT nome_constraint_colonna UNIQUE (nome_colonna) significa che la costrizione nome_constraint_colonna identifica la colonna nome_colonna in cui i dati contenuti devono essere unici, cio non ci possono essere due tuple della tabella con lo stesso valore nella colonna nome_colonna, o CONSTRAINT nome_primary_key_colonna PRIMARY KEY (nome_colonna) significa che la costrizione nome_primary_key_colonna identifica la colonna nome_colonna come una chiave primaria, o CONSTRAINT nome_foreign_key_colonna FOREIGN KEY (nome_colonna) significa che la costrizione nome_foreign_key_colonna identifica la colonna nome_colonna come una foreign key.

L' istruzione CREATE INDEX serve per create indici sulle tabelle. La sintassi la seguente: CREATE [UNIQUE] INDEX nome_indice ON nome_tabella (lista_colonne) UNIQUE significa che l' indice creato unico, nome_indice il nome che viene attribuito all' indice, nome_tabella il nome della tabella su cui si vuole costruire l' indice, lista_colonne la lista delle colonne, separate da virgole, che costituiscono l' indice.

L' istruzione CREATE VIEW serve per create viste sulle tabelle, cio tabelle logiche che consente di presentare, in un modo alternativo, le informazioni contenute in una o pi tabelle o viste. CRETE VIEW nome_view [ lista_nomi_colonne ] AS subquery nome_view il nome che viene attribuito alla vista, lista_nomi_colonne la lista dei nomi delle colonne, separate da virgole, che costruiscono la vista, AS consente di costruire una subquery che estrae i dati da mettere nella vista. __________________________________________

Istruzione ALTER L' istruzione ALTER TABLE serve per modificare la definizione di una tabella. ALTER TABLE nome_tabella [ ADD nome_colonna tipo_colonna [costrizioni_colonna] [, nome_colonna tipo_colonna [costrizioni_colonna] ] [, ...] ] [ DROP clausole_drop] nome_tabella in nome che viene dato alla tabella; ADD serve per aggiungere colonne alla tabella: o nome_colonna il nome di una colonna della tabella; o tipo_colonna il tipo della colonna specificata col nome_colonna e, se necessario, seguito dalla dimensione; o costrizioni_colonna consentono di specificare alcune caratteristiche della colonna viste durante la creazione delle tabelle; DROP consente di cancellare una colonna od delle costrizioni su una colonna a seconda di ci che contenuto nella clausole_drop. Istruzione DROP L' istruzione DROP TABLE serve per cancellare una tabella esistente. L' istruzione : DROP TABLE nome_tabella L' istruzione DROP INDEX serve per cancellare un indice su una tabella. L' istruzione : DROP INDEX nome_indice L' istruzione DROP VIEW serve per cancellare una vista esistente. L' istruzione : DROP VIEW nome_view Istruzione INSERT L' istruzione INSERT serve per aggiungere nuove righe in una tabella o in una vista basata su tabelle. L' istruzione : INSERT INTO {nome_tabella | nome_vista} [(lista_colonne)] { VALUES (lista_valori) | subquery} necessario mettere il nome della tabella od il nome della vista in cui fare l' inserimento; lista_colonne la lista delle colonne in cui dovranno essere inseriti i nuovi valori, importante l' ordine; se non viene messa tale lista, i valori inseriti vengono messi nelle colonne nell' ordine in cui queste ultime sono state definite durante la creazione della tabella; i valori inseriti possono essere elencati esplicitamente nella lista_valori o attraverso una subquery. Istruzione UPDATE L' istruzione UPDATE serve per cambiare valori esistenti in una tabella o in una vista. UPDATE {nome_tabella | nome_vista} SET nome_colonna = {espressione | subquery} [, nome_colonna = {espressione | subquery}] [, ...] [WHERE condizione] necessario mettere il nome della tabella od il nome della vista in cui aggiornare i dati; nome_colonna il nome della colonna a cui si associa un nuovo valore ottenuto come risultato di un' espressione o di una subquery posta a destra del segno di uguaglianza; possibile mettere condizioni sulle tuple da aggiornare usando la clausola WHERE. 6

Istruzione DELETE L' istruzione DELETE serve per cancellare righe da una tabella o da una vista. DELETE FROM {nome_tabella | nome_vista} [WHERE condizione] necessario mettere il nome di una tabella od il nome di una vista; si usa la clausola WHERE se si vogliono cancellare solo righe che soddisfano certe condizioni. Il proprietario di un oggetto pu accordare privilegi su di esso ad altri utenti tramite l' istruzione GRANT. Istruzione REVOKE L' istruzione REVOKE serve per revocare i privilegi sugli oggetti agli utenti.

DML
Segue ora un elenco dei comandi SQL-DML pi usati. Le clausole SQL sono in formato libero e basano la loro sintassi sull' di parole chiave. uso I l co ma n d o S E LE CT Il comando SELECT serve per estrarre dati da una tabella, in pratica vengono estratte tutte e solo le righe da una tabella che soddisfano una certa condizione. Sintassi SELECT {Campo1, Campo2, } FROM {Tabella 1} WHERE {Condizione1 AND|OR Condizione2 AND|OR } Es: Sia la tabella Anagrafica Cognome Verdi Rossi Bianchi Cognome Rossi La sintassi vista finora del comando SELECT permette interrogazioni molto semplici, spesso si cercano dati in maniera molto pi complessa, come quando sono presenti relazioni fra tabelle. A tal proposito, la clausola WHERE un po pi complessa: W HE RE Il WHERE del comando SELECT pu essere inserita una qualsiasi espressione booleana che sia calcolabile, ovviamente nel risultato della query verranno inserite tutte e sole le righe della tabella che rendono vera lespressione che segue la clausola WHERE (chiamata Where Condition) AL L ALL significa che vengono restituite tutte le tuple ottenute dall' interrogazione; in genere, ALL di default. DI ST I N CT DISTINCT significa che restituisce solo le tuple che sono uniche nel risultato, cio produce una "relazione" e non solamente una "tabella". Nella lista_scelte sono contenute quali informazioni devono essere fornite in uscita che possono essere: Asterisco (*) che rappresenta tutte le colonne di ogni tabella presente nella clausola FROM, nell' ordine in cui sono state definite nelle tabelle e secondo l' ordine in cui sono listate le tabelle nella clausola FROM. Et 15 25 85

La query : SELECT Cognome FROM Anagrafica WHERE Et=25 d come risultato:

Una lista di nomi di colonne, specificate nell' ordine in cui si vogliono vedere; se la lista_scelte contiene nomi di colonne multiple, esse devono essere separate da virgole. Una o pi espressioni che possono essere: nomi di colonna (o campo), costanti, funzioni o combinazioni di nomi di colonne, costanti, e funzioni connesse tra loro attraverso operatori, o subquery (query innestate).

Es: Sia la tabella Dipendenti: Cognome Rossi Verdi Bianchi Gialli Rossi Nome Mario Giorgina Paolo Loredana Giorgio Et 40 20 50 35 46 Data_assunzione 10/5/1995 1/3/1999 1/6/1975 24/9/1989 15/7/1979

La query SELECT * FROM Dipendenti WHERE True ritorna tutta la tabella, mentre la query SELECT * FROM Dipendenti WHERE False non ritorna nulla. La query SELECT Cognome FROM Dipendenti WHERE Et>35 AND (Cognome=Rossi OR Nome Like Paolo) AND Et<>46 ritorna solamente le seguenti righe: Cognome Rossi Bianchi Nome Mario Paolo Et 40 50 Data_assunzione 10/5/1995 1/6/1975

Dopo la where condition possono essere presenti ancora alcuni comandi: OR DE R B Y { Ca mp o 1 , C a mp o 2 , } [ AS C | DE S C] GR OUP B Y H AVI N G Ordinamento OR DE R B Y { Ca mp o 1 , C a mp o 2 , } [ AS C | DE S C] Il pi semplice ovviamente ORDER BY: la clausola ORDER BY consente di ottenere i risultati di uninterrogazione ordinati secondo i valori contenuti in una o pi colonne, tra quelle elencate accanto alla parola SELECT. Ordinamento crescente : ASC stringhe dalla A alla Z, numeri dal minore al maggiore. Ordinamento decrescente : DESC stringhe dalla Z alla A, numeri dal maggiore al minore. L' ordinamento crescente quello di default (non occorre specificare ASC). Es: Sia la tabella dellesempio precedente, la query: SELECT * FROM Dipendenti WHERE Et<=40 ORDER BY Cognome DESC Ritorna Cognome Verdi Rossi Gialli Nome Giorgina Mario Loredana Et 20 40 35 Data_assunzione 1/3/1999 10/5/1995 24/9/1989

Invece, non mettendo niente in fondo o mettendo ASC, la tabella veniva ordinata in ordine crescente rispetto al Cognome. Si pu ordinare anche rispetto a pi campi, i campi che vengono dopo il primo sono usati per lordinamento nel caso in cui i valori del primo sono uguali SELECT * FROM Dipendenti ORDER BY Cognome, Et Cognome Bianchi Gialli Rossi Rossi Verdi Raggruppamenti GR OUP B Y La clausola GROUP BY serve per raggruppare un insieme di righe aventi lo stesso valore nelle colonne indicate: produce una riga di risultati per ogni raggruppamento. Viene usata con le funzioni di aggregazione (Sum, Count...) : per ciascuna riga della tabella risultante viene prodotto un valore di raggruppamento. SELECT Colonna, Funzione FROM NomeTabella GROUP BY Colonna Es: Data la tabella: Movimento (Numero, Descrizione, Data, Importo, Codice) Totale degli importi dei movimenti per ciascun codice anagrafico Select Codice, Sum(Importo) From Movimento Group By Codice Condizioni sui raggruppamenti H AVI N G L' della clausola HAVING consente di sottoporre al controllo di una o pi condizioni i gruppi creati con la clausola uso Group by. La condizione scritta dopo Having normalmente controlla il valore restituito dalle funzioni di aggregazione (Count, Sum, Avg, Min, Max). SELECT Colonna, Funzione FROM NomeTabella GROUP BY Colonna HAVING Condizione Es: Data la tabella: Movimento (Numero, Descrizione, Data, Importo, Codice) Importo medio dei movimenti per i codici aventi pi di 20 movimenti registrati Select Codice, Avg(Importo) From Movimento Group By Codice Having Count(*) > 20 Attenzione alla differenza tra Where che pone condizioni sulle righe della tabella Having che controlla condizioni su gruppi di righe Nome Paolo Loredana Mario Giorgio Giorgina Et 50 35 40 46 20 Data_assunzione 1/6/1975 24/9/1989 10/5/1995 15/7/1979 1/3/1999

Le funzioni di aggregazione
sono funzioni predefinite che agiscono sui valori contenuti in insiemi di righe della tabella e restituiscono un valore calcolato. F u nz io ne CO UNT La funzione COUNT restituisce il numero di righe presenti in una tabella. Select Count (*) From NomeTabella (incluse quelle con campi di tipo Null)

Select Count (NomeAttributo) From NomeTabella

(escluse le righe che hanno valore Null nella colonna dellattributo specificato).

Es: Data la tabella: Anagrafica (Codice, Nome, Indirizzo) Numero delle persone registrate nella tabella delle anagrafiche aventi un indirizzo prefissato Select Count(*) From Anagrafica Where Indirizzo = [Quale Indirizzo] F u nz io ne SU M Restituisce la somma di tutti i valori contenuti in una colonna specificata (lattributo utilizzato nel calcolo deve essere di tipo numerico) Select Sum (NomeAttributo) From NomeTabella Es: Data la tabella: Movimento (Numero, Descrizione, Data, Importo, Codice) Importo totale dei movimenti riferiti a un codice prefissato Select Sum(Importo) From Movimento Where Codice = [Quale Codice] F u nz io ne AV G Calcola la media (average) dei valori (numerici) contenuti in una determinata colonna di una tabella. Select Avg (NomeAttributo) From NomeTabella (non include nel calcolo i valori di tipo Null presenti nella colonna)

Es: Data la tabella: Movimento (Numero, Descrizione, Data, Importo, Codice) Importo medio dei movimenti Select Avg(Importo) From Movimento F u nz io ni MI N e M AX Restituiscono rispettivamente il valore minimo e il valore massimo tra i valori della colonna specificata come argomento della funzione (anche per campi di tipo carattere). Select Min(NomeAttributo), Max(NomeAttributo) From NomeTabella (ignorano i campi con valore Null) Es: Data le tabelle: Anagrafica (Codice, Nome, Indirizzo) Movimento (Numero, Descrizione, Data, Importo, Codice) Valori minimo e massimo tra gli importi dei movimenti Select Min(Importo), Max(Importo) From Movimento Ultimo nome dellanagrafica Select Max(Nome) From Anagrafica 10

Le condizioni di ricerca
Il linguaggio SQL utilizza operatori e predicati insieme alle clausole Where e Having per determinare i criteri di selezione rispettivamente delle righe e dei raggruppamenti. Oltre agli operatori prima elencati, possibile, quindi, ricorrere alluso dei predicati di seguito elencati: P r ed ica ti : B E TW E E N, L IK E, IN BETWEEN Controlla se un valore compreso allinterno di un intervallo di valori, inclusi gli estremi. Es: Data la tabella: Movimento (Numero, Descrizione, Data, Importo, Codice) Elenco dei movimenti con importo compreso tra 100 e 200 Select * From Movimento Where Importo Between 100 And 200 IN Controlla le righe che hanno i valori di un attributo compresi in una lista di valori indicati dopo la parola In. Es: Data la tabella: Anagrafica (Codice, Nome, Indirizzo) Elenco delle anagrafiche con indirizzo Milano, Torino o Venezia Select * From Anagrafica Where Indirizzo IN (Milano, Torino, Venezia) LI KE Il predicato Like confronta il valore di un attributo di tipo carattere con un modello di stringa che pu contenere caratteri jolly : _ (underscore) per indicare un singolo carattere qualsiasi in quella posizione della stringa; % (percento) per indicare una sequenza qualsiasi di caratteri in quella posizione della stringa. Es: LIKE ' xyz%' vengono ricercate tutte le stringhe che iniziano con i caratteri xyz ; LIKE ' %xyz' serve a ricercare tutte le stringhe che finiscono con i caratteri xyz ; LIKE ' %xyz%'per tutte le stringhe che contengono al loro interno i caratteri xyz; LIKE ' _xyz' controlla le stringhe di 4 caratteri che finiscono con xyz. Es: Data la tabella: Anagrafica (Codice, Nome, Indirizzo) Elenco delle anagrafiche con nome che inizia con Ros (Rossi, Rosi, Rossini,...) Select * From Anagrafica Where Nome Like ' Ros%' Tabelle: Anagrafica (Codice, Nome, Indirizzo) Movimento (Numero, Descrizione, Data, Importo, Codice) Nome delle anagrafiche che hanno almeno 30 movimenti registrati nella tabella dei movimenti. Select Nome From Movimento, Anagrafica Where Movimento.Codice = Anagrafica.Codice Group By Nome Having Count(*) > 29

11

Tabelle: Anagrafica (Codice, Nome, Indirizzo) Movimento (Numero, Descrizione, Data, Importo, Codice) Elenco delle anagrafiche che hanno liniziale del nome uguale ad A. Select * From Anagrafica Where Nome Like A% 3.7 LE TRANSAZIONI Una transazione, o unit logica di lavoro, una sequenza di clausole SQL, che un RDBMS tratta come singola unit. Le propriet della transazione sono: Atomicit: la transazione non pu essere eseguita parzialmente, le azioni che la transazione esegue devono svolgersi tutte correttamente, in caso contrario la transazione deve lasciare inalterata la base dati. Permanenza: il risultato prodotto da una transazione deve essere permanente. Serializzabilit: nel caso di uso concorrente del database una transazione deve produrre gli stessi risultati che produrrebbe se fosse eseguita da sola. Isolamento: ogni transazione indipendente da ogni altra. Una transazione inizia con la prima clausola eseguibile SQL, dopo la connessione al database, o dopo una direttiva COMMIT o ROLLBACK, e termina con una COMMIT, una ROLLBACK o una sconnessione dal database. Per rendere permanenti tutti i cambiamenti effettuati sul database, terminare la transazione, rilasciare i locks della transazione, la clausola SQL ha la seguente forma: COMMIT WORK Per annullare tutti i cambiamenti effettuati sul database dall' inizio della transazione, terminare la transazione, rilasciare i locks della transazione, la clausola SQL ha la seguente forma: ROLLBACK WORK Alcuni RDBMS prevedono una implicita clausola COMMIT prima e dopo l' esecuzione di una direttiva DDL.

12

IL MODELLO RELAZIONALE DEI DATI GENERALITA' Il modello Relazionale un modello logico di dati la cui architettura suddivisa in tre livelli nel modo seguente:

Livello concettuale:

denominato database logico ed costituito dalla rappresentazione astratta del database, in quanto indipendente dalla implementazione fisica. Questo livello si pone tra il livello interno e quello esterno.

Livello interno:

viene detto database fisico ed costituito dalla implementazione del database logico e considera i tipi di dato, i formati, le strutture di memorizzazione ed i metodi di accesso, esso rappresenta la forma in cui il database viene memorizzato e richiamato.

Livello esterno:

concerne le viste, intese come porzioni del Database logico, che gli utenti hanno sul database.

13

Le relazioni
Dati n insiemi D1,D2,...,Dn chiamati Domini della relazione, considerando l' insieme di n-uple a1,a2,...,an costituito dal prodotto cartesiano di D1,D2,...,Dn (indicato con D1 x D2 x...x Dn), una Relazione sui domini D1,D2,...,Dn un sottoinsieme del prodotto cartesiano D1 x D2 x...x Dn , ottenuto da una relazione matematica applicata al domini D1,D2,...,Dn , dove n il grado della relazione. Ad una relazione pu essere associata una rappresentazione tabellare. Ogni relazione (tabella) ha tante righe quanti sono i suoi elementi. Poich una relazione matematica un insieme, in una relazione non ci sono mai due n-uple uguali. Ciascuna n-upla contiene dati logicamente collegati tra loro o stabilisce un legame logico fra essi. All' interno di ciascuna relazione non definito alcun ordinamento fra n-uple, due relazioni con le stesse n-uple in ordine diverso rappresentano la stessa relazione. Ogni relazione ha un numero di domini pari al grado della relazione stessa ed significativo il loro ordine, in quanto rappresenta lidentificazione del dominio stesso. I valori appartenenti a ciascun dominio sono omogenei tra loro.

Attributi di relazioni
A differenza delle relazioni matematiche, nel Modello Relazionale, data una relazione sui domini D1,D2,...,Dn associato a ciascun Di un unico identificatore, chiamato attributo. Quindi, nel modello relazionale, l' ordinamento dei domini non risulta essere significativo in quanto la loro identificazione pu avvenire per mezzo degli attributi.

Restrizione di tupla
Sia data una n-upla t detta t-upla, definita sull' insieme di attributi X, e sia Y sottoinsieme di X, la restrizione della tupla t sull' insieme di attributi Y denotata da t.Y, la n-upla ottenuta da t eliminando i valori degli attributi non in Y.

Schemi e istanze
La caratteristica delle relazioni utilizzate per strutturare i dati nelle applicazioni informatiche quella di poter variare nel tempo. Alcune t-uple vengono aggiunte, eliminate o modificate. Gli insiemi degli attributi definiti nelle relazioni invece invariante nel tempo. L' insieme degli attributi di una relazione chiamato schema di relazione. Il nome della relazione ed i nomi degli attributi sono costrutti che descrivono la struttura per mezzo della quale sono organizzati logicamente i dati e vengono definiti schema di relazione o intenzione, mentre linsieme delle t-uple costituisce l' istanza o la sua estensione. Uno schema di basi di dati relazionale quindi un insieme di schemi di relazione ed una base di dati relazionale l' insieme delle t-uple di ciascuna relazione.

Definizione formale dei concetti di base


I concetti di base e le relative notazioni utilizzate per la definizione del modello logico di un database, sono essenzialmente quelli di: dominio, t-upla, relazione e database prima introdotti. A tale proposito, di seguito vengono riportate le definizioni matematiche formali di tali concetti: Dominio: L' universo di un database relazionale denotato da U ed costituito da un insieme finito non vuoto di A1...An definiti attributi, si ha quindi U={A1,...,An}. Il dominio di un attributo Aj per j=1,...,n l' insieme finito dei valori di Aj. Tupla: Sia X un sottoinsieme non vuoto dell' universo U, sia DOM(X) il dominio di X, sia f:X->DOM(X) una funzione tale che f = {(Ai1, a1),...,(Aik,ak)}. Ciascun Aij per 1<=j<=k un attributo in X ed un argomento di f. Ciascun aj per 1<=j<=k un valore in DOM(Aij), ed il valore di f per Aij, o l' immagine di Aij secondo f come (Aij) = aj. Questa funzione 1-pla f viene definita t-upla su X. Considerando f come un elemento del prodotto complesso di DOM(Ai1),...,DOM(Aik), questo prodotto complesso costituito da tutte le t-uple possibili su X ed definito TUP(X). Relazione: Sia Uj un sottoinsieme non vuoto dell' universo U. Una relazione Rj su Uj, indicata Rj(Uj), di un database relazionale viene definita su TUP(Uj) se un insieme di t-uple aventi schema Uj. L' insieme Uj definito schema per la relazione Rj. Database: Un database relazionale un insieme di relazioni R1,...,Rm tale che Rj una relazione su Uj per 1<=j<=m. L' insieme degli schemi U1,...,Um per le relazioni R1,...,Rm rispettivamente tali che l' unione di U1,...,Um sia uguale a U lo schema del database. 14

Dipendenze funzionali
Le dipendenze fra dati sono delle limitazioni imposte ai dati di un database. Come l' insieme degli attributi, l' insieme delle dipendenze fra dati costituisce una parte essenziale di uno schema di relazione o di uno schema di database. Una classe importante di dipendenze fra dati quella delle dipendenze funzionali.

Chiavi e soprachiavi
La chiave un caso particolare di dipendenza funzionale che permette di identificare univocamente le t-uple delle relazioni. Tutte le relazioni hanno almeno una chiave la cui esistenza garantisce la possibilit di accedere a tutti i dati del database, in quanto, nel modello relazionale, possibile accedere ai dati solo attraverso i loro valori, l' esistenza delle chiavi permette di individuare ciascun dato attraverso i seguenti elementi:

1
Nome della relazione

2
Nome dellattributo

3
Valore della chiave

L` insieme K degli attributi una chiave candidata per lo schema di relazione se gode delle seguenti propriet invarianti nel tempo: 1. La relazione non ha lo stesso valore di K, qualsiasi sia la coppia di t-uple distinte nella relazione. 2. Se da K viene cancellato un qualsiasi attributo, viene a mancare la precedente propriet. Ad ogni relazione associato un insieme di chiavi candidate, fra le quali viene scelta una chiave, detta chiave primaria per la relazione; il rapporto fra K e la relazione una funzione che costituisce una dipendenza importante, detta dipendenza di chiave. Una chiave primaria di una relazione viene detta semplice se costituita da un solo attributo e viene detta composta negli altri casi. Per un dato database, un dominio su cui sia definita una chiave primaria semplice viene detto dominio primario di tale database. Si noti che non tutti gli attributi di una chiave primaria composta debbono essere definiti su domini primari, anche se una chiave primaria semplice deve essere definita su un dominio primario. Tutti gli inserimenti, gli aggiornamenti e le cancellazioni riguardanti le relazioni di base sono limitate dalle seguenti regole, note come insert-update-delete-rules : 1. Una chiave primaria per una relazione di base non pu avere un componente nullo. 2. Se un attributo A di una chiave composta per una relazione Rj, viene definito su di un dominio primario, allora deve sempre esistere una relazione di base Rk avente una chiave primaria semplice B tale che ciascun valore di A in Rj sia presente come valore di B in Rk. La soprachiave cos formalmente definita: Sia R=(U, ) uno schema di relazione. Un sottoinsieme X di U si dice soprachiave per uno schema di relazione R se X>U in . Se X una chiave per R, allora anche chiave per una relazione avente schema R. Una chiave per uno 15

schema di relazione R ed una chiave per una relazione r(R) possono essere utilizzate scambievolmente, ed una soprachiave deve contenere una chiave. Il problema di trovare la chiave di dimensione minima per uno schema di relazione NP-completo; un problema si definisce NP-completo quando pu essere risolto da un algoritmo di complessit polinomiale (classe NP) e quando, dato un qualsiasi problema B in NP, esiste una riduzione polinomiale da A a B (una riduzione polinomiale f da un problema A ad uno B una funzione da A a B tale che f calcolabile da un algoritmo polinomiale ed un elemento x appartiene ad A solo e soltanto se f(x) appartiene a B). Pertanto trovare tutte le chiavi di uno schema di relazione in genere un problema che presenta una notevole difficolt di soluzione (un problema NP-completo considerato computazionalmente tra i pi difficili all' interno della classe NP ed ad oggi aperto il problema della sua solubilit).

Normalizzazione
La scomposizione di una relazione in pi sotto-relazioni viene detta normalizzazione. Tale normalizzazione si rende necessaria quando, analizzando la relazione si riscontrano anomalie o ridondanze cosi definite: 1. Ridondanza: quando un valore di Y, dipendente da un valore X, viene ripetuto in tutte le t-uple relative al valore X. 2. Anomalia di aggiornamento: variando un Y-valore in presenza di una ridondanza necessario variare tutte le tuple corrispondenti all' X-valore per mantenere la dipendenza funzionale X->Y. 3. Anomalia di cancellazione: quando la cancellazione di una t-upla relativa ad una particolare categoria di dati comporta la indesiderata cancellazione di dati relativi ad altre categorie. 4. Anomalia di inserimento: quando un dato non pu essere inserito per le sole categorie di interesse. Tali anomalie e ridondanze, che possono comportare l' inconsistenza o dispersivit del database, non si presentano per quegli schemi di database che rispettano la 1st Normal Form (1NF) e la Boyce-Codd Normal Form (BCNF), .

Prima forma normale (1NF)


Uno schema di relazione R=Ai1...Aik in 1NF se il dominio di ogni attributo Aij tale che 1<=j<=k semplice. Uno schema di database in 1NF se ogni suo schema di relazione in 1NF.

Forma normale Boyce-Codd (BCNF)


Sia U l' universo di un database relazionale costituito da un insieme finito non vuoto di attributi A1...An e dato un insieme di Functional Dependency (FD), uno schema di relazioni in 1NF R=(U, ) e`in BCNF se, per ogni FD non banale avente la forma X->A, X e`una soprachiave per R. Uno schema di database in BCNF se ogni suo schema di relazione in BCNF. La BCNF inoltre comporta come interessante conseguenza la separazione in diverse relazioni di categorie di dati concettualmente omogenei.

16

Il modello relazionale di database


Il modello relazionale di database costituito da: 1. Un insieme di relazioni tabellari variabili nel tempo aventi schemi invarianti nel tempo R1,...,Rm. 2. Un insieme di regole di inserimento e cancellazione. 3. Un sotto-linguaggio per la manipolazione di dati potente almeno quanto l' algebra relazionale.

Algebra relazionale
I concetti introdotti, nella precedente sezione, permettono di dare una solida base formale ai vari aspetti legati alla struttura di uno schema di dati rappresentato per mezzo di un insieme di relazioni. L' algebra relazionale un linguaggio di interrogazione ed definita da sei operatori di base: tre per le operazioni binarie (unione, prodotto complesso, differenza), tre operatori per le operazioni unarie (proiezione, selezione, ridenominazione) e da altri operatori esprimibili mediante le operazioni di base (intersezione, congiunzione).

Operandi
Gli operandi sono relazioni e ciascun operatore produce o pu produrre relazioni come risultato. Le operazioni di unione, differenza, intersezione sulle relazioni di un database richiedono che le loro relazioni-operando siano compatibili nei loro schemi. Tale compatibilit viene cos definita: Due relazioni r(R) ed s(S) si dicono compatibili per unione (union-compatible) ed anche i due schemi R ed S lo sono, se esiste una corrispondenza uno-ad-uno fra R ed S, ossia se i valori dei loro rispettivi domini appartengono allo stesso tipo di dati.

Operatori
UNIONE: E' operatore binario e da come risultato una relazione. L' un unione di due relazioni r(R) ed s(S) compatibili per unione la relazione su R costituita da ciascuna t-upla appartenente ad r o ad s o ad entrambe. DIFFERENZA: E' operatore binario e da come risultato una relazione. Analogamente all' un operazione di unione anche la differenza di due relazioni esige la condizione di compatibilit per unione. La differenza di due relazioni r(R) ed s(S) compatibili per unione la relazione su R costituita da ciascuna t-upla appartenente ad r ma non ad s. PRODOTTO COMPLESSO (FULL QUADRATIC JOIN): E' operatore binario ed il risultato pu essere una relazione. Il prodotto complesso di due relazioni non vuote r(R) ed un s(S) denotato da r*s costituito dall' insieme composto della stringa M(r)M(s) per ogni coppia di stringhe (Mr, Ms) nel prodotto cartesiano r x s. Il prodotto complesso indefinito se una qualsiasi delle due relazioni-operando vuota; in pratica il prodotto complesso (ed il prodotto cartesiano) combina le n-uple delle due relazioni in tutti i modi possibili. Questo operatore gode di propriet associativa. PROIEZIONE: E' operatore unario e da come risultato una relazione. Data una relazione r(X) ed un sottoinsieme Y degli attributi X, un la proiezione di r su Y, denotata da Y(r) una relazione sugli attributi in Y, consistente nella restrizione delle n-uple di r sugli attributi di Y. SELEZIONE: E' operatore unario e da come risultato una relazione. un Chiamiamo formula relazionale un' espressione che mette in relazione attributi per mezzo degli operatori =, !=, >, <, <=, >=.

17

Sia r(X) una relazione sull' insieme di attributi X, e F una formula relazionale. La selezione di r rispetto a F, denotata da F(r) una relazione definita su X, contenente le n-uple di r che rendono F vera. RIDENOMINAZIONE: E' operatore unario e da come risultato una relazione. Serve a modificare lo schema di una relazione, lasciandone inun variato il contenuto. Questo operatore, indicato con d(r), modifica i nomi degli attributi della relazione r secondo la regola indicata dalla funzione d. INTERSEZIONE: E' operatore binario e da come risultato una relazione. Analogamente all' un operazione di unione anche l' intersezione di due relazioni esige la condizione di compatibilit per unione. L' intersezione di due relazioni r(R) ed s(S) compatibili per unione la relazione su R costituita da ciascuna t-upla appartenente ad r e ad s. THETA-CONGIUNZIONE (THETA-JOIN): La Theta congiunzione una operazione binaria, denotata da r[F]s, dove F una formula atomica; la thetacongiunzione di due relazioni non necessariamente un relazione. Quando il prodotto complesso r*s una relazione, la theta-congiunzione una relazione e pu essere espressa come: r[Aj Bk]s = Aj Bk(r*s). Se la formula nulla la theta-congiunzione il prodotto complesso r*s. Un caso particolare si verifica quando Theta la proposizione di uguaglianza, in questo caso la theta-congiunzione viene detta equi-congiunzione. CONGIUNZIONE NATURALE (NATURAL-JOIN O JOIN): Dato che un equi-congiunzione ha nomi e valori identici in almeno due domini, occorre un meccanismo che conservi uno solo dei domini duplicati, questa funzione svolta dalla congiunzione naturale (o semplicemente congiunzione o join). Siano r(X,Y) e s(X,Z) due relazioni il join tra r ed s, denotato da r|X|s una relazione q(X,Y,Z) costituita da tutte le t-uple risultanti dalla giustapposizione delle t-uple in r alle t-uple in s che hanno valori identici per gli attributi in X. Quando r ed s sono disgiunti allora la congiunzione identica al prodotto complesso r*s. La congiunzione una operazione binaria che da come risultato una relazione, l' operatore di congiunzione gode di propriet associativa: possiamo pertanto scrivere r|X|s|X|t ed estendere la versione binaria alla versione k-aria con la notazione a prefissi |X|(r1,...,rm). Dato che |X| associativa le congiunzioni possono essere nidificate.

18

Das könnte Ihnen auch gefallen