La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Sistemi per il recupero delle informazioni RIASSUNTO.

Presentazioni simili


Presentazione sul tema: "Sistemi per il recupero delle informazioni RIASSUNTO."— Transcript della presentazione:

1 Sistemi per il recupero delle informazioni RIASSUNTO

2 ESEMPIO

3 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)

4 RELAZIONE E TABELLA Orario InsegnamentoDocenteAulaOra Analisi matem. ILuigi NeriN18:00 Basi di datiPiero RossiN29:45 ChimicaNicola MoriN19:45 Fisica IMario BruniN111:45 Fisica IIMario BruniN39:45 Sistemi inform.Piero RossiN38:00 ORARIO (Insegnamento, Docente, Aula, Ora) Relazione e tabella sono sinonimi

5 SCHEMA Orario InsegnamentoDocenteAulaOra Analisi matem. ILuigi NeriN18:00 Basi di datiPiero RossiN29:45 ChimicaNicola MoriN19:45 Fisica IMario BruniN111:45 Fisica IIMario BruniN39:45 Sistemi inform.Piero RossiN38:00 ORARIO (Insegnamento, Docente, Aula, Ora) Le colonne della tabella formano lo schema della relazione

6 ISTANZE Orario InsegnamentoDocenteAulaOra Analisi matem. ILuigi NeriN18:00 Basi di datiPiero RossiN29:45 ChimicaNicola MoriN19:45 Fisica IMario BruniN111:45 Fisica IIMario BruniN39:45 Sistemi inform.Piero RossiN38:00 ORARIO (Insegnamento, Docente, Aula, Ora) I contenuti delle righe della tabella formano le istanze della relazione

7 DATABASE Corso AulaDocente Rossi Basi di dati DS3 Bruni Reti N3 Neri Sistemi N3 Bruni Controlli G Corsi NomePianoEdificio OMIDS3Terra PincherleGPrimo OMIN3Terra Aule CorsiSedi Corso Aula Reti N3 SistemiN3 Controlli G PianoEdificio OMITerra PincherlePrimo OMITerra Un database e un insieme di tabelle

8 DA MODELLO A OGGETTI A MODELLO RELAZIONALE La trasformazione di uno schema a oggetti in uno schema relazionale avviene eseguendo i seguenti passi: 1.rappresentazione delle classi 2.rappresentazione delle associazioni uno a uno e uno a molti; 3.rappresentazione delle associazioni molti a molti o non binarie; 4.rappresentazione delle gerarchie di inclusione; 5.rappresentazione degli attributi multivalore; 6. appiattimento gli attributi composti

9 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 latoobbligatorio; se entrambe opzionali si costruisce una tabella autonoma come per il caso N-N. Associazioni1-N:gli attributi dellassociazione e la chiave primaria della tabella relativa allentità dal lato N sono inclusi nella tabella relativa allentità dal lato1. Associazioni N-N: diventano tabelle con chiave primaria formata dallunione delle chiavi delle entità coinvolte

10 Accesso ai Dati nei Sistemi Relazionali Una base di dati può essere utilizzata con due modalità: interattivamente: lutente interagisce direttamente con la base di dati presentando al sistema una richiesta di dati. Tale richiesta prende il nome di interrogazione (query). Linterrogazione 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 lelenco dei libri scritti da Calvino, nella richiesta deve essere specificata questa proprietà. Linterrogazione 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

11 Come esempio di linguaggi per luso interattivo di basi di dati, relazionali, vediamo lalgebra 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 lalgebra 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. LINGUAGGI RELAZIONALI

12 Algebra relazionale Insieme di operatori su relazioni che producono relazioni (tabelle) e possono essere composti per svolgere operazioni più complesse

13 Gli operatori fondamentali dellalgebra 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 OPERATORI FONDAMENTALI

14 Paternità PadreFiglio AdamoCaino AbramoIsacco AdamoAbele Genitore Padre (Paternità) PadreFiglio AdamoCaino AbramoIsacco AdamoAbele Genitore RIDENOMINAZIONE

15 ESEMPIO DI UNIONE

16 ESEMPIO DI INTERSEZIONE

17 ESEMPIO DI DIFFERENZA

18 selezione proiezione operatori "ortogonali selezione: decomposizione orizzontale proiezione: decomposizione verticale

19 CognomeFilialeStipendioMatricola NeriMilano645998 NeriNapoli557309 RossiRoma645698 RossiRoma449553 cognome e filiale di tutti gli impiegati Cognome, Filiale (Impiegati) ESEMPIO PROIEZIONE

