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
JOIN USING
applicabile quando le due relazioni hanno colonne col lo stesso nome
<nome relazione> JOIN <nome relazione> USING (<lista nomi colonne>)
NATURAL JOIN
Richiesta l' uguaglianza dei valori di tutte le colonne con lo stesso nome nelle due relazioni
<nome relazione> NATURAL JOIN <nome relazione>
OUTER JOIN
Aggiunge al risultato le tuple che non hanno partecipato al join completandole con NULL
T OUTER JOIN S
• FULL: sia le tuple di T che quelle di S che non partecipano vengono completate e inserite
• LEFT: le tuple di T che non partecipano al join vengono completate e inserite nel risultato
• RIGHT: le tuple di S che non partecipano al join vengono completate e inserite nel risultato
Funzioni di Gruppo
Nella clausola di proiezione possiamo avere anche espressioni che calcolano valori a partire da
insieme di tuple.
• Operano su un insieme di valori
• Producono come risultato un unico valore
• Sono indicate nella clausola di SELECT
Tutte le funzioni di gruppo possono essere usate col qualificatore DISTINCT
Raggruppamento
Le colonne da usare per il raggruppamento sono specificate tramite la parola chiave GROUP BY.
Usando il GROUP BY ogni tupla risultante rappresenta un gruppo di tuple della relazione.
Esistono delle condizioni sui gruppi
È possibile selezionare solo alcuni dei gruppi ottenuti dal parzionamento usando HAVING
• È seguita da un predicato o una combinazione booleana di predicati
• Solo predicati di funzioni di gruppo
Operazioni Insiemistiche
La select da sola non consente di fare unioni, intersezioni e differenze, quindi SQL prevede dei
costruttori per ciò: UNION, INTERSECT, MINUS
UNIONE
Operatore di unione: A UNION B
• Esegue l'unione delle due espressioni A e B
• Richiede la compatibilità di schemi tra A e B (stesso numero di attributi e dominio)
• Rimuove i duplicati (UNION rimuove i duplicati UNION ALL no)
• La tabella risultato ha di default come il nome della colonna il nome della prima query (se
non mi va bene rinomino le colonne delle query usando AS)
INTERSEZIONE
Operatore di intersione: A INTERSECT B
• Esegue l'intersezione delle due espressioni A e B
• Richiede la compatibilità di schemi tra A e B
• Tabella di risultato ha il nome di default della prima colonna
DIFFERENZA
Operatore di differenza A EXCEPT/MINUS B
• Esegue la differenza delle due espressioni A e B
• Richiede la compatibilità di schemi tra A e B
• Leva da A gli elementi di B
06 - Sotto-Interrogazioni
mercoledì 18 ottobre 2017
12:09
Sotto-interrogazioni (Subquery)
È un' istruzione select contenuta all'interno di un'altra interrogazione, permette di suddividere un
problema complesso in sotto problemi più semplici.
È possibili introdurle nella clausola WHERE, HAVING e nella clausola FROM.
Nella clausola WHERE usata per:
• Determinare uno o più valori da usare come valori di confronto di un predicato
dell'interrogazione
• Esprimere quantificazioni esistenziali (EXIST / NOT EXIST)
Tre tipi di Sotto-Interrogazioni
• Subquery Scalare: comando SELECT che restituisce un solo valore
SELECT Max(Valutazione) FROM Film;
È possibile esprimere interrogazioni complesse, prima il DBMS calcola la subquery
Se restiuisce più di un valore genera un errore run-time
Se voglio restituire più valori devono essere specificati nella clausola where
• Subquery di Colonna: comando SELECT che restituisce un colonna
SELECT Valutazione FROM Film;
Utilizzo operatori di confronto: ANY(almeno uno dei valori) | ALL(tutti i valori)| NOT
IN (non è in..)
Per concetto di esclusione si può utilizzare NOT IN ma anche le formule EXCEPT
• Subquey di Tabella: comando SELECT che restituisce una tabella
SELECT Titolo, Regista FROM Film;
Se restituisce come risultato una tabella con più di due attributi
• Nel predicato va inserito il costruttore della tupla
• Elencare gli attributi tra () [ (NomeAttributo, NomeAttributo) ]
Sotto Interrogazioni Correlate
Sotto-interrogazione eseguita ripetutamente per ogni tupla candidati considerata nella valutazione;
ogni esecuzione è correlata al valore di uno o più attributi delle tuple candidate nella interrogazione
principale.
EXIST e NOT EXIST
Una sotto-interrogazione può essere usata con gli operatori:
EXIST(sq): TRUE se sq restituisce almeno una tupla
NOT EXIST(sq): TRUE se sq non restituisce alcuna tupla
Questi due operazioni possono essere usate in altervia a intersezione e differenza
07 - SQL: DML - Istruzioni di Aggiornamento
mercoledì 1 novembre 2017
17:19
Tre comandi per la manipolazione del contenuto di relazioni:
• INSERT: inserimento di tuple
• UPDATE: modifica di tuple
• DELETE: cancellazione di tuple
Operazioni di Aggiornamento
Modifca dello stato della base di dati, quindi bisogna verificare che siano rispettati i vincoli.
Ogni istruzione può aggiornare il contenuto di una sola tabella
Operazioni di Inserimento
• Inserimento di una tupla: assegna di un valore costante ad ogni attributo
• Inserimento di più tuple: lette da altre tabelle mediante un'istruzione SELECT
Inserimento
INSERT INTO S [(C1,C2,…,Cn)]
{VALUES (v1,v2,…,Vn) | sq};
I valori da assegnare alla nuova tupla possono:
• Essere specificati esplicitamenti (clausola VALUES)
• Determinati tramite una sotto interrogazione (sq)
Cancellazione
DELETE FROM S [<alias>] [WHERE F];
Se non è specificata nessuna clausola di qualificazione vengono cancellate tutte le tuple
Modifica
UPDATE S [<alias>]
SET C1 = {e1 | NULL}, …, Cn = {en | NULL}
[WHERE F]
Se non è specificata alcuna clausola di qualificazione vengono modificate tutte le tuple
Usate per:
• Determinare le tuple da modificare
• Determinare i nuovi valori da assegnare alla tuple
08 - SQL: Vincoli di Integrità & Viste
giovedì 2 novembre 2017
14:05
Vincoli di Integrità
Oltre ai vincoli già identificati come NOT NULL, UNIQUE o PRIMARY KEY, FOREIGN KEY,
esistono altri vincoli che dipendono dal dominio applicativo.
• Nel comando CREATE TABLE è possibile definire:
Vincoli CHECK su colonna
o • Specifica affianco alla colonna CHECK più predicato
Vincoli CHECK su relazione
o • Aggiunta affianco alla relazione CHECK più predicato
• Può contenere sotto interrogazioni che riferiscono ad altre tabelle
È possibile specificare i vincoli associandone un nome usando CONSTRAINT e il nome del vincolo
[…
Colloc DECIMAL (4) CONSTRAINT Pkey PRIMARY KEY,
…]
Se si aggiunge una relazione mediante ALTER TABLE ADD CONSTRAINT è possibile solo se le
tuple soddisfano procedentemente il vincolo
Utilizzata per poter eliminare o modificare successivamente il vincolo chiamato per esempio "pkey"
Q di leggibilità:
È consigliabile espreimere con vincoli CHECK solo condizioni che fanno riferimento a singole tuple
della relazione cui associamo il vincolo (maggiore comprensibilità)
Devo sempre usare un asserzione se faccio riferimento a tuple di tabelle diverse
Asserzioni
Elementi dello schema che danno un nome al vincolo check
Obbligatorio se il vincolo coinvolge più relazioni
CREATE ASSERTION <nome asserzione>
CHECK (<condizione>)
Un vincolo CHECK è violato se la valutazione della condizione di controllo restituisce FALSE
In presenza di valori nulli per capire se è vero o falso uso una logica a 3 stati, quindi si ha anche il
valore di unknown(?) impossibile da determinare
Valori Nulli
• Se il risultato di un predicato è NULL restituisce ?
• Nelle espressioni se un argomento è NULL allora il valore dell' intera è NULL
• Nel calcolo delle funzioni di gruppo vengono escluse le tuple con valore nullo per la
colonna
Conseguenza: SUM(e1 + e2) pùò dare un risultato diverso da SUM(e1) + SUM(e2)
• Una tupla per cui il valore di verità è ? non viene resitutita dall'interrogazione
• In un vincolo di integrità se la valutazione della condizione restituisce ? Il vincolo non è
violato
IS NULL
• Applicato ad un dato restituisce true se la tupla ha valore nullo per l'attributo
IS NOT NULL
• Applicato ad un dato restituisce true se la tuple ha valore non nullo per l'attributo
09 - Viste
martedì 7 novembre 2017
11:10
Viste
Ulteriori astrazione del livello logico, permettono di vedere dati nel livello logico oppure campi
calcolati a partire dalle informazioni del livello logico
• Relazione virtuale (contenuto definito tramite interrogazione SQL)
• Contenuto non memorizzato fisicamente nella base di dati (non continene tuple)
• Può essere usata come una relazione
• Interrogazione valutata ogni volta
• Meccanismo delle viste è utile per
• Semplificare accesso dati
• Fornire indipendenza logica
• Garantire la protezione dei dati
Comando Viste:
Creazione viste:
CREATE VIEW <nome vista> [(<lista nomi colonne>)]
AS <interrogazione>
[WITH [{LOCAL | CASCADED }] CHECK OPTION];
Cancellazione di vista:
DROP VIEW <nome vista>;
Su una vista si possono eseguire sia interrogazioni che aggiornamenti sotto condizioni.
L'interrogazione può contenere operazioni di join e fare uso di funzioni di gruppo e espressioni
Ad esempio è possibile su una vista
• Effettuare proiezioni
• Specificare condizioni di ricerca
• Effetture join con altre relazioni
• Effettuare raggruppamenti
• Definire viste
Check Option
Una vista può contenere una condizione sul contenuto delle tuple, quindi solamente le tuple che
soddisfano questa condizione appartengono alla vista.
Per assicurarsi che le tuple inserite siano accettate solo se verificano la condizione si usa la
clausola CHECK OPTION
Nel caso in cui siamo in presenza di viste di altre viste si complica perché entrambe possono
essere definite con CHECK OPTION, quindi si utilizzano due alternative:
• LOCAL: verifica solo la query di definizione della vista in oggetto
• CASCADED: verifica ricorsivamente tutte le query delle viste coinvolte
10 - Sviluppo di Applicazioni per Basi di Dati
martedì 14 novembre 2017
11:07
Estensione linguaggi di Programmazione
Integrazione di due linguaggi
o: SQL e un linguaggio generico
• Impedance mismatch dovuto alle differenze tra i due lingu