Appunti sui DataBase Relazionali e sul linguaggio SQL
Appunti sui DataBase Relazionali e sul linguaggio SQL
Indice
Introduzione sui database
Cos'e' un database?
Piccola storia dei database assolutamente incompleta
I DataBase Relazionali
SQL questo sconosciuto
Commit e Rollback, ovvero come limitare i danni
I Semafori , ovvero la gestione della multiutenza
Il Linguaggio SQL
Basi del comando SELECT
Selezione Condizionata
Operatori Relazionali
Condizioni più complesse: Condizioni multiple e Operatori Logici
IN, BETWEEN e NOT
Utilizzare la clausola LIKE ed il carattere jolly %
I Join
Le Chiavi
Creare un Join
Clausola DISTINCT e l'Eliminazione dei Duplicati
Alias, In e l'utilizzo delle Subquery
Funzioni di Aggregazione
Viste
Creare Nuove Tabelle
Modificare la struttura delle tabelle
Inserire dati in una tabella
Cancellare dati da una tabella
Modifica dei dati
Gli Indici
GROUP BY ed HAVING
Altre Subquery
EXISTS ed ALL
UNION ed Outer Joins
Sommario della Sintassi - Solo per veri masochisti
Sommario dei Link relativi all' SQL
INTRODUZIONE SUI DATABASE
Al di là dei termini complessi e da iniziati un database (del tipo "un insieme strutturato di dati che in un momento n fornisce una…
Il primo tentativo di cui io sono a conoscenza compiuto dagli informatici per riversare questo tipo di oggetti in un "coso" trattabile… la logica evoluzione del CSV fu l'ISAM (Indexed Sequential Access Method), che… A questo punto parecchi matematici di notevole ingegno si misero a cercare metodi per rendere ancora più veloce…
Per il nostro esempio prenderemo in esame il database di una piccola gestione di una videoteca di famiglia.Vogliamo tenere registrati tutti i film… 1. il titolo
2. il regista
non potendo fare un corso su ognuno di essi (in primis perché molti non li conosco) noi faremo invece riferimento all' ANSI SQL. ma prima di…
Mettiamo che voi stiate gestendo il database di una banca e che dobbiate effettuare un bonifico bancario; questa operazione in realtà si… 1. aumentare il saldo del conto corrente del destinatario della cifra in… 2. diminuire il saldo del conto corrente del mittente della stessa cifra più quella dovuta per le…
Tutte le volte che noi accediamo ad un determinato record possiamo accedervi in tre diverse modalità: in lettura, in scrittura o in lettura E… questo tipo di gestione (normalmente definito "a semafori" )…
Il Linguaggio SQL
Ora che abbiamo visto rapidamente cosa sta alla base di un database relazionale entriamo nel dettaglio del linguaggio SQL, analizzandone i comandi
adesso tentiamo di leggere gli indirizzi dei nostri impiegati.Utilizziamo l' istruzione SELECT così:
SELECT Nome, Cognome, Indirizzo, Citta, Provincia FROM TabellaImpiegati;
Il risultato della vostra prima QUERY (interrogazione) del database sarà questo:
Nome
Cognome
…
La clausola WHERE viene utilizzata per specificare che si desidera vedere solo certe righe della tabella, basandosi per la scelta sul criterio… Se si vuole vedere il Codice Impiegato di quegli impiegati che hanno uno… SELECT CodiceImpiegato FROM TabellaStatisticeImpiegati WHERE StipendioAnnuo >= 50000000;
I Join
In questa sezione discuteremo solo degli inner joins, e degli equijoins, che , in genere, sono estremamente utili. Per informazioni più dettagliate in merito vi rimando ai link che ho inserito in fondo a questa pagina e che credo possano esservi di un qualche aiuto
Le norme generali sulla buona progettazione dei database suggeriscono che ogni tabella contenga dati relativi solo ad una singola "entità" e che i dati aggiuntivi rispetto ad essa possano venire recuperati tramite relazioni con altre tabelle create tramite i Join. per prima cosa partiamo da un esempio, rappresentato dalle tabelle seguenti:
Antiquari
|
IDAntiquario
| CognomeAntiquario
| NomeAntiquario
|
| Jones
| Bill
|
| Smith
| Bob
|
| Lawson
| Patricia
|
| Akins
| Jane
|
| Fowler
| Sam
|
Ordini
|
IDAntiquario
| OggettoRicercato
|
| Tavolo
|
| Scrivania
|
| Sedia
|
| Specchio
|
Antichita
|
IDVenditore
| IDAcquirente
| Oggetto
|
|
| Letto
|
|
| Tavolo
|
|
| Sedia
|
|
| Specchio
|
|
| Scrivania
|
|
| Cassettiera
|
|
| Tavolinetto da Caffè
|
|
| Sedia
|
|
| Portagioielli
|
|
| Terracotta
|
|
| Libreria
|
|
| Piantana
|
Una Chiave Esterna (o foreign key ) e' invece una colonna presente in una tabella nella quale si registrano dati che sono la chiave primaria di un'…
SELECT CognomeAntiquario, NomeAntiquario FROM Antiquari, Antichita WHERE IdAcquirente = IDAntiquario AND Oggetto = 'Sedia';
Iniziamo ad analizzare le particolarità di questa query. la prima che… La notazione a punti (Dot notation) permette di specificare il nome della tabella a cui si riferisce il campo ,…
Per prima cosa ci serve un equijoin (come e' stato spiegato subito sopra) alla tabella degli Antiquari per potere ottenere i dati particolareggiati… Per aggiungere un' ulteriore livello di complessità della query ,… SELECT DISTINCT IDVenditore, CognomeAntiquario, NomeAntiquario FROM Antichita, Antiquari WHERE IDVenditore =…
SELECT PERS.CognomeAntiquario Cognome, ORD.OggettoRicercato Oggetto Ordinato FROM Ordini ORD, Antiquari PERS WHERE ORD.IDAntiquario =… (SELECT Oggetto FROM Antichita);
Questa query ritorna questo risultato:
Comandi SQL Vari
proviamo a fare un po' di esempi con le tabelle degli impiegati utilizzate all' inizio di questo documento. guardiamo questi tre esempi:
SELECT SUM(StipendioAnnuo), AVG(StipendioAnnuo) FROM… Questa query ritorna la somma totale di tutti gli stipendi annui presenti nella tabella e la media degli stessi
Viste
In SQL si può normalmente avere la possibilità di crearsi delle proprie viste, cioè creare delle query "perenni" che possono venire utilizzate come delle vere e proprie tabelle. normalmente questa funzione può venire usata da ogni singolo utente, che sarà colui che vedrà la vista se non specificato diversamente dal DBA (controllate il vostro DBMS e sentite dal vostro DB Administrator se gli utenti hanno questo diritto). per essere più precisi quello che fa una vista e' permettervi di assegnare i risultati di una query ad una nuova tabella "personale" (cioè legata al vostro utente), che potete usare all' interno di altre query , ed il cui nome potete tranquillamente specificare nella clausola FROM come se fosse una qualunque tabella. Generalmente le viste sono dinamiche, cioè i valori nella tabella vengono rigenerati tutte le volte che accedete alla vista stessa. un esempio di creazione di una vista può essere il seguente:
CREATE VIEW VistaAnt AS SELECT OggettoRichiesto FROM Ordini;
A questo punto possiamo scrivere una query che usa questa vista come una tabella; tabella che in realtà sarà solo un' elenco di tutti gli oggetti richiesti proveniente dalla tabella Ordini:
SELECT IDVenditore
FROM Antichita, VistaAnt
WHERE OggettoRichiesto = Oggetto;
Questa query mostra il codice del venditore estratto dalla tabella antichità quando il campo OggettoRichiesto in quella tabella compare nella vista VistaAnt, che e' semplicemente la lista di tutti gli oggetti richiesti nella tabella degli ordini, eseguita al momento del lancio della query.Le viste possono essere utilizzate sia allo scopo di restringere la visibilità dei dati a determinati utenti che per semplificare delle query complesse.
CREATE TABLE Ordini (IDAntiquario INTEGER NOT NULL, OggettoRicercato CHAR(40) NOT NULL);
Questo comando dice al DBMS di creare una tabella, gli assegna un nome e… Altra cosa da notare e' l' impiego della clausola NOT NULL. Questa clausola impone che il relativo campo non possa mai…
ALTER TABLE Antichita ADD (Prezzo DECIMAL(12,2) NULL);
l' ovvio complemento della clausola ADD qui utilizzata per aggiungere una…
INSERT INTO Antichita VALUES (21, 01, 'Ottomana', 2000000.00);
Questo comando inserisce una nuova riga nella tabella, nell' ordine dei campi… INSERT INTO Antichita (IDAcquirente, IDVenditore, Oggetto) VALUES (01, 21, 'Ottomana');
DELETE FROM Antichita WHERE Oggetto = 'Ottomana';
Ma, in questo caso, se c'e' un' altra riga che contiene nel campo Oggetto la… DELETE FROM Antichita WHERE Oggetto = 'Ottomana' AND IDAcquirente = 01 AND IDVenditore = 21;
UPDATE Antichita SET Prezzo = 500000.00 WHERE Oggetto = 'Sedia';
Questo comando imposta il prezzo di tutte le sedie a 500.000£ . anche in… Gli Indici
ALTER TABLE <Nome Tabella> ADD|DROP|MODIFY (Specifiche Colonna[e]...vedere Create Table);--vi permette di aggiungere o cancellare una o… Begin Transaction;inizia a considerare i comandi seguenti come facenti parte… COMMIT; effettua i cambiamenti fatti sul database dall' ultima istruzione Begin Transaction (in alcuni DBMS dall'…