20 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

21 Operatori booleani Connettivi logici (AND), (OR), (NOT) Operatori di confronto = (uguale) (diverso) (maggiore) (minore) (maggiore o uguale) (minore o uguale)

22 CognomeFilialeStipendioMatricola NeriMilano645998 RossiRoma557309 NeriNapoli645698 Milano 449553 Impiegati Milano 449553NeriNapoli645698 impiegati che guadagnano più di 50 Stipendio > 50 (Impiegati)

23 Impiegati CognomeFilialeStipendioMatricola NeriMilano645998 RossiRoma557309 NeriNapoli645698 Milano 449553 impiegati che guadagnano più di 50 e lavorano a Milano Stipendio > 50 AND Filiale = 'Milano' (Impiegati) RossiRoma557309 NeriNapoli645698 Milano 449553 NeriMilano645998

24 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 ( ) CognomeFilialeStipendioMatricola NeriMilano645998 RossiRoma557309 NeriNapoli645698 Milano 449553 Milano 449553NeriNapoli645698

25 125 213 327 428 NumeroVoto 1Mario Rossi 2Nicola Russo 3Mario Bianchi 4Remo Neri NumeroCandidato 25Mario Rossi 13Nicola Russo 27Mario Bianchi 28Remo Neri VotoCandidato 1 2 3 4 Numero PRODOTTO (Join)

26 ESEMPIO - I join completo: ogni ennupla contribuisce al risultato

27 ESEMPIO - II Join non completo: alcuni valori tra gli attributi comuni non coincidono, quindi, alcune ennuple non partecipano al JOIN

28 ESEMPIO - III Join vuoto: caso limite potrebbe anche succedere che nessuna ennupla trovi il corrispettivo

29 ESEMPIO - IV Laltro caso estremo del JOIN ogni ennupla di R 1 si combina con ogni ennupla di R 2 la cardinalita del risultato e il prodotto delle cardinalita

30 RossiA NeriB BianchiB ImpiegatoReparto Impiegati AMori BBruniB B CodiceCapo Reparti Impiegati JOIN Reparti ImpiegatoRepartoCapoCodice RossiAMoriAAA RossiABBruni NeriBMoriA NeriBBBruni BianchiBMoriA BianchiBBBruni Prodotto cartesiano

31 Sistemi per il recupero delle informazioni DATABASE MANAGEMENT SYSTEM (DBMS)

32 COSE UNA BASE DATI Una base di dati è una raccolta di dati permanenti suddivisi in due categorie: I METADATI I DATI

33 COSE 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.

34 COSE UNA BASE DATI I DATI i dati, le rappresentazioni dei fatti conformi alle definizioni dello schema, con le seguenti caratteristiche: a)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.

35 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 a)per definire lo schema della base di dati, b)per scegliere le strutture dati per la memorizzazione dei dati, c)per usare la base di dati interattivamente o da programmi. DataBase Management System (DBMS) - I

36 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

37 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

38 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

39 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 Lefficienza è 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

40 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.

41 ARCHITETTURA STANDARD - I database Livello logico Livello esterno Livello interno Livello esterno Livello esterno utente

42 LINGUAGGI PER DATABASE Un altro contributo allefficacia: 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)

43 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

44 TRANSAZIONI (PER LUTENTE) Esempi: versamento presso uno presso sportello bancario emissione di certificato anagrafico dichiarazione presso lufficio 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

45 Sistemi per il recupero delle informazioni VISTE

46 Viste Rappresentazioni diverse per gli stessi dati (schema esterno)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) relazioni virtuali

47 Viste materializzate e virtuali relazioni derivate 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)

48 Viste, esempio una vista: Supervisione = PROJ Impiegato, Capo (Afferenza JOIN Direzione) AMori BBruni RepartoCapoRossiA NeriB BianchiB ImpiegatoReparto BianchiBBBruni AfferenzaDirezione

49 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: 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

50 Viste e aggiornamenti, attenzione Vogliamo inserire, nella vista, il fatto che Lupi ha come capo Bruni; oppure che Belli ha come capo Falchi; come facciamo? AfferenzaDirezione AMori BBruni RepartoCapo RossiA NeriB ImpiegatoReparto NeriB B BBruniB B B VerdiA BBruniB B B C Rossi Neri Impiegato Rossi Neri Rossi Neri Verdi Supervisione Mori Bruni Capo Mori Bruni Mori Bruni Mori

51 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

52 52 Sistemi per il recupero delle informazioni IL LINGUAGGIO SQL

