Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
Query in QBE
Il termine query può essere tradotto con i termini interrogazione o richiesta. In questo contesto tale
termine si riferisce a una richiesta fatta al DBMS riguardante informazioni contenute in un
determinato DB. Possiamo distinguere quattro tipi di query:
Selezione (Select): per visualizzare determinati campi dei record selezionati tra tutti quelli di una
• o più tabelle in modo che soddisfino specifiche condizioni, le quali verrano inserite nella voce
“criteri”.
Inserimento (Insert): per inserire record in una tabella in modo automatico prelevando
• informazioni dalle altre tabelle sorgenti, da valori costanti o da espressioni matematiche,
utilizzando, anche in questo caso dei criteri.
Aggiornamento (Update): per cambiare i valori di determinati campi, tramite la selezione del
• campo da aggiornare e l’inserimento dell’aggiornamento.
Eliminazione (Delete): per eliminare alcuni record da una tabella, selezionando la tabella e
• impostando il criterio di selezione dei record da eliminare.
I DBMS relazionali, per permettere di fare le query sui propri DB, mettono a disposizione un
linguaggio apposito, denominato SQL. Sia Access che Base usano anche una soluzione grafica
equivalente alla funzione SQL, denominata Query By Example (QBE), ovvero “richiesta tramite
esempio”.
Progettazione Concettuale
Il progetto concettuale di un DB è una rappresentazione astratta e formale della realtà che un certo
database intende modellare al fine di fornire una rappresentazione “logica” dello schema di una
base di dati indipendentemente da come questa verrà realizzata. Esistono diversi modelli per le
rappresentazioni concettuali e, uno dei più noti, è il modello entità-relazioni (entity - relationship)
detto anche schema E-R.
Uno schema E-R si basa su due elementi fondamentali: le entità e le relazioni. Ogni entità
rappresenta un insieme di oggetti, denominati istanze, con le medesime caratteristiche.
L’E-R è un formalismo grafico, non scritto, quindi ogni elemento è caratterizzato da un simbolo
grafico. Le entità sono rappresentate da rettangoli mentre le relazioni (o associazioni) da rombi,
rombi e rettangoli sono uniti tra loro tramite delle linee. Gli attributi delle entità e delle relazioni
sono simboleggiati da piccoli cerchi e sono collegati alle loro entità tramite una linea. Facendo
un’analogia con il modello relazione le entità possono essere realizzate come tabelle mentre le
istanze saranno i record.
Quando si realizza uno schema concettuale di un database, come nel caso del modello relazionale, è
opportuno individuare un attributo o una combinazione di alcuni attributi che funga da caratteristica
univoca per ogni istanza, detta chiave primaria. Vi possono essere delle entità per cui più attributi
e/o più combinazioni di attributi hanno le caratteristiche della chiave primaria e vengono definite
chiavi candidate, ma solo una deve essere scelta per il ruolo di chiave primaria.
Le chiavi primarie costituite da un solo attributo ( ) vengono rappresentate annerendo i cerchietti
1
associati agli attributi che la rappresentano, mentre, quelle composte ( ), sono simboleggiate da un
2
cerchietto annerito da parte una lineetta intersecante le lineette degli attributi che la compongono.
Non tutti gli attributi sono rappresentati da un singolo valore. In questo caso si parla di attributo
composto. In uno schema E-R la rappresentazione di un attributo può essere arricchita da ulteriori
informazioni. Ad esempio si può indicare una coppia ordinata di numeri interi accanto al pallino per
indicare la cardinalità dell’attributo (0:N). Il numero a sinistra indica il numero minimo di valori
che l’attributo può assumere (0 sta per opzionale, 1 indica che l’attribuzione è obbligatoria), mentre
il numero a destra il numero massimo (N significa che non vi è un massimo).
Come già detto tra le entità vi sono delle relazioni (associazioni) che possono essere di tre tipi: uno
a uno (1:1), uno a molti (1:N) e molti a molti (N:N). Il tipo di associazione, la cardinalità, viene
posta sulle linee che legano le entità con le relazioni.
La cardinalità delle associazioni presenta come primo valore il numero minimo di istanze dell’entità
coinvolte in una associazione e come secondo il numero massimo di istanze coinvolte. Se viene
sottintesa la cardinalità è da intendersi sempre 1:1. Di norma si differenziano tre possibili valori 0,
1, N, dove N è un valore generico per indicare un numero intero maggiore di 1, ma a volte, tale
valore viene specificato, e 0 indica che l’associazione è opzionale.
Un’associazione può essere definita anche tra un’entità e se stessa. In questo caso si parla di
associazione ad anello. Negli anelli vengono specificati i ruoli dell’entità sulle linee di
collegamento con il rombo dell’associazione. Per esempio i ruoli dell’entità “dipendente”
potrebbero essere “capo di” e “subordinato a”. Per ogni ruolo vi è una diversa cardinalità.
Le associazioni possono essere chiamate in causa anche per definire una chiave primaria, ovvero vi
sono chiavi primarie composte, oltre che da attributi, anche da associazioni, o meglio dire da altre
entità a cui una certa entità è legata tramite delle associazioni. In questo caso si parla di
identificatore esterno.
Vi possono essere associazioni che legano un numero indefinito di entità, dette associazioni n-arie.
Tra le entità possono esistere delle relazioni gerarchiche, dette di generalizzazione. Tali relazioni si
hanno nel caso in cui un’istanza dell’entità di livello più basso sia anche istanza dell’entità di livello
più alto. L’entità di livello più alto è detta, entità padre, mentre quella di livello più basso, entità
figlio. I figli ereditano dal padre tutte le proprietà (attributi, associazioni, …).
Il linguaggio per le interrogazioni SQL
Per effettuare interrogazioni complesse su DB relazionali si utilizza il linguaggio SQL. Esso è un
linguaggio dichiarativo molto complesso, e la sua complessità è spesso accentuata dal fatto che le
diverse software-house che realizzano DBMS effettuano loro variazioni specifiche. SQL si
compone di quattro sotto-linguaggi: DDL, DML, DCL e TCI.
Il DDL è utilizzato per creare i database. Il linguaggio prevede istruzioni per la creazione e modifica
delle tabelle, la definizione e cancellazione di indici, schemi e domini.
Il DCL permette, invece, di controllare gli accessi di singoli utenti ai DB e alle loro tabelle.
Il TCL permette, infine, di gestire le transazioni su un database.
Il Data Manipulation Language, DML, è il sotto-linguaggio di SQL utilizzato per effettuare
interrogazioni e modifiche sulle informazioni contenute in un database.
Proiezioni e selezioni
In SQL l’istruzione select permette di effettuare interrogazioni sul contenuto di una o più tabelle.
Si inizia richiedendo di selezionare solo alcune colonne tra tutte quelle della tabella, ovvero si
richiede di effettuare quella che viene chiamata una proiezione:
SELECT “lista attributi”
FROM “nome tabella”;
La parola riservata SELECT è seguita dall’elenco dei nomi delle colonne delle tabelle di cui si è
interessati e la parola FROM dal nome della tabella di cui si vogliono leggere i dati. Il risultato di
una proiezione può comportare la presenza di righe identiche e, per evitare ciò, esiste la parola
riservata DISTINCT che va posta tra select e la lista degli attributi. Il suo effetto è dunque quello di
mostrare un elenco di righe prive di doppioni:
SELECT DISTINCT “Matricola”,”Cognome”
FROM “Studenti”;
Oltre a selezionare le colonne, possiamo anche selezionare delle righe, in questo caso si parla, non
più di proiezioni, ma di selezioni. La sintassi è la seguente:
SELECT *
FROM “nome tabella”
WHERE “condizione”;
Il simbolo * rappresenta l’elenco di tutti gli attributi della tabella (dunque tutte le colonne), mentre
la parola riservata WHERE è seguita da una condizione, un’espressione che, nella valutazione,
risulta un valore di verità, VERO o FALSO. La condizione viene verificata per ogni riga della
tabella e se è VERA, la riga viene messa nell’elenco dei risultati, in caso contrario viene scartata.
SELECT “Matricola”,”Nome”
FROM “Studenti”
WHERE “Cognome”=‘Rossi’;
Nulla vieta di mettere insieme proiezioni e condizioni come nel caso sopra.
Condizioni complesse
Le condizioni che seguono il where possono essere costituite da un operatore relazione
d’uguaglianza (“Cognome”=‘Rossi’) ma anche da operatori logici e relazioni.
Gli operatori logici si riferiscono all’algebra di Boole e in SQL sono tre: “AND”, ”OR” e “NOT”.
I primi due permettono di congiungere diverse condizioni mentre il terzo ne nega una.
Ad esempio se voglio una condizione che richieda che uno studente si chiama Gigi Rossi devo agire
su due differenti attributi, ovvero Cognome = Rossi e Nome = Gigi:
SELECT *
FROM “Studenti”
WHERE “Cognome”=‘Rossi’ AND “Nome”=‘Gigi’;
Se invece si vuole l’elenco degli studenti con cognome Rossi o Verdi vengono unite con OR:
SELECT “Matricola”,”Nome”
FROM “Studenti”
WHERE “Cognome”=‘Rossi’ OR “Cognome”=‘Verdi’;
Se invece si vuole l’elenco di tutti gli studenti che non si chiamano Gigi Rossi si usa NOT:
SELECT *
FROM “Studenti”
WHERE NOT (“Cognome”=‘Rossi’ AND “Nome”=‘Gigi’);
In SQL sono previsti molte relazioni come quelle d’ordine, quelle per il confronto con una stringa e
un’espressione regolare (LIKE), il contenimento di un valore in un insieme (IN) e il contenimento
di un valore in un intervallo (BETWEEN).
Le relazioni d’ordine sono l’uguaglianza (=), il minore (<), il minore uguale(<=), il maggiore (>),
il maggiore uguale (>=) e diverso(<>).
SELECT *
FROM “Prodotti”
WHERE “Peso”>=12;
Nulla vieta di costruire condizioni più complesse utilizzando insieme alle relazioni anche gli
operatori logici. Se richiediamo in alternanza due condizioni usiamo OR, mentre se richiediamo, per
esempio, l’elenco dei prodotti con peso compreso tra 5 e 15 possiamo utilizzare sia AND che
BETWEEN. Quest’ultimo caso risulta quel