Sistemi per il recupero delle informazioni
This presentation is the property of its rightful owner.
Sponsored Links
1 / 162

Sistemi per il recupero delle informazioni PowerPoint PPT Presentation


  • 92 Views
  • Uploaded on
  • Presentation posted in: General

Sistemi per il recupero delle informazioni. RIASSUNTO. ESEMPIO. ESEMPIO. VIENE TRADOTTO NELLO SCHEMA MUSEI ( NomeM , Città, Indirizzo, Direttore) ARTISTI ( NomeA , Nazionalità, DataN, DataM) OPERE ( Codice , Anno, Titolo, NomeM *, NomeA *) PERSONAGGI (Personaggio, Codice *)

Download Presentation

Sistemi per il recupero delle informazioni

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Sistemi per il recupero delle informazioni

Sistemi per il recupero delle informazioni

RIASSUNTO


Esempio

ESEMPIO


Esempio1

ESEMPIO

VIENE TRADOTTO NELLO SCHEMA

MUSEI (NomeM, Città, Indirizzo, Direttore)

ARTISTI (NomeA, Nazionalità, DataN, DataM)

OPERE (Codice, Anno, Titolo, NomeM*, NomeA*)

PERSONAGGI (Personaggio, Codice*)

DIPINTI (Codice*, Tipo, Larghezza, Altezza)

SCULTURE (Codice*, Materiale, Altezza, Peso)


Relazione e tabella

Orario

Chimica

Insegnamento

Sistemi inform.

Analisi matem. I

Fisica II

Fisica I

Basi di dati

Piero Rossi

Luigi Neri

Docente

Piero Rossi

Mario Bruni

Mario Bruni

Nicola Mori

N1

N3

N1

N2

N3

Aula

N1

9:45

11:45

Ora

9:45

9:45

8:00

8:00

ORARIO (Insegnamento, Docente, Aula, Ora)

RELAZIONE E TABELLA

Relazione e tabella sono sinonimi


Schema

Orario

Chimica

Insegnamento

Sistemi inform.

Analisi matem. I

Fisica II

Fisica I

Basi di dati

Piero Rossi

Luigi Neri

Docente

Piero Rossi

Mario Bruni

Mario Bruni

Nicola Mori

N1

N3

N1

N2

N3

Aula

N1

9:45

11:45

Ora

9:45

9:45

8:00

8:00

ORARIO (Insegnamento, Docente, Aula, Ora)

SCHEMA

Le colonne della tabella formano

lo schema della relazione


Istanze

Orario

Chimica

Insegnamento

Sistemi inform.

Analisi matem. I

Fisica II

Fisica I

Basi di dati

Piero Rossi

Luigi Neri

Docente

Piero Rossi

Mario Bruni

Mario Bruni

Nicola Mori

N1

N3

N1

N2

N3

Aula

N1

9:45

11:45

Ora

9:45

9:45

8:00

8:00

ORARIO (Insegnamento, Docente, Aula, Ora)

ISTANZE

I contenuti delle righe della tabella formano

le istanze della relazione


Database

Corsi

Aule

Docente

Aula

Corso

Nome

Edificio

Piano

DS3

OMI

Terra

Rossi

Bruni

Bruni

Neri

N3

G

N3

DS3

Basi di dati

Controlli

Reti

Sistemi

N3

OMI

Terra

G

Pincherle

Primo

Aula

Edificio

Piano

Corso

CorsiSedi

Sistemi

N3

OMI

Terra

N3

OMI

Terra

Reti

G

Pincherle

Primo

Controlli

DATABASE

Un database e’ un insieme di tabelle


Sistemi per il recupero delle informazioni

DA MODELLO A OGGETTI A MODELLO RELAZIONALE

  • La trasformazione di uno schema a oggetti in uno schema relazionale avviene eseguendo i seguenti passi:

  • rappresentazione delle classi

  • rappresentazione delle associazioni uno a uno e uno a molti;

  • rappresentazione delle associazioni molti a molti o non binarie;

  • rappresentazione delle gerarchie di inclusione;

  • rappresentazione degli attributi multivalore;

  • appiattimento gli attributi composti


Riassumendo

Riassumendo

Le regole di traduzione

  • Entità: diventano tabelle ed i loro identificatori chiavi primarie

  • Associazioni 1-1: se obbligatorie si procede come per le 1-N scegliendo il lato in cui includere gli attributi e la chiave esterna; se una opzionale si includono gli attributi e la chiave esterna sul lato“obbligatorio”; se entrambe opzionali si costruisce una tabella autonoma come per il caso N-N.

  • Associazioni1-N:gli attributi dell’associazione e la chiave primaria della tabella relativa all’entità dal lato “N” sono inclusi nella tabella relativa all’entità dal lato“1”.

  • Associazioni N-N: diventano tabelle con chiave primaria formata dall’unione delle chiavi delle entità coinvolte


Sistemi per il recupero delle informazioni

Accesso ai Dati nei Sistemi Relazionali

  • Una base di dati può essere utilizzata con due modalità:

    • interattivamente: l’utente interagisce direttamente con la base di dati presentando al sistema una richiesta di dati. Tale richiesta prende il nome di interrogazione (query). L’interrogazione viene interpretata dal sistema, che in risposta restituisce i dati richiesti. Nella richiesta devono essere specificate le proprietà dei dati che interessano. Se ad es. vogliamo l’elenco dei libri scritti da Calvino, nella richiesta deve essere specificata questa proprietà. L’interrogazione deve essere formulata per mezzo di un linguaggio formale.

    • mediante programmi:questo uso è riservato ad utenti programmatori. Le interrogazioni fanno parte di un programma applicativo che può essere eseguito dal sistema numerose volte, ed il risultato delle interrogazioni può essere utilizzato dal programma per successive elaborazioni


Sistemi per il recupero delle informazioni

LINGUAGGI RELAZIONALI

  • Come esempio di linguaggi per l’uso interattivo di basi di dati, relazionali, vediamo

    • l’algebra relazionale: insieme di operatori su relazioni che danno come risultato relazioni. Non si usa come linguaggio di interrogazione dei DBMS ma come rappresentazione interna delle interrogazioni.

    • il linguaggio SQL (Structured Query Language), che offre una sintassi per l’algebra relazionale.

  • Il termine algebra è dovuto al fatto che sono previsti operatori (query) che agiscono su relazioni e producono altre relazioni come risultato.

    Gli operatori possono essere combinati per formare espressioni complesse.


Algebra relazionale

Algebra relazionale

  • Insieme di operatori

    • su relazioni

    • che producono relazioni (tabelle)

    • e possono essere composti per svolgere operazioni più complesse


Sistemi per il recupero delle informazioni

OPERATORI FONDAMENTALI

  • Gli operatori fondamentali dell’algebra relazionale sono:

    • Ridenominazione;

    • Unione;

    • Intersezione;

    • Differenza;

    • Proiezione;

    • Restrizione (o Selezione);

    • Prodotto.

  • I simboli R,S,... denotano relazioni, A, B,…attributi e X,Y,…insiemi di attributi


Sistemi per il recupero delle informazioni

Padre

Figlio

Adamo

Abele

Adamo

Caino

Abramo

Isacco

Padre

Figlio

Adamo

Abele

Adamo

Caino

Abramo

Isacco

RIDENOMINAZIONE

Paternità

 Genitore  Padre (Paternità)

Genitore


Sistemi per il recupero delle informazioni

ESEMPIO DI UNIONE


Sistemi per il recupero delle informazioni

ESEMPIO DI INTERSEZIONE


Sistemi per il recupero delle informazioni

ESEMPIO DI DIFFERENZA


Sistemi per il recupero delle informazioni

selezione

proiezione

  • operatori "ortogonali“

  • selezione:

    • decomposizione orizzontale

  • proiezione:

    • decomposizione verticale


Sistemi per il recupero delle informazioni

Matricola

Cognome

Filiale

Stipendio

7309

Neri

Napoli

55

9553

5998

5698

Rossi

Rossi

Neri

Milano

Roma

Roma

44

64

64

ESEMPIO PROIEZIONE

  • cognome e filiale di tutti gli impiegati

Cognome, Filiale (Impiegati)


Sistemi per il recupero delle informazioni

ESEMPIO RESTRIZIONE

  • Impiegati che

    • guadagnano più di 50

    • guadagnano più di 50 e lavorano a Milano

    • hanno lo stesso nome della filiale presso cui lavorano


Operatori booleani

Operatori booleani

  • Connettivi logici

    •  (AND),

    •  (OR),

    •  (NOT)

  • Operatori di confronto

    • = (uguale)  (diverso)

    •  (maggiore)  (minore)

    •  (maggiore o uguale)

    •  (minore o uguale)


Sistemi per il recupero delle informazioni

Impiegati

Matricola

Cognome

Filiale

Stipendio

7309

Rossi

Roma

55

5698

9553

9553

5698

5998

Neri

Neri

Neri

Milano

Milano

Napoli

Milano

Milano

Napoli

Milano

44

44

64

64

64

  • impiegati che guadagnano più di 50

Stipendio > 50 (Impiegati)


Sistemi per il recupero delle informazioni

Impiegati

Matricola

Cognome

Filiale

Stipendio

7309

7309

Rossi

Rossi

Roma

Roma

55

55

9553

5698

9553

5998

5698

5998

Neri

Neri

Milano

Milano

Neri

Neri

Napoli

Milano

Milano

Milano

Milano

Napoli

64

64

64

44

64

