La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Le query in SQL Unità didattica sviluppata per l’ITIS “A. Volta” – Classe 5 sez. I Ing Domenico Liguori - Università degli studi di Napoli “Federico II”

Presentazioni simili


Presentazione sul tema: "Le query in SQL Unità didattica sviluppata per l’ITIS “A. Volta” – Classe 5 sez. I Ing Domenico Liguori - Università degli studi di Napoli “Federico II”"— Transcript della presentazione:

1 Le query in SQL Unità didattica sviluppata per l’ITIS “A. Volta” – Classe 5 sez. I Ing Domenico Liguori - Università degli studi di Napoli “Federico II” Novembre 2005

2 Sommario degli argomenti 1a parte Query di interrogazione Proiezione Selezione Ridenominazione Join

3 Query di selezione Come avevamo già anticipato, le istruzioni di interrogazione permettono di estrarre da una o più tabelle le informazioni a cui si è interessati, organizzando la risposta in una tabella ideale (dynaset) Ambiente di esecuzione SQL cap città prov nome Cogn tel indir cap nome cogn città Select Nome, Cognome città From … Where …

4 L’istruzione SELECT Seleziona, tra le tuple appartenenti alle tabelle specificate, soltanto quelle che soddisfano il criterio indicato, visualizzandone i valori degli attributi esiderati. SELECT TabellaN.attributoP,.. TabellaM.attributoR FROM TabellaN,..TabellaM WHERE ; Elenco attributi di cui è richiesta la visualizzazione Nomi tabelle cui appartengono gli attributi Condizione vero/falso che determina l’appartenenza o meno alla tabella risultato delle righe coinvolte nell’ interrogazione

5 Operatori algebrici relazionali con SELECT: la Proiezione Attraverso questa istruzione, è possibile manipolare le relazioni applicando su di esse gli operatori tipici dell’al- gebra relazionale. SELECT attributoX,.. attributoW FROM Tabella; Il seguente impiego dell’istruzione SELECT: Permette di applicare alla relazione Tabella, l’operatore Algebrico di PROIEZIONE

6 Select: proiezione Consideriamo ad esempio la tabella viaggi, e supponiamo di voler eseguire una proiezione sugli attributi Destinazione,Data, Costo Tabella Origine: viaggi SELECT Destinazione, Data, Costo FROM Viaggi; Forniremo un’istruzione specifica:

7 Select: proiezione Il cui risultato è il seguente:

8 Operatori algebrici relazionali con SELECT: la Selezione Analogamente, è possibile realizzare l’operazione algebrica relazionale di Selezione. La sintassi cui faremo riferimento è la seguente: SELECT * FROM Tabella WHERE ; Seleziona Tutti gli attributi Applica per Ciascuna tupla La condizione booleana Questa istruzione permette di applicare alla relazione Tabella, l’operatore algebrico di SELEZIONE

9 Select: Selezione Supponiamo di ‘selezionare’ dalla tabella viaggi, tutte le Tuple per le quali il costo del viaggio è <= 400 Euro SELECT * FROM Viaggi WHERE Costo <=400; Che restituisce:

10 L’istruzione SELECT: esempio Naturalmente è possibile comporre nell’ordine la Selezione e la Proiezione: SELECT Destinazione, Costo, DurataGG, Data FROM Viaggi WHERE Costo <= 500; Tabella Origine: viaggi

11 …in sintesi L’istruzione applica la condizione booleana (clausola WHERE) a ciascuna riga della tabella viaggi, e laddove il risultato sia vero preleva gli attributi richiesti e li scrive nella tabella risultato: La condizione dunque, rappresenta il criterio in base alla quale vengono filtrate le informazioni che non sono di interesse

12 …segue clausola WHERE Il criterio di selezione, quantunque possa essere complesso, avrà sempre 2 valori risultanti, cioè VERO/FALSO SELECT Destinazione, Costo, DurataGG, Data FROM Viaggi WHERE ( Costo Now()); Funzione che Ritorna la data odierna (25/11/2005) Il recordset risultante diventa:

13 Ancora sulla clausola ‘Where’ SQL mette a disposizione un operatore like per il confronto di stringhe. Sono forniti inoltre due caratteri speciali: _ : rappresenta un carattere arbitrario (? In Access) %: stringa di un numero arbitrario di caratteri (* in Access) SELECT Destinazione, Data FROM Viaggi WHERE Destinazione like ‘_a%’; che restituisce: L’op. Like può Essere preceduto dall’operatore Not che complementa, Nega, l’insieme restituito da like

14 Select: Ridenominazione Anche l’operazione di ridenominazione degli attributi Previsto dall’algebra relazionale è realizzato dalla istruzione SELECT: SELECT Attributo1, AttributoN AS MIOAttributo, Attributo M FROM Tabella ; Specifichiamo ad esempio, la durata dei viaggi come Numero di settimana e giorni residui: SELECT Destinazione, Data, int(durataGG/7) AS Settimane, (durataGG mod 7) AS giorni FROM Viaggi;

15 Select: Ridenominazione Che restituisce:

