Anteprima
Vedrai una selezione di 7 pagine su 28
Appunti Basi di dati Pag. 1 Appunti Basi di dati Pag. 2
Anteprima di 7 pagg. su 28.
Scarica il documento per vederlo tutto.
Appunti Basi di dati Pag. 6
Anteprima di 7 pagg. su 28.
Scarica il documento per vederlo tutto.
Appunti Basi di dati Pag. 11
Anteprima di 7 pagg. su 28.
Scarica il documento per vederlo tutto.
Appunti Basi di dati Pag. 16
Anteprima di 7 pagg. su 28.
Scarica il documento per vederlo tutto.
Appunti Basi di dati Pag. 21
Anteprima di 7 pagg. su 28.
Scarica il documento per vederlo tutto.
Appunti Basi di dati Pag. 26
1 su 28
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

SQL

È più di un semplice linguaggio di query. È il linguaggio di riferimento per l’interrogazione di

DBMS relazionali. Si compone di una parte DDL e di una DML

• DDL - definizione di domini, tabelle, indici, autorizzazioni, viste (sono una versione più logica

delle tabelle), vincoli, procedure, trigger

• DML - linguaggio di query, linguaggio di modifica (update, insert, delete), comandi transazionali

La standardizzazione è stata fondamentale per la sua diffusione.

Le interrogazioni SQL sono dichiarative: l’utente specifica quale informazione è di suo interesse, ma

non come estrarla dai dati. Le interrogazioni vengono tradotte dall’ottimizzatore (query optimizer)

nel linguaggio procedurale interno al DBMS. Il programmatore si focalizza sulla leggibilità, non

sull’efficienza.

Nella sua forma più semplice l’estrazione di dati avviene attraverso il seguente comando:

SELECT ListaAttributi

FROM Tabella

che ha come effetto quello di estrarre da una tabella i valori relativi ad un sottoinsieme degli

attributi della tabella stessa. Tale operazione è equivalente alla PROIEZIONE nell’algebra

relazionale πListaAttributi^Tabella

La lista degli attributi che segue la parola chiave SELECT è detta target list

risultato contiene i dati relativi a tutti gli attributi della

SELECT * FROM Impiegatoàil

tabella.

L’istruzione può essere estesa in modo da effettuare una SELEZIONE delle righe che

select

devono comparire nel risultato. Questo richiede la specifica di una condizione di selezione: una

formula booleana da calcolarsi (riga per riga) in base al valore di alcuni attributi. Il risultato conterrà

solo quelle righe per le quali la condizione di selezione dà valore vero.

Sia gli attributi che le tabelle possono essere rinominati per mezzo di con il costrutto

alias as

La clausola ammette come argomento un'espressione booleana costruita combinando

where

predicati atomici con gli operatori e

and, or not

Oltre ai normali operatori di confronto relazionali (=, <, >, <=, >=, <>), SQL mette a disposizione

l’operatore per il confronto di stringhe. Questo supporta il confronto tra stringhe in cui

like

compaiono due caratteri speciali:

_ (?) può rappresentare un qualsiasi carattere

% (*) può rappresentare una stringa di un numero arbitrario di caratteri (anche nullo)

Cognome inizia con la cà where cognome like ‘C%’

Cognome ha una “o” in seconda posizione e finisce con “i”à ‘_o%i’

JOIN

L’estrazione di informazioni contenute su più tabelle richiede la specifica di: quali siano le tabelle da

prendere in considerazione; quale sia il criterio per correlare le righe delle diverse tabelle.

Questa operazione prende il nome di JOIN tra le tabelle e viene eseguita attraverso due passi:

- Prodotto cartesiano tra le due tabelle: si concatenano ogni riga della prima tabella con ogni riga

della seconda tabella

- Si selezionano le righe conformi al criterio di correlazione

I valori nulli rappresentano tre diverse situazioni:

- un valore non è applicabile

- un valore è applicabile ma sconosciuto

- non si sa se il valore è applicabile o meno

SQL fornisce un predicato per la gestione dei valori nulli. La sintassi è:

- Attributo is [ not ] null

e risulta vero solo se l’attributo ha valore nullo (o non nullo se usato nella forma is not null)

in caso di presenza di NULL si usa la logica a tre valori: V=vero, F=falso, U=unknown

Quando confrontiamo un valore mancante con un valore esistente, il risultato è sconosciuto

UNKNOWN (proprio perché uno dei due valori è mancante e quindi l’espressione non potrà essere

né vera né falsa)

Duplicati:

Nel modello relazionale non si ammette che una relazione possa contenere righe uguali

In SQL possono esserci più righe uguali (dette duplicati) nel risultato di una eliminare i

select:

duplicati è costoso (richiede tempo) e spesso non necessario.

SQL esegue la rimozione dei duplicati solo quando esplicitamente richiesto

nell’interrogazioneàcostrutto select distinct

Join interni ed esterni: sino ad ora la specifica della condizione di join è stata inclusa nella clausola

where. Una sintassi alternativa permette di distinguere le condizioni di join da quelle di selezione tra

le righe. In questo modo è anche possibile specificare le forme esterne dell’operatore di join.

La condizione di join non compare nella clausola where ma nella clausola from:

- (valore di default, è il join dell’algebra relazionale), (questi

inner right, left, full

ultimi tre possono essere seguiti dalla parola chiave outer).

Join naturale: un’estensione di SQL-2 permette di far precedere ad ogni join la parola chiave

In questo modo si consente la specifica del join natural presente nell’algebra

natural.