44

  • impiegati che guadagnano più di 50 e lavorano a Milano

Stipendio > 50 AND Filiale = 'Milano' (Impiegati)


Selezione e proiezione

Matricola

Cognome

Filiale

Stipendio

7309

Rossi

Roma

55

9553

9553

5698

5698

5998

Milano

Milano

Neri

Neri

Neri

Milano

Milano

Napoli

Napoli

Milano

44

64

44

64

64

Selezione e proiezione

  • Combinando selezione e proiezione, possiamo estrarre interessanti informazioni da una relazione

  • matricola e cognome degli impiegati che guadagnano più di 50

Stipendio > 50 (Impiegati)

 Matricola,Cognome ( )


Sistemi per il recupero delle informazioni

Numero

Voto

Numero

Candidato

1

25

1

Mario Rossi

2

13

2

Nicola Russo

3

27

3

Mario Bianchi

4

28

4

Remo Neri

Numero

Mario Rossi

Candidato

25

Voto

1

Nicola Russo

13

2

Mario Bianchi

27

3

Remo Neri

28

4

PRODOTTO (Join)


Esempio i

ESEMPIO - I

  • join completo: ogni ennupla contribuisce al risultato


Esempio ii

ESEMPIO - II

  • Join non completo: alcuni valori tra gli attributi comuni non coincidono, quindi, alcune ennuple non partecipano al JOIN


Esempio iii

ESEMPIO - III

  • Join vuoto: caso limite

    • potrebbe anche succedere che nessuna ennupla trovi il corrispettivo


Esempio iv

ESEMPIO - IV

  • L’altro caso estremo del JOIN

    • ogni ennupla di R1 si combina con ogni ennupla di R2

    • la cardinalita’ del risultato e’ il prodotto delle cardinalita’


Prodotto cartesiano

Impiegati

Codice

Capo

Impiegato

Reparto

A

Mori

Rossi

A

B

B

B

Bruni

Bruni

Bruni

Neri

B

Bianchi

B

Reparti

Impiegato

Reparto

Codice

Capo

Rossi

A

A

A

A

Mori

Rossi

A

B

Bruni

Neri

B

A

Mori

Neri

B

B

Bruni

Bianchi

B

A

Mori

Bianchi

B

B

Bruni

Prodotto cartesiano

Impiegati JOIN Reparti


Sistemi per il recupero delle informazioni

Sistemi per il recupero delle informazioni

DATABASE MANAGEMENT SYSTEM (DBMS)


Sistemi per il recupero delle informazioni

COS’E’ UNA BASE DATI

  • Una base di dati è una raccolta di dati permanenti suddivisi in due categorie:

    • I METADATI

    • I DATI


Sistemi per il recupero delle informazioni

COS’E’ UNA BASE DATI

I METADATI

  • i metadati, ovvero lo schema della base di dati, sono una raccolta di definizioni che descrivono

    • la struttura di alcuni insiemi dati,

    • le restrizioni sui valori ammissibili dei dati

    • le relazioni esistenti fra gli insiemi.

  • Lo schema va definito prima di creare i dati ed è indipendente dalle applicazioni che usano la base di dati.


Sistemi per il recupero delle informazioni

COS’E’ UNA BASE DATI

I DATI

  • i dati, le rappresentazioni dei fatti conformi alle definizioni dello schema, con le seguenti caratteristiche:

  • sono organizzati in insiemi omogenei, fra i quali sono definite delle relazioni.

  • b) sono molti, in assoluto e rispetto ai metadati, e non possono essere gestiti in memoria temporanea;

  • c) sono permanenti, cioè, una volta creati, continuano ad esistere finché non sono esplicitamente rimossi;

  • d) sono accessibili mediante transazioni;

  • e) sono protetti sia da accesso da parte di utenti non autorizzati, sia da corruzione dovuta a malfunzionamenti hardware e software;

  • f) sono utilizzabili contemporaneamente da utenti diversi.


Sistemi per il recupero delle informazioni

DataBase Management System (DBMS) - I

  • Le caratteristiche delle basi di dati sono garantite da un sistema per la gestione di basi di dati (DBMS, Data Base Management System), che ha il controllo dei dati e li rende accessibili agli utenti autorizzati.

  • Un DBMS è un sistema centralizzato o distribuito che offre opportuni linguaggi

    • per definire lo schema della base di dati,

    • per scegliere le strutture dati per la memorizzazione dei dati,

    • per usare la base di dati interattivamente o da programmi.


Database management system dbms ii

DataBase Management System (DBMS) - II

  • Un sistema di gestione di basi di dati è un sistema software in grado di gestire collezioni di dati che siano grandi, condivise e persistenti, assicurando la loro affidabilità e privatezza.

  • Un DBMS deve essere efficiente ed efficace.

    • Esempi di prodotti software disponibili sul mercato: Access, DB2, Oracle, Informix, Sybase, SQLServer


I database sono

I DATABASE SONO...

  • grandi

    • dimensioni (molto) maggiori della memoria centrale dei sistemi di calcolo utilizzati

    • il limite deve essere solo quello fisico dei dispositivi

  • persistenti

    • hanno un tempo di vita indipendente dalle singole esecuzioni dei programmi che le utilizzano

  • condivisi

    • ogni organizzazione è divisa in settori o comunque svolge diverse attività . Ciascun settore/attività ha un (sotto) sistema informativo (non necessariamente disgiunto)

    • Una base di dati e' una risorsa integrata, condivisa fra applicazioni

    • Conseguenze:

      • Attivita' diverse su dati condivisi: meccanismi di autorizzazione

      • Accessi di più utenti ai dati condivisi:controllo della concorrenza


I dbms garantiscono

