Le query in SQL Unit didattica sviluppata per

  • Slides: 26
Download presentation
Le query in SQL Unità didattica sviluppata per l’ITIS “A. Volta” – Classe 5

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

Sommario degli argomenti 1 a parte l Query di interrogazione l Proiezione l Selezione

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

Query di selezione l Come avevamo già anticipato, le istruzioni di interrogazione permettono di

Query di selezione l 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) cap città prov Ambiente di esecuzione SQL nome Cogn tel indir cap Select Nome, Cognome città From … Where … nome cogn città

L’istruzione SELECT l Seleziona, tra le tuple appartenenti alle tabelle specificate, soltanto quelle che

L’istruzione SELECT l Seleziona, tra le tuple appartenenti alle tabelle specificate, soltanto quelle che soddisfano il criterio indicato, visualizzandone i valori degli attributi esiderati. SELECT Tabella. N. attributo. P, . . Tabella. M. attributo. R FROM Tabella. N, . . Tabella. M WHERE <condizione booleana>; Condizione vero/falso che determina l’appartenenza o meno alla tabella risultato delle righe coinvolte nell’ interrogazione Elenco attributi di cui è richiesta la visualizzazione Nomi tabelle cui appartengono gli attributi

Operatori algebrici relazionali con SELECT: la Proiezione Attraverso questa istruzione, è possibile manipolare le

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

Select: proiezione Consideriamo ad esempio la tabella viaggi, e supponiamo di voler eseguire una

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

Select: proiezione Il cui risultato è il seguente:

Select: proiezione Il cui risultato è il seguente:

Operatori algebrici relazionali con SELECT: la Selezione Analogamente, è possibile realizzare l’operazione algebrica relazionale

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 <condizione booleana>; Seleziona Tutti gli attributi Applica per Ciascuna tupla La condizione booleana Questa istruzione permette di applicare alla relazione Tabella, l’operatore algebrico di SELEZIONE

Select: Selezione Supponiamo di ‘selezionare’ dalla tabella viaggi, tutte le Tuple per le quali

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:

L’istruzione SELECT: esempio Naturalmente è possibile comporre nell’ordine la Selezione e la Proiezione: SELECT

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

…in sintesi L’istruzione applica la condizione booleana (clausola WHERE) a ciascuna riga della tabella

…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

…segue clausola WHERE Il criterio di selezione, quantunque possa essere complesso, avrà sempre 2

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

Ancora sulla clausola ‘Where’ SQL mette a disposizione un operatore like per il confronto

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) L’op. Like può Essere preceduto dall’operatore Not che complementa, Nega, l’insieme restituito da like SELECT Destinazione, Data FROM Viaggi WHERE Destinazione like ‘_a%’; che restituisce:

Select: Ridenominazione Anche l’operazione di ridenominazione degli attributi Previsto dall’algebra relazionale è realizzato dalla

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

Select: Ridenominazione Che restituisce:

Select: Ridenominazione Che restituisce:

Alcune caratteristiche Supponiamo di specificare la seguente interrogazione: SELECT Destinazione FROM Viaggi; Il cui

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 deve essere unico

…segue Per restituire alla tabella il suo significato insiemistico, esiste in SQL la parola

…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”

Select tra più tabelle Supponiamo che esista un’altra tabella, Prenotazioni, e che tra esse

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

Select tra più tabelle La tabella delle Prenotazioni potrebbe essere la seguente: Potremmo chiederci

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

Select: Tabelle correlate L’ideale sarebbe disporre di un’unica tabella in grado di contenere entrambe

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? Viaggi cod. Viaggio Destinazione Data Partenza Prenotazioni Mezzo Num. Posti Costo cod. Viaggio Nro-Prenot Nro_psti-Ptr Cliente Indirizzo Anticipo A 1 B 0 Parigi 1505/1999 Roma Aereo 30 300 A 1 B 0 432312 1 Caio Rossi Via Verdi 100 A 1 B 0 Parigi 1505/1999 Roma Aereo 30 300 A 1 B 0 432313 4 Adele Nari Via Font 100 AMP 2 Amsterdam 17/05/2005 Napoli Aereo 18 500 AMP 2 334311 1 Giusp Esp Cso Italia 150 AMP 2 Amsterdam 17/05/2005 Napoli Aereo 18 500 AMP 2 334312 4 Vito Fonta Via C. Cort 300 … … . . . … … … …

Select: Inner Join Abbiamo cioè costruito il prodotto cartesiano Viaggi X Prenotazioni, con il

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

…segue Da questa tabella, restringendo l’insieme degli attributi osservati, otteniamo la risposta al quesito

…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 WHERE Prenotazioni, Viaggi viaggi. cod. Viaggio=prenotazioni. Cod. Viaggio;

Varianti join: LEFT JOIN Un’alternativa all’INNER JOIN è quella di costruire una tabella che

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. Cod. Viaggio=Prenotazioni. cod. Viaggio; Valori NULL

Varianti join: LEFT JOIN Su questo esempio allora ci si potrebbe chiedere quali siano

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

Varianti join: RIGHT JOIN Il RIGHT JOIN ha un comportamento anologo al LEFT JOIN:

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. Cod. Viaggio=Prenotazioni. cod. Viaggio;