53 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)

54 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

55 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. Lutente 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 allinterno 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 allutente 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.

56 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 unistanza vuota; specifica attributi, domini e vincoli; ad esempio Libri(titolo, autore, codice_isbn)

57 CREATE TABLE, esempio CREATE TABLE Impiegato( Matricola CHAR(6) PRIMARY KEY, Nome CHAR(20) NOT NULL, Cognome CHAR(20) NOT NULL, Dipart CHAR(15), Stipendio NUMERIC(9) DEFAULT 0, FOREIGN KEY(Dipart) REFERENCES Dipartimento(NomeDip), UNIQUE (Cognome,Nome) )

58 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)

59 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 quellattributo 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)

60 VINCOLI Il valore di un attributo dichiarato NOT NULL va obbligatoriamente specificato quando si aggiunge unennupla alla relazione. Un altro vincolo è leventuale chiave primaria dichiarata con lopzione 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 loperazione non viene eseguita e viene segnalata una condizione di errore

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

62 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), )

63 CHIAVI ESTERNE Quando si dichiara un vincolo di chiave esterna, il sistema fa i seguenti controlli: 1. quando si inserisce unennupla nella tabella Studenti, o quando si modifica il campo chiave esterna, il valore della chiave esterna deve essere presente in unennupla della tabella CDL; 2. quando si elimina unennupla dalla tabella CDL, se il valore della sua chiave primaria è usato come valore di una chiave esterna di unennupla della tabella Studenti, allora sono possibili tre scelte: a. on delete no action: per proibire la cancellazione dellennupla da CDL. Questa opzione vale anche quando si modifica il valore della chiave primaria di CDL; b. on delete cascade, per eliminare sia lennupla da CDL che tutte le ennuple di Studenti che usano il valore della chiave primaria dellennupla che si elimina; c. on delete set null, per eliminare lennupla da CDL e porre a null il valore della chiave esterna di tutte le ennuple di Studenti che usano il valore della chiave primaria dellennupla che si elimina.

64 Un vincolo di integrità referenziale (foreign key) fra gli attributi X di una relazione R 1 e unaltra relazione R 2 impone ai valori su X in R 1 di comparire come valori della chiave primaria di R 2 Vincolo di integrità referenziale

65 Azioni compensative Esempio: Viene eliminata una ennupla causando una violazione Comportamento standard: Rifiuto dell'operazione Azioni compensative: Eliminazione in cascata Introduzione di valori nulli

66 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 lattributo 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 lennupla dello studente con matricola "081575", si dà il comando: DELETE Studenti WHERE Matricola = "081575"

67 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 dallinizio 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;

68 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

69 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: 1. consultare la relazione Catalogo

70 ESEMPIO - II 2. considerare solo le ennuple in cui AnnoEd = 2001 3. 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.

71 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

72 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 alloperazione di proiezione dellalgebra relazionale.

73 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 unaltra tabella è sufficiente modificare la clausola FROM

74 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.

75 ESEMPIO - I Abbiamo visto che linterrogazione SELECT Titolo, CasaED FROM Catalogo WHERE AnnoEd = 2001 restituisce la relazione contenente titolo e casa editrice dei libri editi nel 2001

76 ESEMPIO - II Invece linterrogazione SELECT Titolo, CasaED FROM Catalogo restituisce la relazione contenente titolo e casa editrice di tutti i libri presenti nel catalogo

77 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

78 Selezione e proiezione Nome e reddito delle persone con meno di trenta anni PROJ Nome, Reddito (SEL Eta<30 (Persone)) SELECT Nome, Reddito FROM Persone WHERE Eta < 30 NomeEtà Persone Reddito Andrea27 Maria55 Anna50 Filippo26 Luigi50 Franco60 Olga30 Sergio85 Luisa75 Aldo25 21 42 35 30 40 20 41 35 87 15

79 NomeEtà Persone Reddito Andrea2721 Maria5542 Anna5035 Filippo2630 Luigi5040 Franco6020 Olga3041 Sergio8535 Luisa7587 Aldo2515 Andrea2721 Aldo2515 Filippo2630 Andrea2721 Aldo2515 Filippo2630 21 15 30 Reddito

80 SELECT, abbreviazioni (alias) SELECT Nome, Reddito FROM Persone WHERE Eta < 30 SELECT p.nome as nome, p.reddito as reddito FROM persone as p WHERE p.eta < 30

81 Selezione, senza proiezione Nome, età e reddito delle persone con meno di trenta anni SEL Eta<30 (Persone) SELECT * FROM Persone WHERE Eta < 30