I DBMS GARANTISCONO…

  • PRIVATEZZA

    • Si possono definire meccanismi di autorizzazione

      • l'utente A è autorizzato a leggere tutti i dati e a modificare quelli sul ricevimento

      • l'utente B è autorizzato a leggere X e a modificare Y

  • AFFIDABILITA`(per le basi di dati):

    • resistenza a malfunzionamenti hardware e software

    • una base di dati è una risorsa pregiata e quindi deve essere conservata a lungo termine


I dbms devono essere

I DBMS DEVONO ESSERE …

  • EFFICIENTI

    • Cercano di utilizzare al meglio le risorse di spazio di memoria (principale e secondaria) e tempo (di esecuzione e di risposta)

    • I DBMS, con tante funzioni, rischiano l'inefficienza e per questo ci sono grandi investimenti e competizione

    • L’efficienza è anche il risultato della qualità delle applicazioni

  • EFFICACI

    • Cercano di rendere produttive le attività dei loro utilizzatori, offrendo funzionalità articolate, potenti e flessibili:

      • il corso è in buona parte dedicato ad illustrare come i DBMS perseguono l'efficacia


Sistemi per il recupero delle informazioni

FUNZIONALITA’ DEI DBMS

Un DBMS offre specifiche funzionalità per i seguenti scopi:

– definizione di basi di dati;

– uso dei dati;

– controllo dei dati;

– amministrazione della base di dati;

– distribuzione dei dati.


Architettura standard i

Livello

esterno

Livello

esterno

Livello

esterno

Livello logico

Livello interno

database

ARCHITETTURA STANDARD - I

utente

utente

utente

utente

utente


Linguaggi per database

LINGUAGGI PER DATABASE

  • Un altro contributo all’efficacia: disponibilità di vari linguaggi e interfacce

    linguaggi testuali interattivi (SQL)

    comandi (SQL) immersi in un linguaggio ospite (Pascal, Java, C ...)

    comandi (SQL) immersi in un linguaggio ad hoc, con anche altre funzionalità (p.es. per grafici o stampe strutturate)

    con interfacce amichevoli (senza linguaggio testuale)


Sistemi per il recupero delle informazioni

Controllo dei dati

  • Una caratteristica molto importante dei DBMS è il tipo di meccanismi offerti per garantire le seguenti proprietà di una base di dati:

    • integrità

    • affidabilità

    • sicurezza


Transazioni per l utente

TRANSAZIONI (PER L‘UTENTE)

  • Esempi:

    • versamento presso uno presso sportello bancario

    • emissione di certificato anagrafico

    • dichiarazione presso l’ufficio di stato civile

    • prenotazione aerea

  • Due accezioni

    • Per l'utente:

      • programma a disposizione, da eseguire per realizzare una funzione di interesse

    • Per il sistema:

      • sequenza indivisibile di operazioni


Sistemi per il recupero delle informazioni

Sistemi per il recupero delle informazioni

VISTE


Viste

Viste

  • Rappresentazioni diverse per gli stessi dati (schema esterno)

  • Relazioni di base: contenuto autonomo

  • Relazioni derivate:

    • relazioni il cui contenuto è funzione del contenuto di altre relazioni (definito per mezzo di interrogazioni)

  • Le relazioni derivate possono essere definite su altre derivate

  • Due tipi di relazioni derivate:

    • viste materializzate

    • relazioni virtuali (o viste)


Viste materializzate e virtuali

Viste materializzate e virtuali

  • relazioniderivate memorizzate nella base di dati

    • vantaggi:

      • immediatamente disponibili per le interrogazioni

    • svantaggi:

      • ridondanti

      • appesantiscono gli aggiornamenti

      • sono raramente supportate dai DBMS

  • relazioni virtuali (o viste):

    • sono supportate dai DBMS (tutti)

    • una interrogazione su una vista viene eseguita "ricalcolando" la vista (o quasi)


Viste esempio

Impiegato

Reparto

Reparto

Capo

Rossi

A

A

Mori

Afferenza

Direzione

Neri

B

B

B

Bruni

Bruni

Bianchi

Bianchi

B

B

Viste, esempio

  • una vista:

    Supervisione =

    PROJ Impiegato, Capo (Afferenza JOIN Direzione)


Viste motivazioni

Viste, motivazioni

  • Schema esterno: ogni utente vede solo

    • ciò che gli interessa e nel modo in cui gli interessa, senza essere distratto dal resto

    • ciò che e' autorizzato a vedere (autorizzazioni)

  • Strumento di programmazione:

    • si può semplificare la scrittura di interrogazioni: espressioni complesse e sottoespressioni ripetute

  • L'utilizzo di viste non influisce sull'efficienza delle interrogazioni


Viste e aggiornamenti attenzione

Impiegato

Reparto

Rossi

A

Reparto

Capo

Neri

Neri

Neri

B

B

B

A

Mori

B

B

B

B

B

Bruni

Bruni

Bruni

Bruni

Bruni

Verdi

A

B

B

B

B

C

Bruni

Bruni

Bruni

Bruni

Bruni

Supervisione

Impiegato

Capo

Rossi

Rossi

Rossi

Mori

Mori

Mori

Neri

Neri

Neri

Bruni

Bruni

Bruni

Bruni

Bruni

Verdi

Mori

Viste e aggiornamenti, attenzione

Afferenza

Direzione

  • Vogliamo inserire, nella vista, il fatto che Lupi ha come capo Bruni; oppure che Belli ha come capo Falchi; come facciamo?


Viste e aggiornamenti

Viste e aggiornamenti

  • "Aggiornare una vista":

    • modificare le relazioni di base in modo che la vista, "ricalcolata" rispecchi l'aggiornamento

  • L'aggiornamento sulle relazioni di base corrispondente a quello specificato sulla vista deve essere univoco

  • In generale però non è univoco!

  • Ben pochi aggionamenti sono ammissibili sulle viste


Sistemi per il recupero delle informazioni

Sistemi per il recupero delle informazioni

IL LINGUAGGIO SQL


Sistemi per il recupero delle informazioni

INTRODUZIONE

  • Le interrogazioni devono essere scritte in un linguaggio formale con caratteristiche tali da renderlo adatto ad esprimere interrogazioni sulla BD, e da essere facilmente interpretato dal sistema. Il linguaggio generalmente usato si chiama SQL (Structured Query Language)

  • È un linguaggio di interrogazione e manipolazione della base dati e delle informazioni in essa contenute

  • Creato negli anni ’70 presso IBM , inizialmente solo come linguaggio di interrogazione. Ora è linguaggio di riferimento per DataBase relazionali. Standardizzato grazie al lavoro di ISO (international standard organization) e ANSI (american national standard institute)


Sistemi per il recupero delle informazioni

SQL

  • originariamente "Structured Query Language", ora "nome proprio"

  • linguaggio con varie funzionalità:

    • contiene sia il DDL (schema) sia il DML(istanza)

  • ne esistono varie versioni

    • vediamo gli aspetti essenziali, non i dettagli

  • prima proposta SEQUEL (1974);

  • prime implementazioni in SQL/DS e Oracle (1981)

  • dal 1983 ca. "standard di fatto"

  • standard (1986, poi 1989 e infine 1992, 1999) - ISO, ANSI

    • standard per i software che usano il modello relazionale

    • recepito solo in parte


Ddl dml dcl

DDL, DML, DCL

  • Data Definition Language (DDL)

    • permette di creare e cancellare DB o di modificarne la struttura. Sono i comandi DDL a definire la struttura del DB e quindi i dati in esso contenuti. Ma non fornisce gli strumenti per modificare i dati stessi: per tale scopo si usa il DML. L’utente deve avere i permessi necessari per agire sulla struttura del DB che vengono dati tramite il DCL

  • Data Manipulation Language (DML)

    • permette di inserire, cancellare, modificare e leggere i dati all’interno delle tabelle di un DB. La struttura di questi dati deve essere già stata definita tramite il DDL. Il permesso di accedere ai dati deve essere assegnato all’utente tramite il DCL.

  • Data Controlo Language (DCL)

    • serve a fornire o revocare agli utenti i permessi per poter usare i comandi DML e DDL oltre agli stessi comandi DCL.


Sistemi per il recupero delle informazioni

CREAZIONE DI TABELLE

Per definire una relazione (detta tabella nella terminologia SQL), si usa il comando “create table”: definisce uno schema di relazione e ne crea un’istanza vuota; specifica attributi, domini e vincoli; ad esempio

Libri(titolo, autore, codice_isbn)


Create table esempio

CREATE TABLE, esempio

CREATE TABLEImpiegato(

Matricola CHAR(6) PRIMARY KEY,

Nome CHAR(20) NOT NULL,

Cognome CHAR(20) NOTNULL,

Dipart CHAR(15),

Stipendio NUMERIC(9) DEFAULT 0,

FOREIGNKEY(Dipart) REFERENCESDipartimento(NomeDip),

UNIQUE (Cognome,Nome)

)


Domini

Domini

  • Domini elementari (predefiniti)

    • Carattere: singoli caratteri o stringhe, anche di lunghezza variabile

    • Bit: singoli booleani (flag) o stringhe di bit

    • Numerici:

      • esatti (es: numeric, decimal)

      • approssimati (es: float)

    • Data, ora, intervalli di tempo – UTC (Universal time coordinate)

    • Introdotti in SQL:1999:

      • Boolean

      • BLOB, CLOB (Binary/Character large object): per grandi immagini e testi

  • Domini definiti dall'utente (semplici, ma riutilizzabili)


Sistemi per il recupero delle informazioni

VINCOLI

  • A ogni attributo possono essere associati dei vincoli

  • default:indica il valore che un attributo deve avere quando viene inserito un record che, in corrispondenza di quell’attributo non ha assegnato alcun valore

  • not null: i valori inseriti in quel campo devono essere diversi non nulli

    • Es: Cognome CHAR(20) not null

  • unique:il valore può comparire una volta sola

  • primary key: chiave primaria, (una sola, implica NOT NULL)


Sistemi per il recupero delle informazioni

VINCOLI

  • Il valore di un attributo dichiarato NOT NULL va obbligatoriamente specificato quando si aggiunge un’ennupla alla relazione.

  • Un altro vincolo è l’eventuale chiave primaria dichiarata con l’opzione primary key. Gli attributi della chiave primaria non possono assumere valori NULL.

  • Quando nella definizione di una tabella sono dichiarati dei vincoli il sistema che gestisce la BD controlla che le operazioni che modificano la tabella inserendo nuove ennuple o modificando i valori di attributi non violino i vincoli dichiarati. Se un vincolo può essere violato l’operazione non viene eseguita e viene segnalata una condizione di errore


Primary key

PRIMARY KEY

  • Matricola CHAR(6) PRIMARY KEY

  • Matricola CHAR(6), …, PRIMARY KEY (Matricola)


Sistemi per il recupero delle informazioni

CHIAVI ESTERNE

Vediamo come introdurre una chiave esterna attraverso il comando Foreign Key

  • create table studenti (

  • nome char(20),

  • matricola char(8) not null,

  • provincia char(2),

  • anno_nascita smallint,

  • primary key (matricola)

  • foreign key (codice) references CDL,

  • on delete no action,

  • )

  • create table CDL (

  • facoltà char(20),

  • nome char(20) not null,

  • primary key (codice),

  • )


Sistemi per il recupero delle informazioni

CHIAVI ESTERNE

  • Quando si dichiara un vincolo di chiave esterna, il sistema fa i seguenti controlli:

  • 1. quando si inserisce un’ennupla nella tabella Studenti, o quando si modifica il campo chiave esterna, il valore della chiave esterna deve essere presente in un’ennupla della tabella CDL;

  • 2. quando si elimina un’ennupla dalla tabella CDL, se il valore della sua chiave primaria è usato come valore di una chiave esterna di un’ennupla della tabella Studenti, allora sono possibili tre scelte:

    • a.on delete no action: per proibire la cancellazione dell’ennupla da CDL. Questa opzione vale anche quando si modifica il valore della chiave primaria di CDL;

    • b.on delete cascade, per eliminare sia l’ennupla da CDL che tutte le ennuple di Studenti che usano il valore della chiave primaria dell’ennupla che si elimina;

    • c.on delete set null, per eliminare l’ennupla da CDL e porre a null il valore della chiave esterna di tutte le ennuple di Studenti che usano il valore della chiave primaria dell’ennupla che si elimina.


Vincolo di integrit referenziale

Vincolo di integrità referenziale

  • Un vincolo di integrità referenziale (“foreign key”) fra gli attributi X di una relazione R1 e un’altra relazione R2 impone ai valori su X in R1 di comparire come valori della chiave primaria di R2


Azioni compensative

Azioni compensative

  • Esempio:

    • Viene eliminata una ennupla causando una violazione

  • Comportamento “standard”:

    • Rifiuto dell'operazione

  • Azioni compensative:

    • Eliminazione in cascata

    • Introduzione di valori nulli


Sistemi per il recupero delle informazioni

MODIFICA DEI DATI

Nuovi dati si inseriscono nella tabella con il comando INSERT.

Ad esempio, per aggiungere una nuova ennupla alla relazione Studenti si dà il comando

INSERT INTO Studenti VALUES ("Tizio", "081575", "MI", “1985”)

Per cambiare invece l’attributo Provincia da “MI” a “TO” per lo studente con Matricola "081575", si dà il comando:

UPDATE Studenti

SET Provincia = “TO”

WHERE Matricola = "081575"

Per eliminare invece l’ennupla dello studente con matricola "081575", si dà il comando:

DELETE Studenti WHERE Matricola = "081575"


Transazioni in sql

Transazioni in SQL

  • Istruzioni fondamentali

    • begin transaction: specifica l'inizio della transazione (le operazioni non vengono eseguite sulla base di dati)

    • commit work: le operazioni specificate a partire dal begin transaction vengono eseguite

    • rollback work: si rinuncia all'esecuzione delle operazioni specificate dopo l'ultimo begin transaction . Tutte le modifiche effettuate sui dati in precedenza (a partire dall’inizio della transazione) sono cancellate. Annulla la transazione

      begin transaction;

      update ContoCorrente

      set Saldo = Saldo – 10

      where NumeroConto = 12345 ;

      update ContoCorrente

      set Saldo = Saldo + 10

      where NumeroConto = 55555 ;

      commit work;


Recupero dei dati il comando select

RECUPERO DEI DATI: IL COMANDO SELECT

  • OBIETTIVI: Scrivere una query in linguaggio SQL

    • selezionare ed elencare tutte le righe e le colonne di una tabella

    • selezionare ed elencare determinate colonne di una tabella

    • selezionare ed elencare le colonne di più tabelle

  • Anche se la parola query può essere tradotta in interrogazione o domanda, una query SQL non è necessariamente una domanda, può essere un comando per svolgere una delle seguenti operazioni:

    • creare o cancellare una tabella

    • inserire, modificare o cancellare campi

    • ricercare informazioni specifiche in più tabelle e restituire i risultati in un particolare ordine

    • modificare i parametri di protezione di un database


Esempio i1

ESEMPIO - I

  • Si consideri il seguente schema relazionale

    Catalogo ( ISBN, Titolo, CasaEd, AnnoEd)

  • Supponiamo che interessi conoscere il titolo e la casa editrice dei libri pubblicati nel 2001. Occorre:

  • consultare la relazione Catalogo


Esempio ii1

ESEMPIO - II

  • considerare solo le ennuple in cui AnnoEd = 2001

  • prelevare da queste ennuple i valori degli attributi Titolo e CasaEd

  • Questa sequenza di operazioni viene eseguita dal DBMS, purché gli venga trasmesso un opportuno comando (interrogazione) nel linguaggio SQL:

    SELECT Titolo, CasaEd

    FROM Catalogo

    WHERE AnnoEd = 2001

    dove SELECT, FROM e WHERE sono parole riservate del linguaggio SQL.


Struttura del comando

STRUTTURA DEL COMANDO

  • Una interrogazione (query) SQL agisce sulle relazioni definite nella base di dati, e restituisce come risultato una relazione.

    • questa viene in generale visualizzata sul monitor, oppure stampata; può anche essere memorizzata nella base di dati o può essere utilizzata in altre interrogazioni.

  • Nei casi più semplici una interrogazione SQL deve specificare

    • quali sono le informazioni che interessano

    • in quali relazioni si trovano

    • quali proprietà devono avere


Sistemi per il recupero delle informazioni

SELECT

Quali sono le informazioni che interessano

SELECT Attributo1,Attributo2,...

è presente in ogni interrogazione e definisce lo schema della relazione risultato. Più avanti vedremo che può avere una forma più complessa.

Esempio:

SELECT Titolo, CasaEd

significa che ci interessano il titolo e la casa editrice

Le singole colonne verranno elencate nello stesso ordine indicato.

Il comando Select in SQL equivale all’operazione di proiezione dell’algebra relazionale.


Sistemi per il recupero delle informazioni

FROM

In quali relazioni si trovano

FROM Relazione1,Relazione2,...

è presente in ogni interrogazione e specifica quali relazioni occorre visitare per ottenere il risultato.

Esempio:

FROM Catalogo

significa che per estrarre le informazioni che interessano occorre prendere in esame la relazione Catalogo.

Per selezionare dati da un’altra tabella è sufficiente modificare la clausola FROM


Where

WHERE

Quali proprietà devono essere soddisfatte

WHERE Condizione

La condizione è espressa sugli attributi delle relazioni specificate nella clausola FROM.

Può non essere presente, quando non si vogliono specificare condizioni.

Esempio:

WHERE AnnoEd = 2001

significa che interessano informazioni relative ai libri editi nel 2001.


Esempio i2

ESEMPIO - I

  • Abbiamo visto che l’interrogazione

    SELECT Titolo, CasaED

    FROM Catalogo

    WHERE AnnoEd = 2001

    restituisce la relazione

    contenente titolo e casa editrice dei libri editi nel 2001


Esempio ii2

ESEMPIO - II

Invece l’interrogazione

SELECT Titolo, CasaED

FROM Catalogo

restituisce la relazione

contenente titolo e casa editrice di tuttii libri presenti nel catalogo


Riassumendo1

Riassumendo…

  • Riepilogando la forma generale di un interrogazione SQL è, nei casi più semplici, la seguente:

    SELECT Attributo1,Attributo2,...

    FROM Relazione1,Relazione2,...

    [WHERE Condizione]

  • Le parole in maiuscolo sono parole riservate del linguaggio SQL, sono fisse e specificano le clausole dell’ interrogazione; la clausola WHERE può mancare

  • Le parole in minuscolo sono variabili, e rappresentano le relazioni, gli attributi, le condizioni che riguardano la specifica interrogazione


Selezione e proiezione1

Persone

Nome

Età

Reddito

Andrea

27

21

Aldo

25

15

Maria

55

42

Anna

50

35

Filippo

26

30

Luigi

50

40

Franco

60

20

Olga

30

41

Sergio

85

35

Luisa

75

87

Selezione e proiezione

  • Nome e reddito delle persone con meno di trenta anni

    PROJNome, Reddito(SELEta<30(Persone))

    SELECT Nome, Reddito

    FROM Persone

    WHEREEta < 30


Sistemi per il recupero delle informazioni

Persone

Nome

Età

Reddito

Andrea

Andrea

Andrea

27

27

27

21

21

21

Reddito

Aldo

Aldo

Aldo

25

25

25

15

15

15

21

Maria

55

42

15

Anna

50

35

30

Filippo

Filippo

Filippo

26

26

26

30

30

30

Luigi

50

40

Franco

60

20

Olga

30

41

Sergio

85

35

Luisa

75

87


Select abbreviazioni alias

SELECT, abbreviazioni (alias)

  • SELECT p.nomeasnome,

  • p.redditoasreddito

  • FROM personeas p

  • WHEREp.eta < 30

SELECT Nome, Reddito

FROM Persone

WHEREEta < 30


Selezione senza proiezione

Selezione, senza proiezione

  • Nome, età e reddito delle persone con meno di trenta anni

    SELEta<30(Persone)

    SELECT *

    FROM Persone

    WHEREEta < 30


Proiezione senza selezione

Proiezione, senza selezione

  • Nome e reddito di tutte le persone

    PROJNome, Reddito(Persone)

    SELECT Nome, Reddito

    FROM Persone


Condizione complessa

Condizione complessa

SELECT *

FROM Persone

WHEREreddito > 25 and (eta < 30 or eta > 60)


Evitare i duplicati

EVITARE I DUPLICATI

  • Si consideri la seguente interrogazione

    SELECT CasaEd

    FROM Catalogo

    Se una casa editrice è presente nel catalogo con 1000 libri, il suo nome comparirà 1000 volte nel risultato

  • Se vogliamo evitare che ciò avvenga, scriveremo

    SELECT DISTINCT CasaEd

    FROM Catalogo

    che ha come risultato le case editrici presenti nel catalogo, rappresentate una sola volta


Distinct

DISTINCT

  • In generale la specifica DISTINCT nella clausola SELECT elimina i duplicati dal risultato

  • La forma generale di un interrogazione SQL che abbiamo visto fin qui è quindi la seguente:

    SELECT [DISTINCT] Attributo1,Attributo2,...

    FROM Relazione1,Relazione2,...

    [ WHERE Condizione]

    dove le parti racchiuse tra parentesi quadre possono mancare


L uso di

L’uso di *

  • Nella clausola SELECT si può specificare * in luogo della lista di attributi; in tal caso il risultato contiene tutti gli attributi delle relazioni specificate nella clausola FROM.

  • L’asterisco (*) di select * indica al database di fornire TUTTE le colonne associate alla tabella

    SELECT *

    FROM Catalogo

    WHERE CasaEd = “Feltrinelli”

  • Restituisce come risultato


Sistemi per il recupero delle informazioni

RIEPILOGO

Le parole SELECT e FROM consentono a una query di caricare dei dati.

E’ possibile creare una query generica e includere tutte le colonne con l’istruzione SELECT *. E’ anche possibile selezionare solo alcune colonne e anche modificare l’ordine in cui devono essere presentate.

La parola chiave DISTINCT limita l’output delle query poiché consente di escludere i valori duplicati di una colonna.


Sistemi per il recupero delle informazioni

ESPRESSIONI, CONDIZIONI E OPERATORI

Obiettivi

  • ampliare la query con qualche nuovo termine

  • introdurre gli operatori.

    In particolare impareremo a:

  • capire cos’è una espressione e come si utilizza

  • capire cos’è una condizione e come si utilizza

  • familiarizzare con la clausola WHERE

  • imparare ad usare gli operatori aritmetici, di confronto, di caratteri, logici e di insiemi

  • conoscere altri utili operatori


Espressioni

ESPRESSIONI

  • La definizione di espressione è semplice: un’espressione restituisce un valore

  • Nella seguente istruzione, NOME, INDIRIZZO, TELEFONO E RUBRICA sono espressioni:

    SELECT NOME, INDIRIZZO, TELEFONO, RUBRICA

    FROM RUBRICA;

    • NOME è

  • La seguente espressione:

    WHERE NOME = ‘ROSSI’

    contiene una condizione di una espressione booleana. Questa condizione potrà essere TRUE (vera) o FALSE (falsa) rispettivamente se la colonna NOME contiene ROSSI oppure no.


Condizioni i

CONDIZIONI - I

  • Tutte le volte che si vuole trovare un particolare elemento o gruppo di elementi in un database, occorre specificare una o più condizioni.

  • Le condizioni sono introdotte dalla clausola WHERE.

    • nell’esempio precedente la condizione è NOME = ‘ROSSI’. Per trovare tutti gli impiegati che hanno lavorato più di 100 ore la condizione potrebbe essere: NUMERODIORE > 100

  • Le condizioni consentono di effettuare query selettive. Nella forma più comune includono una variabile, una costante e un operatore di confronto.

    • Variabile………………………….. NOME

    • Costante…………………………..’ROSSI’

    • Operatore di confronto………. >

  • Per scrivere una query condizionale bisogna conoscere la clausola WHERE e gli operatori. La condizione presente nella clausola WHERE può avere una struttura molto complessa


Condizioni ii

CONDIZIONI - II

  • In generale le condizioni sono formate combinando predicaticon gli operatori booleani and, or enot

  • Predicato: è una condizione semplice del tipo E1 cfr E2 ove:

    • cfr è un operatore di confronto, cioè uno degli operatori

      = < > <= >= <> (diverso)

    • E1 ed E2 sono espressioni, che possono essere attributi, costanti oppure espressioni formate con gli usuali operatori aritmetici. Molto spesso E1 è un attributo. E2 può essere un comando SELECT

  • Esempi

    • · AnnoEd > 1980 and CasaEd = “Feltrinelli”

    • · AnnoEd = 2000 and (CasaEd = “Einaudi” or CasaEd = “Mondadori”)

  • I predicati hanno valore true(vero) oppure false(falso).


Tabella di verita

TABELLA DI VERITA’

Gli operatori booleani rispettano le seguenti tabelle di verità:

true and true = true

true or true = true

not true = false

true and false = false

true or false = true

not false = true

false and false = false

false or false = false


La clausola where

LA CLAUSOLA WHERE

  • La sintassi della clausola WHERE è la seguente:

    WHERE <condizione di ricerca>

  • La condizione presente nella clausola WHERE è ottenuta combinando predicati con gli operatori booleani. Gli attributi che compaiono nei predicati devono appartenere alle relazioni presenti nella clausola FROM

  • La clausola WHERE rende selettive le query, senza questa clausola la query visualizzerebbe tutti i record della tabella

  • Consideriamo il solito schema di relazione Catalogo e una sua istanza


Sistemi per il recupero delle informazioni

LA CLAUSOLA WHERE

SELECT Titolo, CasaEd

FROM Catalogo

WHERE Anno = 2001 and CasaEd = “Einaudi”

SELECT Titolo, CasaEd

FROM Catalogo

WHERE Anno = 2001 or CasaEd = “Einaudi”

SELECT Titolo, CasaEd

FROM Catalogo

WHERE Anno = 2000 and CasaEd <> “Feltrinelli”


Esempio2

ESEMPIO

SELECT CasaEd, Anno

FROM Catalogo

WHERE Titolo = “L’amante” and

Anno = (SELECT max(Anno) FROM Catalogo WHERE Titolo = “L’amante” )

  • Viene dapprima calcolata la SELECT tra parentesi, ed il suo risultato viene utilizzato per valutare la condizione; La SELECT esterna restituisce come risultato la CasaEd e L’Anno della più recente edizione dell’ Amante presente nel Catalogo

  • In questo esempio è stato fatto uso di una struttura detta SOTTOSELECT, o SELECT annidata. Questa ha lo scopo di estrarre dal DB un valore da utilizzare in una espressione. Si osservi che la Sottoselect ha come risultato un singolo valore, altrimenti il confronto non si può effettuare


Sistemi per il recupero delle informazioni

GLI OPERATORI

Gli operatori sono gli elementi utilizzati all’interno delle espressioni per specificare le condizioni necessarie a caricare i dati.

Possono essere divisi nei seguenti gruppi:

  • aritmetici

  • di confronto

  • di caratteri

  • logici

  • di insieme

E’ un potente gruppo di strumenti a base della conoscenza del linguaggio SQL


Sistemi per il recupero delle informazioni

GLI OPERATORI ARITMETICI

+ (somma)

- (sottrazione)

/ (divisione)

* (moltiplicazione)

% (modulo o resto)

I primi quattro operatori si spiegano da soli.

L’operatore modulo restituisce il resto di una divisione.

Ad esempio:

5 % 2 = 1

6 % 2 = 0

Non funziona con i tipi di dati che hanno cifre decimali


Sistemi per il recupero delle informazioni

GLI OPERATORI ARITMETICI

Se vengono inseriti più operatori aritmetici in una espressione senza parentesi, essi vengono valutati nell’ordine: moltiplicazione, divisione, modulo, somma e sottrazione.

Ad esempio:

2 * 6 + 9 / 3vale12 + 3 = 15

mentre l’espressione

2 * (6 + 9) / 3vale2 * 15 / 3 = 10


Sistemi per il recupero delle informazioni

OPERATORI ARITMETICI: SOMMA (+)

La terza colonna (PREZZOINGROSSO + 1,50) non si trova nella tabella originale (in entrambi i casi sono state selezionate con il carattere * tutte le colonne).

SQL consente di creare colonne virtuali o derivate combinando o modificando le colonne esistenti.


Sistemi per il recupero delle informazioni

OPERATORI ARITMETICI: SOMMA (+)

E’ possibile assegnare una intestazione più comprensibile alla nuova colonna:

SQL> SELECT ELEMENTO, PREZZOINGROSSO,

(PREZZOINGROSSO + 1.50) PREZZODETTAGLIO FROM PREZZO


Sistemi per il recupero delle informazioni

OPERATORI ARITMETICI: SOTTRAZIONE (-)

L’operatore meno svolge due funzioni, la prima è quella di cambiare segno ad un numero:

SQL> SELECT * FROM MINMAX

SQL> SELECT REGIONE, -TEMPMAX, -TEMPMIN FROM MINMAX


Sistemi per il recupero delle informazioni

OPERATORI ARITMETICI: SOTTRAZIONE (-)

La seconda (e ovvia) funzione dell’operatore meno è quella di sottrarre i valore di una colonna da quelli di un’altra colonna.

Ad esempio

SQL>SELECT REGIONE,

TEMPMAX MINIME,

TEMPMIN MASSIME,

(TEMPMIN - TEMPMAX) DIFFERENZA

FROM MINMAX;

Oltre che aver creato la nuova colonna questa query ha corretto (solo sullo schermo) i nomi di quelle errate.


Sistemi per il recupero delle informazioni

OPERATORI ARITMETICI: DIVISIONE (/)

L’operatore divisione ha un solo significato, per vedere gli effetti di una vendita a metà prezzo basta digitare la seguente istruzione:

SQL> SELECT ELEMENTO PRODOTTO, PREZZOINGROSSO, (PREZZOINGROSSO/2) PREZZOVENDITAFROM PREZZO


Sistemi per il recupero delle informazioni

OPERATORI ARITMETICI: MOLTIPLICAZIONE (*)

Anche l’’operatore moltiplicazione è semplice da usare, ad esempio questa query visualizza l’effetto di uno sconto del 10% sui prezzi di tutti i prodotti:

SQL> SELECT ELEMENTO PRODOTTO, PREZZOINGROSSO, (PREZZOINGROSSO*0.9) NUOVOPREZZOFROM PREZZO;


Sistemi per il recupero delle informazioni

OPERATORI ARITMETICI: MODULO (%)

L’operatore modulo restituisce il resto intero di una operazione di divisione.

Esempio:

SQL> SELECT * FROM RESTI

E’ possibile creare una nuova colonna, RESTO, dove registrare il resto della divisione tra NUMERATORE e DENOMINATORE

SQL> SELECT NUMERATORE, DENOMINATORE,

(NUMERATORE % DENOMINATORE) RESTO

FROM RESTI


Sistemi per il recupero delle informazioni

OPERATORI DI CONFRONTO

Questi operatori confrontano le espressioni e restituiscono uno di questi tre valori: TRUE, FALSE, Unkown. I primi due sono semplici da spiegare, TRUEsignifica vero e FALSEsignifica falso, il terzo, Unknow, identifica l’assenza di dati in una colonna, cioè NULL.

Molte implementazioni SQL cambiano Unknown in FALSE e forniscono un operatore speciale, IS NULL, per verificare la condizione NULL (assenza di dati).

SQL> SELECT * FROM PREZZO WHERE PREZZOINGROSSO = NULL;

No row selected

SQL> SELECT * FROM PREZZO WHERE PREZZOINGROSSO IS NULL;

Nel database la colonna prezzoingrosso della riga Limoni non contiene dati (non è zero)


Sistemi per il recupero delle informazioni

OPERATORI DI CONFRONTO: =

Nella clausola WHERE il segno uguale è l’operatore di confronto

più utilizzato, molto comodo per selezionare un valore tra tanti.

SQL> SELECT * FROM AMICI;

SQL> SELECT * FROM AMICI WHERE NOME = ‘ALE’;

SQL> SELECT * FROM AMICI WHERE NOME = ‘Ale’;

no row selected.


Sistemi per il recupero delle informazioni

OPERATORI DI CONFRONTO: > , >=

questi operatori operano nel seguente modo modo:

1

2

3

Non si usano apici per racchiudere il numero 4.50


Sistemi per il recupero delle informazioni

OPERATORI DI CONFRONTO:<, <=

questi operatori operano in senso inverso al precedente:

SQL> SELECT * FROM AMICI;

SQL> SELECT * FROM AMICI

WHERE CITTA <= ‘MILANO’ ;


Sistemi per il recupero delle informazioni

OPERATORI DI CONFRONTO: <>, !=

Operatore di disuguaglianza: consente di trovare dati escludendone altri,

cioè il simbolo (<>) oppure (!=) si legge “diverso da”.

Per trovare gli amici tranne ALE (cioè con il nome diverso da ALE):

SQL> SELECT * FROM AMICI

WHERE NOME <> ‘ALE’;

In molte implementazione SQL è indifferente usare la forma (<>) anzichè (!=)


Sistemi per il recupero delle informazioni

OPERATORI DI CARATTERE

Consentono di manipolare il modo in cui debbono essere rappresentate le stringhe durante la preparazione delle condizioni che selezionano i dati.

Come fare a trovare tutte le parti che si trovano nella zona dorsale del corpo? Osservando la tabella è possibile individuarne due, ma hanno nomi differenti.


Sistemi per il recupero delle informazioni

OPERATORI DI CARATTERE: LIKE

L’operatore LIKEconsente di estrarre dati che somigliano ad un certo schema

SQL> SELECT * FROM PARTI WHERE POSIZIONE LIKE ‘%DORSO%’;

SQL> SELECT * FROM PARTI WHERE POSIZIONE LIKE ‘DORSO%’;

SQL> SELECT * FROM PARTI WHERE POSIZIONE LIKE ‘%DORSO’;


Sistemi per il recupero delle informazioni

OPERATORI DI CARATTERE: LIKE

Come fare a trovare tutte le parti che iniziano per ‘F’? Osservando la tabella è possibile individuarne due, ma hanno nomi differenti.

SQL> SELECT * FROM PARTI WHERE NOME LIKE ‘F%’;

SQL> SELECT * FROM PARTI WHERE POSIZIONE LIKE ‘f%’;

no rows selected.

L’operatore like è sempre sensibile ai caratteri minuscoli/maiuscoli


Regole

REGOLE

  • A LIKE maschera

  • A NOT LIKE maschera

    Controlla che il valore dell’attributo A sia o non sia conforme alla maschera. maschera è una sequenza qualunque di caratteri che può contenere i caratteri speciali “ - “ e “ % ”

  • Una parola è conforme alla maschera se

    • · I caratteri della maschera diversi da – e da % coincidono con quelli della parola.

    • · Al carattere – nella maschera corrisponde un qualunque carattere della parola

    • · Al carattere % nella maschera corrisponde una qualunque sequenza, anche vuota, di caratteri nella parola


Esempio3

ESEMPIO

  • ? CodiceCliente, Cognome e Nome dei Clienti il cui Codice contiene dalla quarta posizione in avanti i caratteri MRC75

    SELECT CodiceCliente, Cognome, Nome

    FROM Clienti

    WHERE CodF LIKE ---MRC75%

    ad es. BCEMRC7548, 123MRC75, j23MRC75e6732 sono tutte parole conformi alla maschera ---MRC75%


Sistemi per il recupero delle informazioni

L’OPERATORE DI SOTTOLINEATURA

Il carattere di sottolineatura è un carattere jolly singolo.

SQL> SELECT * FROM AMICI WHERE PROVINCIA LIKE ‘_O’;

E’ possibile utilizzare più di un carattere di sottolineatura e può essere combinato con l’operatore LIKE.


Sistemi per il recupero delle informazioni

L’OPERATORE DI CONCATENAZIONE (||)

Il simbolo || serve a concatenare due stringhe:

SQL> SELECT NOME || COGNOME NOMECOMPLETO FROM AMICI;


Sistemi per il recupero delle informazioni

OPERATORI LOGICI

Negli esempi precedenti è stato effettuato sempre un controllo alla volta. Questo metodo va bene per i casi semplici, ma come fareste a trovare tutti quei dipendenti i cui nomi iniziano con la lettera ‘B’ e che hanno più di 50 giorni di ferie?

Gli operatori logici separano due o più condizioni nella clausola WHERE di un’istruzione SQL.

Essi sono:

  • AND

  • OR

  • NOT


Sistemi per il recupero delle informazioni

OPERATORI LOGICI: AND

L’operatore logico AND indica che entrambe le espressioni che si trovano ai suoi lati devono essere soddisfatte per restituire il valore TRUE (vero). Se una solo delle espressioni non è soddisfatta l’operatore AND restituisce FALSE.

Ad esempio, per sapere quali impiegati hanno lavorato per l’azienda per 5 anni o meno ed hanno utilizzato più di 20 giorni di ferie, si può scrivere:

SQL> SELECT *

FROM FERIE

WHERE ANNI <= 5

AND

FERIEGODUTE > 20;


Sistemi per il recupero delle informazioni

OPERATORI LOGICI: OR

L’operatore logico OR puo’ essere utilizzato per combinare una serie di condizioni. Se una di queste è soddisfatta viene restituito TRUE

SQL> SELECT *

FROM FERIE

WHERE COGNOME LIKE ‘BO%’

OR

COGNOME LIKE ‘CO%’;

L’operatore OR richiede che una soltanto delle condizioni sia vera affinchè dati possano essere restitutiti


Sistemi per il recupero delle informazioni

OPERATORI LOGICI: NOT

L’operatore logico NOT ha il compito di invertire il significato di una condizione

SQL> SELECT *

FROM FERIE

WHERE COGNOME NOT LIKE ‘B%’;


Sistemi per il recupero delle informazioni

OPERATORI DI INSIEMI: UNION

L’operatore UNION restituisce il risultato di due query escludendo le righe duplicate.

Esempio: quante persone diverse giocano in entrambe le squadre?

SQL> SELECT COGNOME FROM CALCETTO

UNION

SELECT COGNOME FROM CALCIO;

calcetto

calcio

A

B

C

A + B - C

Sono stati esclusi i doppioni


Sistemi per il recupero delle informazioni

OPERATORI DI INSIEMI: UNION

L’operatore UNION ALL restituisce il risultato di due query incluse le righe duplicate.

Esempio: quante persone giocano al calcetto e quante al calcio?

SQL> SELECT COGNOME FROM CALCETTO

UNION ALL

SELECT COGNOME FROM CALCIO;

A

B

C

A + B

calcetto

calcio

Sono incluse tutte le righe


Sistemi per il recupero delle informazioni

OPERATORI DI INSIEMI: INTERSECT

L’operatore INTERSECT restituisce soltanto le righe che vengono trovate in entrambe le query

Esempio: quali persone giocano in entrambe le squadre?

SQL> SELECT COGNOME FROM CALCETTO

INTERSECT

SELECT COGNOME FROM CALCIO;

A

B

calcetto

C

calcio

C

Sono inclusi solo le righe comuni


Sistemi per il recupero delle informazioni

OPERATORI DI INSIEMI: MINUS

L’operatore MINUS restituisce le righe della prima query che non sono presenti nella seconda

Esempio: quali persone giocano solo al calcetto?

SQL> SELECT COGNOME FROM CALCETTO

MINUS

SELECT COGNOME FROM CALCIO;

A

B

C

A - C

calcetto

calcio

Seleziona quelli che giocano solo al calcetto


Gestione dei valori nulli

Matricola

Cognome

Filiale

Età

7309

Rossi

Roma

32

9553

5998

5998

9553

9553

5998

Bruni

Neri

Neri

Bruni

Neri

Bruni

Milano

Milano

Milano

Milano

Milano

Milano

NULL

45

NULL

NULL

45

45

Gestione dei valori nulli

Impiegati

  • Gli impiegati la cui età è o potrebbe essere maggiore di 40

SEL Età > 40 OR Età IS NULL (Impiegati)

  • select *

  • from impiegati

  • where eta > 40 or eta is null


Interrogazioni su pi relazioni

Interrogazioni su più relazioni

  • Nella clausola FROM possono essere presenti più relazioni. Ciò è necessario quando le informazioni per eseguire l’interrogazione sono distribuite su relazioni diverse, vale a dire: quando gli attributi presenti nella clausola SELECT o nella clausola WHERE appartengono a relazioni diverse

  • Si consideri il seguente schema relazionale

    Film(CodFilm,Titolo,Regista,Anno)

    Attori(CodFilm*, Attore)

    e supponiamo di volere i titoli dei film in cui recita C. Eastwood. L’attributo Titolo è nella relazione Film mentre l’attributo Attore è nella relazione Attori. Occorre pertanto visitare entrambe le relazioni


Esempio i3

ESEMPIO - I

.Supponiamo di avere le seguenti istanze di relazione:


Esempio ii3

ESEMPIO - II

  • Il DBMS esegue la seguente procedura:

    • Viene costruita una relazione concatenando le ennuple di Film e di Attori che sono in associazione (tali che CodFilm=CodFilm*)

    • Vengono prese in considerazione solo le ennuple in cui l’attributo Attore ha valore C.Eastwood.


Esempio iii1

ESEMPIO - III

Viene prelevato l’attributo Titolo

Questa interrogazione in SQL si scrive:

SELECT Titolo

FROM Film, Attori

WHERE Film.CodFilm = Attori.CodFilm

and Attore = “C.Eastwood”

dove Film.CodFilm ed Attori.CodFilm rappresentano il valore di CodFilm nella relazione Film e nella relazione Attori rispettivamente.

La condizione Film.CodFilm = Attori.CodFilm serve ad esprimere il collegamento tra le ennuple di Film e quelle di Attori. Solo in questo modo C.Eastwood sarà associato ad un film in cui recita.


Esempio iv1

ESEMPIO - IV

  • Per motivi di chiarezza e per evitare ambiguità, è opportuno specificare, per ogni attributo, la relazione cui appartiene , con la notazione Relazione.Attributo. Pertanto l’interogazione precedente diventa

    SELECT Film.Titolo

    FROM Film, Attori

    WHERE Film.CodFilm = Attori.CodFilm

    and Attori.Attore = “C.Eastwood”

  • Per motivi di brevità è opportuno assegnare nella clausola FROM un nome abbreviato alle relazioni, da utilizzare nelle altre clausole dell’interrogazione:

    SELECT F.Titolo

    FROM Film F, Attori A

    WHERE F.CodFilm = A.CodFilm

    and A.Attore = “C.Eastwood”


Sistemi per il recupero delle informazioni

JOIN

  • Sottolineiamo il fatto che fra le due relazioni deve esistere un collegamento (una chiave esterna in una relazione, chiave primaria nell’altra), e che nella clausola WHERE dell’interrogazione deve essere esplicitato tale collegamento. Osserviamo che nella clausola FROM può essere presente un qualunque numero di relazioni, purché queste siano collegate tra di loro, e nella clausola WHERE siano specificati tutti i collegamenti.

  • L’operazione che associa le ennuple di due relazioni (ad es. le ennuple di Film con quelle di Attori) è quella di join, e la condizione di eguaglianza tra la chiave esterna di una relazione e la chiave primaria di un’altra (ad es Film.CodFilm = Attori.CodFilm) è detto predicato di join.


Sql e algebra relazionale

SQL e algebra relazionale

  • R1(A1,A2) R2(A3,A4)

    select R1.A1, R2.A4

    from R1, R2

    where R1.A2 = R2.A3

  • prodotto cartesiano (FROM)

  • selezione (WHERE)

  • proiezione (SELECT)

  • PROJ A1,A4 (SELA2=A3 (R1 JOIN R2))


Esempio difficile

ESEMPIO DIFFICILE

  • Si consideri lo schema relazionale:

    FILM(CodiceDVD, Titolo, Regista, Anno)

    ATTORI(Nome, Nazionalità)

    RECITA(CodiceDVD*, Nome*, Personaggio)

    DVD(Collocazione, CodiceDVD*, DataNoleg, CodiceCliente*)

    CLIENTI(CodiceCliente, Cognome, Nome, Indirizzo, Telefono)

    e si voglia estrarre Cognome e Nome dei Clienti che hanno noleggiato dvd relativi a film in cui recitano attori francesi


Esempio difficile1

ESEMPIO DIFFICILE

Cognome e Nome sono attributi della relazione Clienti.

Clienti è collegata a DVD tramite CodiceCliente,

DVD è collegata a Film tramite CodiceDVD, Film è collegato a Recita tramite CodiceDVD, ed infine Recita è collegato con Attori tramite Nome; finalmente in Attori troviamo l’attributo Nazionalità, e possiamo quindi verificare la condizione di ricerca.

In SQL tale interrogazione è piuttosto fastidiosa da scrivere:

SELECT Cl.Cognome, Cl.Nome

FROM Clienti Cl, DVD D, Film F, Recita R, Attori A

WHERE Cl.CodiceCliente = D.CodiceCliente

and D.CodiceDVD = F.CodiceDVD

and F.CodiceDVD = R.CodiceDVD

and R.Nome = A.Nome

and A.Nazionalità = “francese”


Esempio difficile2

ESEMPIO DIFFICILE

  • Può essere utile, per individuare le relazioni da specificare nella clausola FROM, considerare lo schema E-R rappresentato dallo schema relazionale: da tale schema risulta evidente che per collegare Clienti con Attori occorre attraversare tutte le classi intermedie.

Dvd


Sistemi per il recupero delle informazioni

Persone

Maternità

Madre

Figlio

Nome

Età

Reddito

Luisa

Maria

Andrea

27

21

Luisa

Luigi

Aldo

25

15

Anna

Olga

Maria

55

42

Anna

Filippo

Anna

50

35

Maria

Andrea

Filippo

26

30

Maria

Aldo

Luigi

50

40

Paternità

Padre

Figlio

Franco

60

20

Sergio

Franco

Olga

30

41

Luigi

Olga

Sergio

85

35

Luigi

Filippo

Luisa

75

87

Franco

Andrea

Franco

Aldo


Altri esempi selezione proiezione e join

ALTRI ESEMPI - Selezione, proiezione e join

  • I padri di ognipersona

    PROJPadre(paternita JOIN Figlio =Nomepersone)

    • Il nome e l‘etàdeifigli di Luisa

      PROJNome, eta(

      SELMADRE=„Luisa“ (maternita)

      JOIN Figlio =Nomepersone

      )

  • SELECT distinct padre

  • FROM persone, paternita

  • WHERE figlio = nome

  • SELECT distinct padre

  • FROM persone, paternita

  • WHERE figlio = nomeand madre=‚Luisa‘


Funzioni di aggregazione

Funzioni di aggregazione

  • SQLconsente di estrarre dalla Base di Dati informazioni che non sono esplicitamente presenti, ma si ottengono da quelle presenti utilizzando opportune funzioni dette funzioni di aggregazione.

    Studenti (Matricola, Nome, CorsodiLaurea)

    Esami (Matricola*, CodiceAF*, Voto)

    AttivitàFormativa(CodiceAF, NomeAF, CFU)

  • Le funzioni di aggregazione consentono di estrarre dal DB informazioni quali il numero di esami sostenuti da un determinato studente, il numero di studenti che hanno sostenuto un determinato esame, valori medi, massimi, minimi ecc.


Count

COUNT

  • ? Numero di esami sostenuti dallo studente con Matricola 123

    SELECT Count(*)

    FROM Esami

    WHERE Matricola=123

    Count(*) indica un conteggio: vengono contate le ennuple (ricordiamo che * indica l’intera ennupla) di Esami che soddisfano alla condizione Matricola=123. Restituisce il numero di righe che soddisfano la condizione specificata nella clausola WHERE

  • Al risultato di una funzione di aggregazione può essere dato un nome tramite il costrutto as:

    SELECT Count(*) as Numero_Esami_AA252

    FROM Esami E

    WHERE CodiceMateria=AA252


Sistemi per il recupero delle informazioni

SUM

  • ? Numero di crediti acquisiti dallo studente con Matricola 123

    SELECT Sum(CFU) as Crediti_di_123

    FROM Esami E, AttivitàFormative A

    WHERE E.CodiceAF = A.CodiceAF

    and E.Matricola=123

  • Sum(CFU) indica l’ordinaria somma aritmetica dei valori (che devono essere numerici) dell’attributo CFU. Consideriamo la seguente istanza del DB


Sistemi per il recupero delle informazioni

SUM

  • Il join E.CodiceAF = A.CodiceAF da luogo alla seguente relazione

  • La condizione E.Matricola=123 da luogo alla seguente relazione


Sistemi per il recupero delle informazioni

SUM

  • La funzione Sum esegue la somma dei valori dell’attributo CFU e si ottiene il risultato desiderato

  • L’uso delle funzioni di aggregazione è limitato al caso in cui il risultato sia costituito da un solo valore; non possono cioè essere presenti allo stesso tempo nella clausola SELECT sia attributi che funzioni di aggregazione. La seguente interrogazione, ad es. è sbagliata (del resto avrebbe poco senso)

    SELECT Voto, Count(*)

    FROM Esami

    WHERE Matricola=123


Max e min

MAX e MIN

  • ? Il voto più basso dello studente con Matricola 123

    SELECT Min(Voto)

    FROM Esami

    WHERE Matricola=123

  • Il voto più alto dello studente con Matricola 123

    SELECT Max(Voto)

    FROM Esami

    WHERE Matricola=123

  • La funzione MAX (MIN) serve a trovare il valore massimo (€minimo) di una colonna.


Riassumendo2

Riassumendo

  • Le funzioni di aggregazione previste da SQL sono:

    • avgmedia aritmetica (valori numerici)

    • countnumero di valori

    • maxvalore massimo

    • minvalore minimo

    • sumsomma (valori numerici)

  • Min e Max, quando sono applicati a valori non numerici, danno rispettivamente il primo e l’ultimo valore nell’ordine alfabetico.


Order by

ORDER BY

La clausola ORDER BY, specificata dopo SELECT FROM WHERE fa sì che il risultato sia ordinato; si può scegliere fra ordinamento crescente (se non si specifica nulla), o decrescente (se si specifica desc).

L’ordinamento può essere fatto anche su più attributi.

Nome e reddito delle persone con meno di trenta anni in ordine alfabetico

select nome, reddito

from persone

where eta < 30

order by nome


Sistemi per il recupero delle informazioni

Nome

Reddito

Andrea

21

Aldo

15

Persone

Persone

Filippo

30

Nome

Reddito

Aldo

15

Andrea

21

Filippo

30

select nome, reddito

from persone

where eta < 30

order by nome

select nome, reddito

from persone

where eta < 30


Sistemi per il recupero delle informazioni

NULL

  • A IS NULL , A IS NOT NULL

    • controlla che l’ attributo A abbia o non abbia valore nullo

  • ? La collocazione dei dvd non noleggiati

    SELECT Collocazione

    FROM DVD

    WHERE CodiceCliente is null

  • ? La collocazione dei dvd noleggiati dopo il 1/1/08

    SELECT Collocazione

    FROM DVD

    WHERE DataNoleg is not null and DataNoleg > 1/1/05

    L’uso del predicato is [not] null è l’unico modo per stabilire se una dvd è o non è noleggiat0.


Sistemi per il recupero delle informazioni

Sistemi per il recupero delle informazioni

ESERCIZI


Esercizio 1

ESERCIZIO 1

  • Nell’ esercizio che segue sono dati degli schemi di Basi di Dati relazionali, e delle richieste di informazioni da estrarre dalle Basi di Dati.

  • Esprimere tali richieste con interrogazioni SQL.

  • SCHEMA RELAZIONALE:

    ATTORI (CodAttore, Nome, AnnoNascita, Nazionalità);

    RECITA (CodAttore*, CodFilm*)

    FILM (CodFilm, Titolo, AnnoProduzione, Nazionalità, Regista, Genere)

    PROIEZIONI (CodProiezione, CodFilm*, CodSala*, Incasso, DataProiezione)

    SALE (CodSala, Posti, Nome, Città)


Esercizio 11

ESERCIZIO 1

  • Scrivere le interrogazioni SQL che restituiscono le seguenti informazioni:

    1- Il nome di tutte le sale di Verona

    2- Il titolo dei film di F. Fellini prodotti dopo il 1960.

    3- Il titolo e la durata dei film di fantascienza giapponesi o francesi prodotti dopo il 1990

    4- I titolo dei film dello stesso regista di “Casablanca”

    5- Il titolo ed il genere dei film proiettati il giorno di Natale 2004

    6- Il titolo dei film in cui recita M. Mastroianni oppure S.Loren

    7- Il numero di sale di Messina con più di 60 posti


Esercizio 12

ESERCIZIO 1

1- Il nome di tutte le sale di Verona

SELECT s.Nome FROM Sale s WHERE s.Città = 'Pisa‘

2- Il titolo dei film di F. Fellini prodotti dopo il 1960.

SELECT f.Titolo FROM Film f WHERE f.Regista = “Fellini” AND f.AnnoProduzione > 1960

3- Il titolo e la durata dei film di fantascienza giapponesi o francesi prodotti dopo il 1990

SELECT f.Titolo, f.Durata FROM Film f WHERE f.Genere=”Fantascienza” and ((f.Nazionalità=”Giapponese” or f.Nazionalità=”Francese”) and f.AnnoProduzione >1990


Esercizio 13

ESERCIZIO 1

4- I titolo dei film dello stesso regista di “Casablanca”

SELECT f.Titolo FROM Film f

WHERE f.Regista = (SELECT f.Regista FROM Film f WHERE f.Titolo = “Casablanca”)

5- Il titolo ed il genere dei film proiettati il giorno di Natale 2004

SELECT DISTINCT f.Titolo, f.Genere FROM Film f, Proiezioni p

WHERE p DataProiezione =25/12/04 and f.CodFilm=p.CodFilm

6- Il titolo dei film in cui recita M. Mastroianni oppure S.Loren

SELECT DISTINCT f.Titolo FROM Film f, Recita r, Attore a

WHERE (a.Nome = “M.Mastrianni” OR a.Nome = ”S.Loren”)

AND f.CodFilm = r.CodFilm AND r.CodAttore = a.CodAttore

7- Il numero di sale di Messina con più di 60 posti

SELECT count(*) FROM Sale s

WHERE s.Città = “Messina” and s.Posti > 60


Esercizio 2

ESERCIZIO 2

  • SCHEMA RELAZIONALE:

    ROMANZI(CodiceR, Titolo, NomeAut*, Anno)

    PERSONAGGI(NomeP, CodiceR*, sesso, ruolo)

    AUTORI(NomeAut, AnnoN, AnnoM:optional, Nazione)

    FILM(CodiceF, Titolo, Regista, Produttore, Anno, CodiceR*)


Esercizio 21

ESERCIZIO 2

  • 1- Il titolo dei romanzi del 19° secolo

  • 2- Il titolo, l’autore e l’anno di pubblicazione dei romanzi di autori russi, ordinati per autore e, per

  • lo stesso autore, ordinati per anno di pubblicazione

  • 3- I personaggi principali (ruolo =”P”) dei romanzi di autori viventi.

  • 4. I romanzi dai quali è stato tratto un film con lo stesso titolo del romanzo

  • 5- Il titolo, il regista e l’anno dei film tratti dal romanzo “Robin Hood”

  • 6- Per ogni autore italiano, l’anno del primo e dell’ultimo romanzo.


Esercizio 3

ESERCIZIO 3

  • SCHEMA RELAZIONALE:

    STUDENTI (Matricola, NomeS, CorsoLaurea*, AnnoN)

    CORSIDILAUREA (CorsoLaurea, TipoLaurea, Facoltà)

    FREQUENTA (Matricola*, CodCorso*)

    CORSI (CodCorso, NomeCorso, CodDocente*)

    DOCENTI (CodDocente, NomeD, Dipartimento)


Esercizio 31

ESERCIZIO 3

1- Il nome e l’anno di nascita degli studenti iscritti a Editoria e Giornalismo, in ordine rispetto al nome

2- Matricola e nome degli studenti di un corso di laurea triennale (tipoLaurea = 'L') che seguono un corso di un docente di nome Anna.

3- Per ogni tipo di laurea, il tipoLaurea e l’età media degli studenti

4- Il codice dei corsi frequentati da più di 5 studenti e tenuti da docenti del Dipartimento di Informatica

5- Per ogni studente della Facoltà di Lettere e Filisofia, la matricola ed il numero di corsi seguiti

6- Matricola e nome degli studenti che non frequentano nessun corso

7- Nome e CodDocente dei docenti che insegnano qualche corso seguito da più di 5 studenti


Esercizi

Esercizi

Dato il seguente schema:

AEREOPORTO(Città, Nazione, NumPiste)

VOLO(IdVolo, GiornoSett, CittaPart, OraPart, CittaArr, OraArr, TipoAereo)

AEREO(TipoAereo, NumPasseggeri, QtaMerci)

In SQL:

  • Creare il Database

  • Città con un aereoporto di cui non è noto il numero di piste

  • Città e orario di partenza dei voli del lunedì

  • Nazione e numero piste dell’aereoporto da cui parte il volo con IdVolo=‘A001’


Sistemi per il recupero delle informazioni

AEREOPORTO(Città, Nazione, NumPiste)

VOLO(IdVolo, GiornoSett, CittaPart, OraPart, CittaArr, OraArr, TipoAereo)

AEREO(TipoAereo, NumPasseggeri, QtaMerci)

1- Creazione del database

CREATE TABLE Aereoporto(

Città CHAR(20) PRIMARY KEY,

Nazione CHAR(20),

NumPiste NUMERIC(2),

)

CREATE TABLE Aereo (

tipoAereo Numeric(5) PRIMARY KEY,

NumPasseggeri Numeric (4),

QtaMerci Numeric (4)

)


Sistemi per il recupero delle informazioni

AEREOPORTO(Città, Nazione, NumPiste)

VOLO(IdVolo, GiornoSett, CittaPart, OraPart, CittaArr, OraArr, TipoAereo)

AEREO(TipoAereo, NumPasseggeri, QtaMerci)

CREATE TABLE Volo (

IdVolo CHAR(4),

GiornoSett CHAR(4),

CittaPart CHAR(20) REFERENCES Aereoporto(citta),

OraPart CHAR(5),

CittaArr CHAR(20) REFERENCES Aereoporto(citta),

OraArr CHAR(5),

TipoAereo NUMERIC(5),

PRIMARY KEY(IdVolo, GiornoSett),

FOREIGN KEY TipoAereo REFERENCES Aereo(TipoAereo)

)


Sistemi per il recupero delle informazioni

2 – Città con un aeroporto di cui non è noto il numero di piste

SELECT Citta FROM Aereoporto WHERE NumPiste IS NULL

3 – Città e Orario di partenza dei voli del Lunedì

SELECT CittaPart, OraPart FROM Volo WHERE GiornoSett=‘LUN’

4 – Nazione e Numero di piste dell’aeroporto da cui parte il volo con IdVolo=‘A001’

SELECT Aeroporto.nazione, Aereoporto.NumPiste FROM Aeroporto, Volo WHERE Aeroporto.citta=Volo.cittapart AND Volo.IdVolo=‘A001’


Altri esercizi

ALTRI ESERCIZI

  • Città di partenza, orario di partenza, città di arrivo, orario di arrivo degli aerei con merci>1000

  • Il tipo di aereo e il numero dei passeggeri dei voli che arrivano a Torino

  • Il numero dei voli che partono il venerdì da Francoforte

  • La quantità dei voli che partono da ogni città

  • Le città, numero dei voli in arrivo, nazione, avente numero di volo in arrivo maggiore di 10

  • Il numero dei voli internazionali che partono il lunedì da Torino


  • Login