1 / 83

Sistemi per il recupero delle informazioni

Sistemi per il recupero delle informazioni. IL LINGUAGGIO SQL. Accesso ai Dati nei Sistemi Relazionali. Una base di dati può essere utilizzata con due modalità:

xiang
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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Sistemi per il recupero delle informazioni IL LINGUAGGIO SQL

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

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

  4. CREAZIONE DI TABELLE Per definire una relazione (detta tabella nella terminologia SQL), si usa il comando “create table”, ad esempio Libri(titolo, autore, codice_isbn)

  5. 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 • unique: il valore può comparire una volta sola • primary key: chiave primaria • 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

  6. ESEMPIO create table libri ( titolo char(30) not null, autore char(15) default ‘anonimo’, ISBN char(13) not null, data_acquisto date, collocazione char(5) unique, primary key (ISBN) )

  7. 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), • )

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

  9. 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"

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

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

  12. 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 SGBD, 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.

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

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

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

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

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

  18. ESEMPIO - II Invece l’interrogazione SELECT Titolo, CasaED FROM Catalogo restituisce la relazione contenente titolo e casa editrice di tutti i libri presenti nel catalogo

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

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

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

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

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

  24. ESPRESSIONI, CONDIZIONI E OPERATORI • Obiettivi • approfondire le clausole SELECT e FROM • 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

  25. 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; • 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.

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

  27. CONDIZIONI - II • In generale le condizioni sono formate combinando predicaticon gli operatori booleani and, ore 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).

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

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

  30. LA CLAUSOLA WHERE - III 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”

  31. 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 dalla BD 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

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

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

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

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

  36. OPERATORI ARITMETICI: SOMMA (+) E’ possibile assegnare una intestazione più comprensibile alla nuova colonna: SQL> SELECT ELEMENTO, PREZZOINGROSSO, (PREZZOINGROSSO + 1.50) PREZZODETTAGLIO FROM PREZZO

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

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

  39. 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) PREZZOVENDITA FROM PREZZO

  40. 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) NUOVOPREZZO FROM PREZZO;

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

  42. 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, TRUE significa vero e FALSE significa 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)

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

  44. OPERATORI DI CONFRONTO: > , >= questi operatori operano nel seguente modo modo: 1 2 3 Non si usano apici per racchiudere il numero 4.50

  45. OPERATORI DI CONFRONTO:<, <= questi operatori operano in senso inverso al precedente: SQL> SELECT * FROM AMICI; SQL> SELECT * FROM AMICI WHERE CITTA < ‘MILANO’ ;

  46. 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è (!=)

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

  48. 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’;

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

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

More Related