82 Proiezione, senza selezione Nome e reddito di tutte le persone PROJ Nome, Reddito (Persone) SELECT Nome, Reddito FROM Persone

83 Condizione complessa SELECT * FROM Persone WHERE reddito > 25 and (eta 60)

84 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

85 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

86 Luso 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. Lasterisco (*) di select * indica al database di fornire TUTTE le colonne associate alla tabella SELECT * FROM Catalogo WHERE CasaEd = Feltrinelli Restituisce come risultato

87 Le parole SELECT e FROM consentono a una query di caricare dei dati. La parola chiave DISTINCT limita loutput delle query poiché consente di escludere i valori duplicati di una colonna. E possibile creare una query generica e includere tutte le colonne con listruzione SELECT *. E anche possibile selezionare solo alcune colonne e anche modificare lordine in cui devono essere presentate. RIEPILOGO

88 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, CONDIZIONI E OPERATORI

89 ESPRESSIONI La definizione di espressione è semplice: unespressione 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.

90 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. nellesempio 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

91 CONDIZIONI - II In generale le condizioni sono formate combinando predicati con gli operatori booleani and, or e not 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).

92 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

93 LA CLAUSOLA WHERE La sintassi della clausola WHERE è la seguente: WHERE 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

94 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

95 ESEMPIO SELECT CasaEd, Anno FROM Catalogo WHERE Titolo = Lamante and Anno = (SELECT max(Anno) FROM Catalogo WHERE Titolo = Lamante ) 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 LAnno 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

96 E un potente gruppo di strumenti a base della conoscenza del linguaggio SQL Gli operatori sono gli elementi utilizzati allinterno 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 GLI OPERATORI

97 Non funziona con i tipi di dati che hanno cifre decimali I primi quattro operatori si spiegano da soli. Loperatore modulo restituisce il resto di una divisione. Ad esempio: 5 % 2 = 1 6 % 2 = 0 1. + (somma) 2. - (sottrazione) 3. / (divisione) 4. * (moltiplicazione) 5. % (modulo o resto) GLI OPERATORI ARITMETICI

98 2 * 6 + 9 / 3 vale 12 + 3 = 15 mentre lespressione 2 * (6 + 9) / 3 vale 2 * 15 / 3 = 10 Se vengono inseriti più operatori aritmetici in una espressione senza parentesi, essi vengono valutati nellordine: moltiplicazione, divisione, modulo, somma e sottrazione. Ad esempio:

99 SQL> SELECT * FROM PREZZO ELEMENTOPREZZOINGROSSO Pomodori3,40 Patate5,10 Banane6,70 Rape4,50 Arance8,90 Mele2,30 SQL> SELECT ELEMENTO, PREZZOINGROSSO, PREZZOINGROSSO + 1.50 FROM PREZZO ELEMENTOPREZZOINGROSSOPREZZOINGROSSO + 1.50 Pomodori3,404,90 Patate5,106,60 Banane6,708,20 Rape4,506,00 Arance8,9010,40 Mele2,304,80 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. OPERATORI ARITMETICI: SOMMA (+)

100 E possibile assegnare una intestazione più comprensibile alla nuova colonna: ELEMENTOPREZZOINGROSSOPREZZODETTAGLIO Pomodori3,404,90 Patate5,106,60 Banane6,708,20 Rape4,506,00 Arance8,9010,40 Mele2,303,80 SQL> SELECT ELEMENTO, PREZZOINGROSSO, (PREZZOINGROSSO + 1.50) PREZZODETTAGLIO FROM PREZZO OPERATORI ARITMETICI: SOMMA (+)

101 Loperatore meno svolge due funzioni, la prima è quella di cambiare segno ad un numero: SQL> SELECT * FROM MINMAX REGIONETEMPMAXTEMPMIN Piemonte-410 Toscana413 Sicilia1019 Lombardia-29 Friuli-38 REGIONETEMPMAXTEMPMIN Piemonte4-10 Toscana-4-13 Sicilia-10-19 Lombardia2-9 Friuli3-8 SQL> SELECT REGIONE, -TEMPMAX, -TEMPMIN FROM MINMAX OPERATORI ARITMETICI: SOTTRAZIONE (-)

102 REGIONEMINIMEMASSIMEDIFFERENZE Piemonte-41014 Toscana4139 Sicilia10199 Lombardia-2911 Friuli-3811 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. La seconda (e ovvia) funzione delloperatore meno è quella di sottrarre i valore di una colonna da quelli di unaltra colonna. Ad esempio

