Base Di Dati Notes
Base Di Dati Notes
Base di Dati
Base di Dati 1
Intro 3
DBMS e file system 4
Schema (logico) 4
Modelli dei dati 4
Altri modelli dei dati 5
Schema e istanza 5
Livelli nella rappresentazione dati in DBMS 5
Indipendenza dei dati 6
Linguaggi di un DBMS 6
Il modello relazionale 7
Attributi e schema di relazione 7
Schema di base di dati 8
Informazione incompleta 8
Valore NULL 8
Vincoli di integrità 8
Chiavi 9
Vincolo di integrità referenziale/ Chiavi esterne 10
Structured Query Language 13
Notazione 13
Data De nition Language (DDL) 13
Tipi di dato 13
Vincoli di integrità (DDL) 14
Creare una relazione 14
Creazione dei vincoli di integrità 15
PRIMARY KEY e UNIQUE 15
FOREIGN KEY – ON DELETE & ON UPDATE 16
Gestione relazioni (DDL) 18
Cancellazione di una relazione 18
Modifica di schema di relazioni 18
Formato della query 19
fi
2
Clausola di qualificazione (WHERE) 20
DISTINCT – Gestione valori duplicati 20
Operatori di confronto 20
Espressioni in clausola di proiezione (SELECT) 21
Espressioni aritmetiche 22
Espressioni e funzioni per stringhe 22
Espressioni e funzioni per date e tempi 22
Espressioni e funzioni per date e tempi 22
Ordinamento del risultato 22
SQL – Operazione di JOIN 24
JOIN 24
Come funziona 24
JOIN ON 25
JOIN USING 25
LEFT JOIN 25
RIGHT JOIN 26
FULL JOIN 26
NATURAL JOIN 27
CROSS JOIN 27
SQL – Funzioni di gruppo 28
GROUP BY 29
HAVING 29
3
Intro
Sistema informativo gestisce e rendere fruibile le informazioni, fornisce:
- Strumenti per la rappresentazione dell’informazione (attraverso una codifica).
- Programmi applicativi e di sistema che operano sulla rappresentazione per realizzare le
funzioni necessarie alla gestione dell’informazione stessa
Il dato ha bisogno di un contesto perché venga interpretato, così da estrarre le informazioni. Il
sistema informativo ha anche lo scopo di fornire il contesto interpretativo dei dati.
Base di dati (database): collezione di dati tra loro correlati, utilizzati per rappresentare le
informazioni di interesse in un sistema informativo
• I database possono essere grandi (large) perché possono contenere svariate migliaia di miliardi
di byte e sono, in generale, certamente più grandi della memoria principale disponibile. Come
conseguenza, un DBMS deve gestire i dati in una memoria secondaria. Ovviamente possono
esistere anche database piccoli, però i sistemi devono essere in grado di gestire i dati senza
essere limitati dalle loro dimensioni, eccezion fatta per le dimensioni fisiche dei dispositivi in uso.
• I database sono condivisi (shared), nel senso che diverse applicazioni e diversi utenti devono
essere in grado di avere accesso ai dati che sono di comune interesse. In questo modo la
ridondanza dei dati viene ridotta, dal momento che le ripetizioni sono evitate, e
conseguentemente, si riduce anche la possibilità di inconsistenza dei dati. Per assicurare un
accesso condiviso ai dati da parte di diversi utenti che operano in modo simultaneo, il DBMS fa
uso di un meccanismo specifico chiamato controllo di concorrenza (concurrency control).
• I database sono persistenti, cioè hanno un ciclo di vita che non è limitato a delle singole
esecuzioni dei programmi che li adoperano. Al contrario, i dati che sono gestiti da un programma
nella memoria principale hanno una vita che inizia e che finisce proprio con l'esecuzione del
programma (non hanno la caratteristica di persistenza)
• La capacità di un DBMS di preservare il contenuto del database o, nella peggiore delle ipotesi
virgola di consentirne la ricostruzione in caso di malfunzionamento dell'hardware o del software
ne assicura la affidabilità (reliability). Proprio per questo scopo, un DBMS fornisce specifiche
funzioni di backup e recovery.
• Per ciò che concerne la privacy, ogni utente, che è riconosciuto tramite il suo username che è
specifico per consentire l'accesso a un DBMS, e qualificato a eseguire soltanto certe operazioni
sui dati, attraverso i meccanismi di autorizzazione (authorization).
Schema (logico)
È un meccanismo fondamentale del DBMS: schema (o schema logico), che descrive il
contenuto della base di dati tramite un formalismo ad alto livello, ovvero il modello dei dati. Il
modello dei dati esula dai dettagli dell’effettiva implementazione fisica della base di dati
I dati relativi ai corsi universitari e ai loro tutor e all'inserimento dei corsi all'interno del prospetto dei
vari corsi di laurea possono essere organizzati usando due relazioni, quella dei CORSI e quella
PROSPETTO, rappresentate dalle tabelle sopra riportate
• Una relazione può essere vista come una tabella con righe, dette tuple, e colonne contenenti
dati di tipo specificato (ad esempio interi e stringhe)
5
Altri modelli dei dati
• Il modello gerarchico, basato su un uso di strutture ad alberi e di gerarchie virgola che è stato
definito durante la prima fase di sviluppo dei DBMS negli anni 60, ma che è ancora usato in
parecchi sistemi principalmente per motivi di continuità.
• Il modello a reticolo (network), anche noto come modello CODASYL dal nome della conferenza
nel quale è stato definito, basato sull'uso di grafi e risalente agli anni 70.
• L’Object data model, sviluppato negli anni 80 per superare alcune delle limitazioni del modello
relazionale; estende di fatto ai database il paradigma della programmazione orientata agli oggetti.
• eXtended Markup Language (XML)
Schema e istanza
• Indipendentemente dal modello dei dati usato, in un DBMS sono definiti:
• Lo schema (logico) della base di dati, ovvero una descrizione della struttura dei dati,
specificata tramite il modello dei dati (cambia raramente/poco)
• L’istanza della base di dati, ovvero un insieme dei dati presenti in un dato momento in una
base di dati (muta spesso)
• Indipendentemente dal modello dei dati usato, in un DBMS sono definiti:
• Lo schema (logico) della base di dati, ovvero una descrizione della struttura dei dati,
specificata tramite il modello dei dati (cambia raramente/poco)
• L’istanza della base di dati, ovvero un insieme dei dati presenti in un dato momento in
una base di dati (muta spesso)
Il primo passo dello sviluppo di una base di dati è la definizione dello schema; poi si immettono i
dati veri e propri (istanza), che devono conformarsi alla definizione fornita dallo schema
CORSI: vediamo che questa relazione ha due colonne (chiamate attributi), le quali riferiscono i
corsi ai rispettivi tutor.
- Lo schema di questa relazione consiste nella sua intestazione, ovvero nel
nome della tabella, seguita dai nomi dei suoi attributi: CORSI(Corso, Tutor)
- Le righe della tabella (i valori al suo interno – istanza), variano con il tempo
e corrispondono ai corsi che sono effettivamente offerti e ai tutor che li
seguono
- La struttura (corsi con relativi tutor – schema) rimangono pressoché
invariati nel medio-lungo periodo
• L'indipendenza fisica: consente l'interazione con il DBMS in modo indipendente dagli aspetti fisici
dei dati. Per esempio, è possibile modificare l'organizzazione dei file che implementano le relazioni
o l'allocazione fisica dei file senza influenzare la descrizione ad alto livello dei dati stessi e dei
programmi che usano quei dati. L’accesso a una relazione (cioè al livello logico o esterno) avviene
sempre nello stesso modo, indipendentemente dalla modalità di memorizzazione fisica.
• L'indipendenza logica garantisce che l'interazione coi livelli esterni del database sia
indipendente dal livello logico. Per esempio, è possibile aggiungere un nuovo schema esterno
(vista) per rispondere alle richieste di un nuovo utente, oppure è possibile modificare uno schema
esterno esistente, senza dover modificare lo schema logico e quindi l'organizzazione fisica dei dati
che è sottesa. Allo stesso tempo, è possibile modificare il livello logico mantenendo invariati lo
schema esterno (vista) che è di interesse per un certo utente.
Linguaggi di un DBMS
Tenendo a mente la distinzione tra schemi e istanze possiamo distinguere i linguaggi per database
in modo relativamente simile:
• Data Definition Language (DDL) è un linguaggio usato per definire gli schemi logici, esterni e
fisici, e per gestire le autorizzazioni di accesso al database.
• Data Manipulation Language (DML) è un linguaggio usato per interrogare e aggiornare le
istanze del database.
• Storage Definition Language (SDL) è il linguaggio di definizione delle strutture di
memorizzazione, definisce lo spazio fisico del DB; nella maggior parte dei DBMS la definizione
della corrispondenza tra strutture logiche e di memorizzazione è eseguita automaticamente
7
Il modello relazionale
È un modello logico composto da costrutti che permettono al DBMS di organizzare e gestire i dati.
La sua semplicità ha permesso lo sviluppo di linguaggi dichiarativi per effettuare ricerche sui dati e
consentire l’accesso. Le interrogazioni possono essere espresse mediante:
• Algebra relazionale, in cui le interrogazioni sono espresse applicando
operatori specializzati alle relazioni
• Calcolo relazionale, in cui le interrogazioni sono espresse con formule logiche
Dominio: un insieme (anche infinito) di valori. Esempi: L’insieme dei numeri interi, l’insieme delle
stringhe di caratteri, l’insieme {0, 1}.
In matematica una relazione è un sottoinsieme del prodotto cartesiano A×B di due insiemi A e B,
dove gli insiemi A e B sono due domini diversi. La relazione è un sottoinsieme del prodotto
cartesiano A×B composto da n-ple ordinate e distinte tra loro. Ogni n-pla è ordinata, cioè in un
prodotto cartesiano A×B la prima posizione della n-pla deve essere sempre un elemento di A,
mentre la seconda posizione nella n-pla è sempre un elemento di B.
Le n-ple possono essere anche rappresentate con una tabella. Quindi, ogni tabella è una
rappresentazione di una relazione matematica; ogni colonna della tabella equivale ad un dominio
della relazione, mentre ogni riga della tabella rappresenta una n-pla; si noti che l'ordine delle n-ple
nella tabella non è importante.
Informazione incompleta
Non sempre sono disponibili tutte le informazioni sulle entità che compongono il dominio
applicativo e che vogliamo rappresentare nella base di dati. Ciò significa che alcune tuple possono
non avere uno o più valori per uno o più attributi.
Per rappresentare
l’informazione
incompleta, vuota,
o incerta
potremmo usare un
«valore speciale» appartenente al dominio dell’attributo
• Esempio, per anno di laurea 1000
L’uso di valori di dominio potrebbe generare confusione , dal momento che la distinzione tra valori
che hanno effettivamente un significato e valori invece fittizi (placeholder) non è trasparente.
Valore NULL
Si introduce il valore NULL
• Non fa parte di alcun dominio
• Rappresenta sia valore ignoto (informazione incompleta), sia valore non definita (valore nullo)
• NULL deve essere impiegato con cautela
Vincoli di integrità
Il concetto di vincolo di integrità (integrity constraint) è stato introdotto come una proprietà che
deve essere soddisfatta da tutte le istanze corrette di database. Ciascun vincolo deve essere visto
come un predicato che associa il valore vero o falso a ciascuna istanza. In generale, associamo un
set di vincoli ad uno schema di database e consideriamo corrette (o legali) le istanze che
soddisfano tutti i vincoli
I vincoli intra-relazionali (all’interno della stessa tabella) sono quelli la cui soddisfazione è definita
relativamente a una singola relazione del database;
• Un vincolo di tupla (tuple constraint) è un vincolo che può essere valutato su ogni
singola tupla indipendentemente dalle altre: i vincoli relativi ai primi due casi ricadono in
questa categoria
• I vincoli definiti riguardo ai singoli valori come nel primo caso (nel quale per l’attributo voto
solo i valori tra A e F sono concessi), sono chiamati vincoli di valore o vincoli di dominio
(value o domain constraints) , dato che impongono una restrizione sul dominio dell’attributo
I vincoli inter-relazionali sono quelli che coinvolgono più di una relazione; come si vede
nell’esempio 4, la situazione non accettabile potrebbe essere evitata richiedendo che l’attributo
Matricola appaia nella relazione ESAMI soltanto se appare anche nella relazione STUDENTI
9
I vincoli sono specificati al momento della definizione dello schema. Una istanza corretta di una
relazione rispetta tutti i vincoli. Il DBMS non deve consentire istanze scorrette. La verifica dei
vincoli da parte del DBMS rende i dati memorizzati più aderenti alla realtà da modellare e limita gli
errori di data entry.
Il linguaggio per la creazione di relazioni consente di specificare nella definizione di una relazione
quali sono quegli attributi che non possono mai assumere un valore nullo. Questo evita che NULL
compaia laddove renderebbe scarsamente intellegibile una relazione
Chiavi
Una chiave è un insieme di attributi che è usato per identificare in modo non ambiguo le tuple di
una relazione. In un database relazionale una chiave è uno o più attributi che identificano le tuple
di una tabella (relazione) in modo univoco.
Definizione formale di chiave:
Sia S(A1, A2, ... An) uno schema di relazione e Us l’insieme degli attributi di S.
Un insieme X ⊆ Us è chiave di S se verifica le seguenti proprietà:
[Link] qualsiasi istanza di S, non esistono due tuple distinte in essa che abbiano lo stesso valore
per tutti gli attributi in X
• Un insieme di attributi che verifica (1), ma non (2), è detto super- chiave
L’esistenza delle chiavi garantisce l’accessibilità a ciascun dato della base di dati. Le chiavi
consentono di correlare i dati in tabelle diverse, il modello relazionale ha una rappresentazione
delle associazioni basate su valori.
10
Una relazione può avere più di un insieme X di attributi che verificano le proprietà (1) e (2),
possono esistere più chiavi candidate.
Le chiavi delle relazioni vengono individuate mediante esame del dominio applicativo e dei relativi
vincoli. Una relazione ha sicuramente almeno una chiave (Us soddisfa sempre la proprietà (1)).
Un vincolo di integrità (o chiave esterna) tra un insieme di attributi X di una relazione R1 e un’altra
relazione R2 è soddisfatto se i valori in X di ogni tupla dell’istanza di R1 appaiono come valori della
chiave (primaria) dell’istanza di R2.
I valori comuni tra due tabelle diverse correlano l’informazione.
Le correlazioni tra i valori devono essere coerenti: I valori assunti dalla chiave esterna nella
relazione referente possono essere esclusivamente valori assunti effettivamente dalla chiave
primaria della tabella riferita.
11
• La Primary Key (PK) è una colonna o un insieme di colonne che identifica in modo univoco ogni
riga in una tabella. Ogni tabella può avere solo una chiave primaria. I valori della PK devono
essere univoci per ogni riga e l'attributo (o gli attributi) scelti come PK non possono contenere
valori NULL.
• La Superchiave (SK) è un insieme di attributi (colonne) che può identificare in modo univoco
ogni riga di una tabella. Qualsiasi SK deve garantire che nessuna riga nella tabella condivida gli
stessi valori per quell'insieme di colonne che compongono la superchiave. La SK è non-minimal,
può includere più attributi del necessario per identificare in modo univoco una riga. Ad esempio, in
una tabella di dipendenti, una superchiave potrebbe includere l'ID del dipendente (che è sufficiente
per garantire l'unicità) e il nome, anche se il nome non è necessario per garantire l'unicità.
Una SK è un insieme di colonne che identifica univocamente le righe di una tabella, ma può
contenere attributi extra non necessari.
• Una chiave candidata è una SK minimal, cioè senza attributi superflui. Possono esistere più
chiavi candidate per una relazione.
• La PK è una chiave candidata scelta come identificatore principale della tabella.
• Una Chiave Esterna (FK-Foreign Key) è una colonna o un insieme di colonne in una tabella che
serve per creare un legame tra due tabelle.
• Una FK fa riferimento alla PK di un'altra tabella.
• Può contenere valori NULL, a meno che non sia specificato diversamente.
12
13
È un linguaggio dichiarativo: Descrive cosa fare, non come fare. È ad un livello di astrazione «più
alto» dei linguaggi di programmazione tradizionali. Si basa sull’algebra relazionale (per le
operazioni di query). Le interrogazioni SQL operano su un gruppo di tabelle e producono,
come risultato, una tabella (approccio set-oriented). Per converso, i linguaggi di programmazione,
per operare su una tabella, leggono le tuple una a una (approccio tuple oriented)
Notazione
• Parole chiave del linguaggio: MAIUSCOLO
• Termini variabili: racchiusi tra < ... >
• Componenti opzionali: racchiusi tra [ ... ]
• Elementi reiterabili: *
• Opzioni esclusive: |
Tipi di dato
14
I valori carattere vanno racchiusi tra apici ‘stringa’ e si distingue tra valori maiuscoli e
minuscoli.
BLOB & CLOB: Usati per memorizzare stringhe di bit o caratteri di elevata dimensione (grandi
immagini, grandi testi)
I vincoli vengono verificati dopo ogni istruzione SQL che opera sulle relazioni soggette a vincolo
• Inserimento di nuovi dati
• Modifica del valore di colonne soggette a vincolo
Se il vincolo è violato, l’istruzione SQL che causa la violazione genera un errore di esecuzione
Esempio: Schema di una relazione per il DB di una biblioteca, che presta i suoi volumi ai tesserati;
la biblioteca possiede un solo esemplare di ogni volume. Ci occorreranno due tabelle, una per i
volumi a prestito (Catalogo) e una per l’anagrafica dei tesserati (Iscritti).
• In CATALOGO, poiché ogni volume è identificato con un codice, CodLib è la chiave primaria.
• Per mantenere l’integrità del DB, e tenere sempre correttamente traccia dei volumi, è anche
necessario che nessuna tupla presenti mai valori identici per la coppia CodLib e Utente.
• In altre parole, ogni libro deve essere in prestito presso un utente diverso.
• Si noti che le colonne UNIQUE possono contenere valori NULL
• In ISCRITTI, la specifica della chiave primaria coinvolge due attributi, pertanto si adotta la
sintassi che prevede che la dichiarazione delle chiavi seguano quella della tabella
• Questa è l’unica sintassi possibile in caso di chiavi multi-attributo.
Nota UNIQUE:
Si noti la differenza tra queste due situazioni:
Nel primo caso il vincolo impone una condizione tale per cui non ci
possono essere due righe che abbiano lo stesso nome e lo stesso
cognome; nel secondo caso, il vincolo può essere violato sia se lo stesso
nome o lo stesso cognome appaiono più di una volta all’interno delle
rispettive colonne.
16
Nota UNIQUE:
ON DELETE specifica cosa fare se una tupla della relazione riferita viene cancellata nella tabella
riferita. Sono presentate quattro opzioni:
ON UPDATE specifica cosa fare se una tupla della relazione riferita viene modificata/aggiornata
nella tabella riferita. Sono presentate quattro opzioni:
Esempi:
Foreign key (1):
Con riferimento all’esempio della biblioteca precedente,
possiamo specificare per il nostro DB le chiavi esterne,
possiamo creare la tabella CATALOGO come segue:
- Se viene cancellato un utente da ISCRITTI, si mantiene
traccia del prestito ma il valore dell’attributo Utente in
CATALOGO per quella tupla è “missing”
- Se viene aggiornato un utente in ISCRITTI, modificando
il CodFisc di un utente, allora lo stesso valore si
aggiornerà in Utente.
fi
17
Foreign key (2):
Mediante il modello relazionale, vogliamo rappresentare la relazione logica che sussiste tra i vigili
urbani che segnalano le infrazioni. Sappiamo che ogni vigile è identificato da un numero di
matricola, nome, cognome; sappiamo inoltre che le infrazioni sono rappresentate con un codice
dell’infrazione, la data, la targa del veicolo interessato (composta da provincia e numero), il vigile
che ha rilevato l’infrazione
•In Infrazioni compare una matricola
(85667) che non è rappresentato in
Infrazioni
ON DELETE:
• Con ON DELETE CASCADE, qualora un cliente voglia essere
rimosso (cancellazione dati dal DB aziendale) tutti gli ordini a lui
associati saranno automaticamente eliminati.
• Così ci si assicura che non ci siano Ordini «orfani» cui non
corrisponderebbe un cliente
• Utile per le pratiche del GDPR
ON UPDATE:
• Se l’ID del cliente viene aggiornato in Customers, l’ID nella tabella
Orders viene reso NULL
• Utile per dissociare gli ordini «vecchi» da quelli associati a un cliente
con un ID «vecchio», senza cancellarli
18
Una query considera le righe (i.e., seleziona – SELECT) che appartengono al prodotto cartesiano
delle relazioni indicate nella FROM clause e seleziona quelle che soddisfano la condizione
espressa nella clausola di qualificazione (WHERE).
La query SQL viene passata al query optimizer per l’esecuzione, ovvero al componente del DBMS
che analizza la query, seleziona una strategia di esecuzione, formula una query equivalente nel
linguaggio procedurale interno al DBMS – nascosto agli occhi dell’utente. In questo modo,
chiunque scriva la query SQL può ignorare il lavoro di traduzione e ottimizzazione a carico del
DBMS
L’ordine con cui appaiono le colonne nella relazione risultato è determinato dall’ordine in cui le
colonne sono elencate nella clausola di proiezione (SELECT)
Se si usa *, l’ordine è quello delle relazioni rappresentate nella clausola FROM – cioè le colonne
specificate nel comando CREATE TABLE di ciascuna relazione.
Esempi:
Or
Esempio:
Trovare il nome e il cognome degli impiegati che lavorano nell’ufficio 20 nel dipartimento
Amministrazione.
Operatori di confronto
SQL fornisce numerosi operatori di confronto, oltre a quelli già visti.
Alcuni sono ridondanti, mentre altri sono stati introdotti per abilitare più
funzionalità.
• L’operatore LIKE (confronto per stringhe) consente operazioni di pattern matching su colonne di
tipo stringa
Chiede tutti gli attributi (*) dalla relazione Libri laddove la seconda lettera del Titolo è r.
Un’espressione usata nella clausola di proiezione origina una tabella con una colonna non
presente nella relazione su cui è effettuata la query – la colonna “aggiunta” è detta virtuale, in
quanto derivata dalle colonne dette di base.
Come funziona
Le tuple che hanno lo steso
IDCliente vengono abbinate,
mentre quelle che non hanno
corrispondenza in nessuna delle
due tabelle non sono incluse nei
risultati
Per i record che hanno una
corrispondenza, tutti gli attributi
della tabella CONTI e tutti gli
attributi della tabella CLIENTI
vengono inclusi nella tabella dei
risultati
Il join effettua il prodotto
cartesiano delle relazioni indicate
nella clausola FROM, applicando
poi la selezione indicata nel
predicato di join.
• Lo schema della relazione risultato è dato dall’unione degli schemi delle relazioni operande
(CONTI e CLIENTI)
• Il grado della relazione risultato è uguale alla somma dei gradi delle relazioni operande
25
JOIN ON
JOIN ON è una operazione di join che specifica le condizioni di unione. La specifica ON definisce il
modo in cui le tabelle coinvolte nella clausola FROM devono essere unite.
ON specifica che le tabelle CONTI e CLIENTI devono essere unite in base alla corrispondenza tra
la colonna IDCliente di CONTI e della colonna IDCliente della tabella CLIENTI
JOIN USING
JOIN USING è una operazione di join che specifica le condizioni di unione nella forma
<Relazione> JOIN <Relazione> USING (<nomi colonne>)
Definisce il modo in cui le tabelle coinvolte se e solo se gli attributi coinvolti (<nome colonne>)
hanno lo stesso nome. Viene richiesta l’uguaglianza dei valori delle colonne specificate
• INNER JOIN (nota semplicemente come «JOIN», o «JOIN interna») :restituisce le righe quando
la condizione di join è soddisfatta in entrambe le tabelle. In altre parole, restituisce solo i record
che corrispondono alla condizione di join in entrambe le tabelle.
• OUTER JOIN (LEFT, RIGHT, FULL, nota come «JOIN esterna»): restituisce tutte le righe di una
tabella e alcune o tutte le righe di un'altra tabella.
• NATURAL JOIN:
• CROSS JOIN: (JOIN Cartesiano): restituisce ogni possibile combinazione di righe delle tabelle
che sono state unite. Poiché restituisce tutte le combinazioni, questa è l'unica JOIN che non
necessita di una condizione di unione e quindi non ha una clausola ON.
Se si omette «INNER» davanti a JOIN, la INNER JOIN è il tipo predefinito che si ottiene.
LEFT JOIN
Talvolta ci occorre mantenere tutti i record di una tabella (a sinistra) e alcuni di un’altra (a destra),
anche se alcune tuple della tabella di sinistra non hanno corrispondenza nella tabella di destra.
26
RIGHT JOIN
La RIGHT JOIN conserva tutti i record della tabella di destra (anche se non ci sono record
corrispondenti nella tabella di sinistra).
FULL JOIN
Se si vogliono conservare
tutti i record di entrambe le
tabelle, occorre usare FULL
JOIN. FULL JOIN accoppia
tutte le colonne
corrispondenti e visualizza
anche tutte le colonne non
corrispondenti di entrambe
le tabelle. Gli attributi non
corrispondenti sono
impostati su NULL
CROSS JOIN
L’operatore CROSS JOIN
restituisce un prodotto cartesiano
tra tutte le tuple della tabella. Non
richiede clausola ON e il numero di
tuple della risultante è uguale al
prodotto delle tuple della prima
relazione per quello della seconda.
È usato di rado poiché dà come
risultato tutte le possibili
combinazioni tra i record di due
tabelle
28
Max Min
Sum AVG
GROUP BY
L’operatore di raggruppamento GROUP BY consente di suddividere le tuple di una tabella in base
al valore di una o più colonne.
- Le colonne da usare si specificano nella clausola GROUP BY del comando SELECT.
- Le tuple su cui eseguire il partizionamento solo quelle che verificano la clausola di qualificazione
di SELECT.
- Nella clausola di proiezione non possono comparire attributi che non compaiano anche nel
GROUP BY.
Esempi
1. In un elenco di città, del quale si
conosce il nome delle città, la
regione di appartenenza, la
popolazione, la sigla di targa, l’anno
di fondazione, si vuole identificare
quante siano le città di ciascuna
delle regioni rappresentate e per
ogni regione quale sia la città meno
popolosa e quale la più vecchia.