relazionale, che prevede di utilizzare nel join di due tabelle una condizione di implicita uguaglianza

su tutti gli attributi caratterizzati dallo stesso nome.

Ordinamento: in SQL è possibile specificare che i risultati di una interrogazione siano ordinati sulla

base del valore di alcuni attributi. Questo è consentito attraverso l’uso della clausola order by

posta a seguire la clausola Sintassi:

where. order by Attributo1[ asc | desc ]

Operatori aggregati consentono di estrarre informazioni che rappresentano proprietà di gruppi di

tuple: Gli operatori aggregati vengono gestiti dopo aver

count, sum, max, min, avg.

risolto l’interrogazione in base alle clausole from e where.

-count: conteggio tuple in una relazione

(* restituisce numero righe; restituisce il numero di righe con valore diverso e non

distinct

nullo degli attributi in ListaAttributi; restituisce il numero di righe con valore non nullo degli

all

attributi in ListaAttributi).

-sum ed avg ammettono come argomento solo espressioni che rappresentano valori numerici o

intervalli di tempo.

-max e min richiedono solamente che sull’espressione sia definito un ordinamento (si possono

anche applicare a stringhe di caratteri e istanti di tempo).

Gli attributi NON possono essere mischiati con operatori aggregati!

La specifica della lista di attributi su cui effettuare il raggruppamento avviene attraverso la clausola

group by

La query raggrupperà le righe che possiedono valori uguali sull’insieme di attributi della clausola

group by. Il valore di eventuali operatori aggregati sarà valutato separatamente per ciascun gruppo.

In presenza della clausola group by i valori estratti dall’operazione di SELECT riflettono proprietà

di ciascun gruppo, non di singole tuple: nella target list possono comparire solo un sottoinsieme

degli attributi della clausola group by (oltre agli operatori aggregati)

Le condizioni da verificare a livello di gruppo sono specificate attraverso un nuovo costrutto: la

clausola Questa consente la specifica di un predicato in cui compaiono gli operatori

having.

aggregati. I predicati dove compaiono operatori aggregati possono comparire solo come argomento

della clausola having.

La sintassi prevede l’uso della clausola having anche in assenza di una clausola group by

La condizione espressa nella clausola having viene valutata al termine dell’interrogazione: where

ha precedenza su (i gruppi vengono composti dopo aver verificato la clausola where e solo

having

dopo la composizione dei gruppi si valuta la clausola having).

Interrogazioni di tipo insiemistico

(unione), (intersezione), (o differenza).

union intersect except minus,

Mentre i risultati di intersezione e differenza possono essere espressi utilizzando altri costrutti del

linguaggio (interrogazioni nidificate), l’operatore di unione arricchisce il potere espressivo di SQL

permettendo di scrivere interrogazioni altrimenti non formulabili.

Gli operatori insiemistici assumono come default l’eliminazione dei duplicati (se si vogliono

mantenere i duplicati basta includere la clausola all).

Interrogazioni nidificate fino ad ora abbiamo visto interrogazioni in cui l’argomento della clausola

si basa su condizioni espresse da predicati semplici: confronto riga per riga tra il valore di un

where

attributo ed una costante o il valore di un altro attributo. Ci sono tuttavia interrogazioni che richiedono

una modalità di specifica più complessa, che consenta di effettuare la selezione in base al risultato di

una seconda interrogazione.

La soluzione consiste nell’estendere il tipo di confronti che possono essere specificati nella clausola

Confronto riga per riga tra: il valore di un attributo ed una costante; il valore di un attributo

where.

e un altro attributo; il valore di un attributo e il risultato di una select

(in questo caso l’interrogazione usata x confronto viene definita direttamente all’interno della

clausola where e si parla di interrogazioni nidificate). Ci può essere disomogeneità tra i termini

messi a confronto nella clausola whereà SQL la gestisce con le parole chiave e che

any all

estendono gli operatori di confronto relazionale (=,

<>, <, >, <=, >=).

- Con la condizione risulta vera se il confronto

any

tra attributo e risultato è vero per almeno uno degli

elementi restituiti dall’interrogazione.

- Con la condizione risulta vera se il confronto

all

tra attributo e risultato è vero per tutti gli elementi

restituiti dall’interrogazione.

Deve esserci compatibilità di dominio tra l’attributo

oggetto del confronto ed il risultato

dell’interrogazione.

Per rappresentare il controllo di appartenenza rispetto

ad un insieme, SQL mette a disposizione gli operatori

e che sono del tutto equivalenti agli

in not in

operatori =any e <>all.

L’operatore logico (ed il suo duale può essere usato nelle interrogazioni

exists not exists)

nidificate e restituisce il valore vero solo se l’interrogazione nidificata fornisce come risultato un

insieme non vuoto.

Una select che restituisce una tabella con un solo attributo ed una sola riga prende il nome di scalar

query. Una scalar query può essere inclusa come subquery nella target list di una query.

VISTE il concetto di vista deriva dall’indipendenza logica dei dati. Permette di avere una vista di

dati per ogni utente, indipendentemente dal livello sottostante.

Il modello relazionale permette di definire:

- Relazioni di base, il cui contenuto è autonomo

- Relazioni derivate, il cui contenuto è funzione di altre relazioni (sia di base che derivate)

Le relazioni derivate possono essere di due tipi:

1. Viste materializzate, il cui contenuto è salvato su disco

Le relazioni derivate materializzate sono mem

Dettagli
A.A. 2022-2023
28 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher manuelciardi2912 di informazioni apprese con la frequenza delle lezioni di Basi di dati e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Firenze o del prof Baviello Davide.