103 Loperatore 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) PREZZOVENDITA FROM PREZZO ELEMENTOPREZZOINGROSSOPREZZOVENDITA Pomodori3,401,70 Patate5,102,55 Banane6,703,35 Rape4,502,25 Arance8,904,45 Mele2,301,15 OPERATORI ARITMETICI: DIVISIONE (/)

104 Anche loperatore moltiplicazione è semplice da usare, ad esempio questa query visualizza leffetto di uno sconto del 10% sui prezzi di tutti i prodotti: SQL> SELECT ELEMENTO PRODOTTO, PREZZOINGROSSO, (PREZZOINGROSSO*0.9) NUOVOPREZZO FROM PREZZO; ELEMENTOPREZZOINGROSSONUOVOPREZZO Pomodori3.403.06 Patate5.104.59 Banane6.706.03 Rape4.504.05 Arance8.908.01 Mele2.302.07 OPERATORI ARITMETICI: MOLTIPLICAZIONE (*)

105 Loperatore modulo restituisce il resto intero di una operazione di divisione. Esempio: SQL> SELECT * FROM RESTI NUMERATOREDENOMINATORE 105 83 239 102416 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 NUMERATOREDENOMINATORERESTO 1050 832 2395 1024160 OPERATORI ARITMETICI: MODULO (%)

106 Questi operatori confrontano le espressioni e restituiscono uno di questi tre valori: TRUE, FALSE, Unkown. I primi due sono semplici da spiegare, TRUE significa vero e FALSE significa falso, il terzo, Unknow, identifica lassenza 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 ; ELEMENTOPREZZOINGROSSO Limoni Nel database la colonna prezzoingrosso della riga Limoni non contiene dati (non è zero) OPERATORI DI CONFRONTO

107 Nella clausola WHERE il segno uguale è loperatore di confronto più utilizzato, molto comodo per selezionare un valore tra tanti. SQL> SELECT * FROM AMICI ; COGNOMENOMECITTADATA DI NASCITATELEFONO ROSSIALEMILANO1/1/197002 3425678 BIANCHISABYTORINO25/5/1985011 6707221 BROWNJOPISA12/10/1968050 880245 NERIALEBOLOGNA13/11/1986051 6711 SQL> SELECT * FROM AMICI WHERE NOME = ALE ; COGNOMENOMECITTADATA DI NASCITATELEFONO ROSSIALEMILANO1/1/197002 3425678 NERIALEBOLOGNA13/11/1986051 6711 SQL> SELECT * FROM AMICI WHERE NOME = Ale ; no row selected. OPERATORI DI CONFRONTO: =

108 questi operatori operano nel seguente modo modo: SQL> SELECT * FROM PREZZO; ELEMENTOPREZZOINGROSSO Pomodori3.40 Patate5.10 Banane6.70 Rape4.50 Arance8.90 Mele2.30 SQL> SELECT * FROM PREZZO WHERE PREZZOINGROSSO > 4.50; ELEMENTOPREZZOINGROSSO Patate5.10 Banane6.70 Arance8.90 SQL> SELECT * FROM PREZZO WHERE PREZZOINGROSSO >= 4.50; ELEMENTOPREZZOINGROSSO Patate5.10 Banane6.70 Rape4.50 Arance8.90 Non si usano apici per racchiudere il numero 4.50 OPERATORI DI CONFRONTO: >, >=

109 questi operatori operano in senso inverso al precedente: COGNOMENOMECITTADATA DI NASCITATELEFONO ROSSIALEMILANO1/1/197002 3425678 BIANCHISABYTORINO25/5/1985011 6707221 BROWNJOPISA12/10/1968050 880245 NERIALEBOLOGNA13/11/1986051 6711 COGNOMENOMECITTADATA DI NASCITATELEFONO ROSSIALEMILANO1/1/197002 3425678 BROWNJOPISA12/10/1968050 880245 SQL> SELECT * FROM AMICI; SQL> SELECT * FROM AMICI WHERE CITTA <= MILANO ; OPERATORI DI CONFRONTO: <, <=

110 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): COGNOMENOMECITTADATA DI NASCITATELEFONO BIANCHISABYTORINO25/5/1985011 6707221 BROWNJOPISA12/10/1968050 880245 In molte implementazione SQL è indifferente usare la forma (<>) anzichè (!=) SQL> SELECT * FROM AMICI WHERE NOME <> ALE; OPERATORI DI CONFRONTO: <>, !=