16 Alcune caratteristiche Supponiamo di specificare la seguente interrogazione: SELECT Destinazione FROM Viaggi; Il cui risultato è: Compaiono dei duplicati. Una tabella relazionale è un insieme di elementi righe (tuple), per cui ogni elemento distinto essere unico deve essere unico

17 …segue Per restituire alla tabella il suo significato insiemistico, esiste in SQL la parola chiave “distinct”: SELECT distinct Destinazione FROM Viaggi; Se è richiesta esplicitamente la presenza dei duplicati, si usa nella query la parola chiave “all”

18 Select tra più tabelle Viaggi Prenotazioni 1  Cod_viaggio Destinazione Nro-prenotazione Durata_giorni Nro_posti-prenotati Data_partenza Cliente Partenza Indirizzo_cliente Mezzo Anticipo Nro_posti Costo Supponiamo che esista un’altra tabella, Prenotazioni, e che tra esse vi sia una relazione 1 a molti, ovvero 1 Viaggio -> più Prenotazioni

19 Select tra più tabelle La tabella delle Prenotazioni potrebbe essere la seguente: Potremmo chiederci ad esempio, quali sono le mete dei Clienti prenotati In questo caso però, le mete (‘Destinazioni’) compaiono nella tabella Viaggi, mentre i ‘Clienti’ figurano nella tabella Prenotazioni: cioè due tabelle distinte

20 codViaggio A1B0 Destinazione Parigi Data 1505/1999 Partenza Roma Mezzo Aereo NumPosti 30 Costo 300 codViaggio A1B0 Nro-Prenot Nro_psti-Ptr 1 Cliente Caio Rossi Indirizzo Via Verdi Anticipo 100 A1B0Parigi1505/1999RomaAereo30300A1B Adele NariVia Font100 AMP2Amsterdam17/05/2005NapoliAereo18500AMP Giusp EspCso Italia150 AMP2Amsterdam17/05/2005NapoliAereo18500AMP Vito FontaVia C.Cort300 ……………….. …...……… Select: Tabelle correlate L’ideale sarebbe disporre di un’unica tabella in grado di contenere entrambe le informazioni, e sulla quale svolgere l’interrogazione. Dobbiamo cioè correlare dati in tabelle diverse identificando un attributo che abbia valori uguali sulle due tabelle. Qual è questo attributo con valori uguali? ViaggiPrenotazioni

21 Select: Inner Join SELECT * FROM Viaggi INNER JOIN Prenotazioni ON Viaggi.CodViaggio=Prenotazioni.codViaggio; Abbiamo cioè costruito il prodotto cartesiano Viaggi X Prenotazioni, con il vincolo di considerare solo le righe che presentano l’uguaglianza nell’attributo comune codViaggio. L’SQL è in grado di generare una tale relazione; l’operatore binario corrispondente è noto come INNER JOIN SELECT * FROM Viaggi, Prenotazioni WHERE Viaggi.CodViaggio=Prenotazioni.codViaggio;

22 …segue Da questa tabella, restringendo l’insieme degli attributi osservati, otteniamo la risposta al quesito da cui eravamo partiti: Le mete dei clienti SELECT Prenotazioni.Cliente, Prenotazioni.Indirizzo, Viaggi. Destinazione, FROM Prenotazioni, Viaggi WHERE viaggi.codViaggio=prenotazioni.CodViaggio;

23 Varianti join: LEFT JOIN Un’alternativa all’INNER JOIN è quella di costruire una tabella che ne ampli il risultato, estendendolo cioè con le righe della tabella di sinistra per le quali non esiste una corrispondente riga nella tabella di destra SELECT * FROM Viaggi LEFT JOIN Prenotazioni ON Viaggi.CodViaggio=Prenotazioni.codViaggio; Valori NULL

24 Varianti join: LEFT JOIN Su questo esempio allora ci si potrebbe chiedere quali siano i pacchetti Viaggio che siano rimasti invenduti: SELECT Viaggi.CodViaggio,Viaggi.Destinazione, Viaggi.Data FROM Viaggi LEFT JOIN Prenotazioni ON Viaggi.CodViaggio=Prenotazioni.codViaggio WHERE (Prenotazioni.codViaggio IS NULL) AND (Viaggi.Data < Date()) ORDER BY Viaggi.Data; Ordine crescente Del dynaset

25 Varianti join: RIGHT JOIN Il RIGHT JOIN ha un comportamento anologo al LEFT JOIN: aggiunge alla tabella restituita dall’INNER JOIN le righe della tabella di destra per le quali non esiste una corrispondente riga nella tabella di sinistra Il risultato coincide con l’inner Join perché per ogni record della tabella di destra (Prenotazioni) esiste un record corrispondente nella tabella di sinistra (Viaggi). La sintassi è: SELECT * FROM Viaggi RIGHT JOIN Prenotazioni ON Viaggi.CodViaggio=Prenotazioni.codViaggio;

26


Scaricare ppt "Le query in SQL Unità didattica sviluppata per l’ITIS “A. Volta” – Classe 5 sez. I Ing Domenico Liguori - Università degli studi di Napoli “Federico II”"

Presentazioni simili


Annunci Google