111 NOMEPOSIZIONENUMEROPARTE FEGATODESTRA-ADDOME1 CUOREPETTO2 FARINGEGOLA3 VERTEBRECENTRO-DORSO4 INCUDINEORECCHIO5 RENEDORSO6 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.

112 SQL> SELECT * FROM PARTI WHERE POSIZIONE LIKE %DORSO%; NOMEPOSIZIONENUMEROPARTE VERTEBRECENTRO-DORSO4 RENEDORSO6 SQL> SELECT * FROM PARTI WHERE POSIZIONE LIKE DORSO%; NOMEPOSIZIONENUMEROPARTE RENEDORSO6 SQL> SELECT * FROM PARTI WHERE POSIZIONE LIKE %DORSO; NOMEPOSIZIONENUMEROPARTE VERTEBRECENTRO-DORSO4 OPERATORI DI CARATTERE: LIKE Loperatore LIKE consente di estrarre dati che somigliano ad un certo schema

113 SQL> SELECT * FROM PARTI WHERE NOME LIKE F%; NOMEPOSIZIONENUMEROPARTE FEGATODESTRA-ADDOME1 FARINGEGOLA3 SQL> SELECT * FROM PARTI WHERE POSIZIONE LIKE f%; no rows selected. Loperatore like è sempre sensibile ai caratteri minuscoli/maiuscoli 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. NOMEPOSIZIONENUMEROPARTE FEGATODESTRA-ADDOME1 CUOREPETTO2 FARINGEGOLA3 VERTEBRECENTRO-DORSO4 INCUDINEORECCHIO5 RENEDORSO6

114 REGOLE A LIKE maschera A NOT LIKE maschera Controlla che il valore dellattributo 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

115 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%

116 Il carattere di sottolineatura è un carattere jolly singolo. E possibile utilizzare più di un carattere di sottolineatura e può essere combinato con loperatore LIKE. SQL> SELECT * FROM AMICI WHERE PROVINCIA LIKE _O; COGNOMENOMECITTAPROVINCIATELEFONO ROSSIALEMILANOMI02 3425678 BIANCHISABYTORINOTO011 6707221 BROWNJOPISAPI050 880245 NERIALEBOLOGNABO051 6711 COGNOMENOMECITTAPROVINCIATELEFONO BIANCHISABYTORINOTO011 6707221 NERIALEBOLOGNABO051 6711 LOPERATORE DI SOTTOLINEATURA

117 SQL> SELECT NOME || COGNOME NOMECOMPLETO FROM AMICI; COGNOMENOMECITTAPROVINCIATELEFONO ROSSIALEMILANOMI02 3425678 BIANCHISABYTORINOTO011 6707221 BROWNJOPISAPI050 880245 NERIALEBOLOGNABO051 6711 Il simbolo || serve a concatenare due stringhe: NOMECOMPLETO ROSSIALE BIANCHISABY BROWNJO NERIALE LOPERATORE DI CONCATENAZIONE (||)

118 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 unistruzione SQL. Essi sono: AND OR NOT OPERATORI LOGICI

119 OPERATORI LOGICI: AND COGNOMENUMDIPANNIFERIEGODUTE ABITA10124 BACCHI104523 BLESSI107845 BOLIVAR233480 BOLDI21015100 COSTALES2111078 Loperatore 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 loperatore AND restituisce FALSE. Ad esempio, per sapere quali impiegati hanno lavorato per lazienda 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; COGNOMENUMDIPANNIFERIEGODUTE BACCHI104523 BOLIVAR233480

120 COGNOMENUMDIPANNIFERIEGODUTE ABITA10124 BACCHI104523 BLESSI107845 BOLIVAR233480 BOLDI21015100 COSTALES2111078 Loperatore 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%; COGNOMENUMDIPANNIFERIEGODUTE BOLDI21015100 BOLIVAR233480 COSTALES2111078 Loperatore OR richiede che una soltanto delle condizioni sia vera affinchè dati possano essere restitutiti OPERATORI LOGICI: OR

121 COGNOMENUMDIPANNIFERIEGODUTE ABITA10124 BACCHI104523 BLESSI107845 BOLIVAR233480 BOLDI21015100 COSTALES2111078 Loperatore logico NOT ha il compito di invertire il significato di una condizione SQL> SELECT * FROM FERIE WHERE COGNOME NOT LIKE B%; COGNOMENUMDIPANNIFERIEGODUTE ABITA10124 COSTALES2111078 OPERATORI LOGICI: NOT

122 Loperatore UNION restituisce il risultato di due query escludendo le righe duplicate. Esempio: quante persone diverse giocano in entrambe le squadre? COGNOME ABITA BRAVO CARLINI DECCA ESTERLE FUNDARI GIANI COGNOME ABITA BACCO CARLINI DINI ESTERLE FALCONI GIANI SQL> SELECT COGNOME FROM CALCETTO UNION SELECT COGNOME FROM CALCIO; calcetto COGNOME ABITA BACCO BRAVO CARLINI DECCA DINI ESTERLE FALCONI FUNDARI GIANI A + B - C AB C Sono stati esclusi i doppioni calcio OPERATORI DI INSIEMI: UNION

123 Loperatore UNION ALL restituisce il risultato di due query incluse le righe duplicate. COGNOME ABITA BRAVO CARLINI DECCA ESTERLE FUNDARI GIANI COGNOME ABITA BACCO CARLINI DINI ESTERLE FALCONI GIANI SQL> SELECT COGNOME FROM CALCETTO UNION ALL SELECT COGNOME FROM CALCIO; calcio calcetto COGNOME ABITA BRAVO CRLINI DECCA ESTERLE FUNDARI GIANI ABITA BACCO CARLINI DINI ESTERLE FALCONI GIANI Sono incluse tutte le righe Esempio: quante persone giocano al calcetto e quante al calcio? A + B AB C OPERATORI DI INSIEMI: UNION

124 Loperatore INTERSECT restituisce soltanto le righe che vengono trovate in entrambe le query COGNOME ABITA BRAVO CARLINI DECCA ESTERLE FUNDARI GIANI COGNOME ABITA BACCO CARLINI DINI ESTERLE FALCONI GIANI SQL> SELECT COGNOME FROM CALCETTO INTERSECT SELECT COGNOME FROM CALCIO; calciocalcetto COGNOME ABITA CRLINI ESTERLE GIANI Sono inclusi solo le righe comuni Esempio: quali persone giocano in entrambe le squadre? C AB C OPERATORI DI INSIEMI: INTERSECT

125 Loperatore MINUS restituisce le righe della prima query che non sono presenti nella seconda COGNOME ABITA BRAVO CARLINI DECCA ESTERLE FUNDARI GIANI COGNOME ABITA BACCO CARLINI DINI ESTERLE FALCONI GIANI SQL> SELECT COGNOME FROM CALCETTO MINUS SELECT COGNOME FROM CALCIO; calciocalcetto COGNOME BACCCO DINI FALCONI Seleziona quelli che giocano solo al calcetto Esempio: quali persone giocano solo al calcetto? A - C AB C OPERATORI DI INSIEMI: MINUS

126 CognomeFilialeEtàMatricola NeriMilano455998 RossiRoma327309 BruniMilano NULL 9553 Impiegati NeriMilano455998 BruniMilano NULL 9553 SEL Età > 40 OR Età IS NULL (Impiegati) NeriMilano455998 BruniMilanoNULL9553 Gestione dei valori nulli Gli impiegati la cui età è o potrebbe essere maggiore di 40 select * from impiegati where eta > 40 or eta is null

127 Interrogazioni su più relazioni Nella clausola FROM possono essere presenti più relazioni. Ciò è necessario quando le informazioni per eseguire linterrogazione 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. Lattributo Titolo è nella relazione Film mentre lattributo Attore è nella relazione Attori. Occorre pertanto visitare entrambe le relazioni

128 ESEMPIO - I.Supponiamo di avere le seguenti istanze di relazione:

129 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 lattributo Attore ha valore C.Eastwood.

130 ESEMPIO - III Viene prelevato lattributo 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.

131 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 linterogazione 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 dellinterrogazione: SELECT F.Titolo FROM Film F, Attori A WHERE F.CodFilm = A.CodFilm and A.Attore = C.Eastwood

132 JOIN Sottolineiamo il fatto che fra le due relazioni deve esistere un collegamento (una chiave esterna in una relazione, chiave primaria nellaltra), e che nella clausola WHERE dellinterrogazione 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. Loperazione 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 unaltra (ad es Film.CodFilm = Attori.CodFilm) è detto predicato di join.

133 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 (SEL A2=A3 (R1 JOIN R2))

134 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

135 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 lattributo 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

136 136 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

137 NomeEtà Persone Reddito Andrea27 Maria55 Anna50 Filippo26 Luigi50 Franco60 Olga30 Sergio85 Luisa75 Aldo25 21 42 35 30 40 20 41 35 87 15 Madre Maternità Figlio Luisa Anna Maria Luisa Maria Olga Filippo Andrea Aldo Luigi Padre Paternità Figlio Luigi Franco Sergio Olga Filippo Andrea Aldo Franco

138 ALTRI ESEMPI - Selezione, proiezione e join I padri di ogni persona PROJ Padre (paternita JOIN Figlio =Nome persone) Il nome e letà dei figli di Luisa PROJ Nome, eta ( SEL MADRE=Luisa (maternita) JOIN Figlio =Nome persone ) SELECT distinct padre FROM persone, paternita WHERE figlio = nome SELECT distinct padre FROM persone, paternita WHERE figlio = nome and madre=Luisa

139 Funzioni di aggregazione SQL consente 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.

140 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 lintera 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

141 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 lordinaria somma aritmetica dei valori (che devono essere numerici) dellattributo CFU. Consideriamo la seguente istanza del DB

142 SUM Il join E.CodiceAF = A.CodiceAF da luogo alla seguente relazione La condizione E.Matricola=123 da luogo alla seguente relazione

143 SUM La funzione Sum esegue la somma dei valori dellattributo CFU e si ottiene il risultato desiderato Luso 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

144 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.

145 Riassumendo Le funzioni di aggregazione previste da SQL sono: avg media aritmetica (valori numerici) count numero di valori max valore massimo min valore minimo sum somma (valori numerici) Min e Max, quando sono applicati a valori non numerici, danno rispettivamente il primo e lultimo valore nellordine alfabetico.

146 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). Lordinamento 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

147 Persone NomeReddito Andrea21 Aldo15 Filippo30 Persone NomeReddito Andrea21 Aldo15 Filippo30 select nome, reddito from persone where eta < 30 select nome, reddito from persone where eta < 30 order by nome

148 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 Luso del predicato is [not] null è lunico modo per stabilire se una dvd è o non è noleggiat0.

149 Sistemi per il recupero delle informazioni ESERCIZI

150 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à)

151 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

152 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

153 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

154 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*)

155 ESERCIZIO 2 1- Il titolo dei romanzi del 19° secolo 2- Il titolo, lautore e lanno 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 lanno dei film tratti dal romanzo Robin Hood 6- Per ogni autore italiano, lanno del primo e dellultimo romanzo.

156 ESERCIZIO 3 SCHEMA RELAZIONALE: STUDENTI (Matricola, NomeS, CorsoLaurea*, AnnoN) CORSIDILAUREA (CorsoLaurea, TipoLaurea, Facoltà) FREQUENTA (Matricola*, CodCorso*) CORSI (CodCorso, NomeCorso, CodDocente*) DOCENTI (CodDocente, NomeD, Dipartimento)

157 ESERCIZIO 3 1- Il nome e lanno 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 letà 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

158 Esercizi Dato il seguente schema: AEREOPORTO(Città, Nazione, NumPiste) VOLO(IdVolo, GiornoSett, CittaPart, OraPart, CittaArr, OraArr, TipoAereo) AEREO(TipoAereo, NumPasseggeri, QtaMerci) In SQL: 1. Creare il Database 2. Città con un aereoporto di cui non è noto il numero di piste 3. Città e orario di partenza dei voli del lunedì 4. Nazione e numero piste dellaereoporto da cui parte il volo con IdVolo=A001

159 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) ) AEREOPORTO(Città, Nazione, NumPiste) VOLO(IdVolo, GiornoSett, CittaPart, OraPart, CittaArr, OraArr, TipoAereo) AEREO(TipoAereo, NumPasseggeri, QtaMerci)

160 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) ) AEREOPORTO(Città, Nazione, NumPiste) VOLO(IdVolo, GiornoSett, CittaPart, OraPart, CittaArr, OraArr, TipoAereo) AEREO(TipoAereo, NumPasseggeri, QtaMerci)

161 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 dellaeroporto 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

162 ALTRI ESERCIZI 1. Città di partenza, orario di partenza, città di arrivo, orario di arrivo degli aerei con merci>1000 2. Il tipo di aereo e il numero dei passeggeri dei voli che arrivano a Torino 3. Il numero dei voli che partono il venerdì da Francoforte 4. La quantità dei voli che partono da ogni città 5. Le città, numero dei voli in arrivo, nazione, avente numero di volo in arrivo maggiore di 10 6. Il numero dei voli internazionali che partono il lunedì da Torino


Scaricare ppt "Sistemi per il recupero delle informazioni RIASSUNTO."

Presentazioni simili


Annunci Google