La manipolazione dei dati nel modello relazionale avviene mediante gli operatori dellalgebra relazionale. Gli operandi sono relazioni (tabelle) e il risultato ancora una relazione (tabella). La tabella ottenuta dallesecuzione di unoperazione detta resultset o recordset risultante ed temporanea, cio non viene memorizzata nel database, a meno che non venga specificato diversamente. Gli operatori dellalgebra relazionale sono otto. In questa dispensa ne vedremo tre: - loperatore di proiezione (project); - loperatore di selezione (select); - loperatore di ridenominazione (rename). Tutte le funzionalit degli operatori relazionali sono realizzate mediante un unico costrutto sintattico chiamato query (interrogazione). In SQL tale costrutto rappresentato con il comando SELECT, il quale presenta diverse forme a seconda della funzionalit che si desidera ottenere. Al fine di rendere pi chiara la spiegazione e fornire degli esempi, si far uso della seguente tabella di esempio.
IMPIEGATO
matr t1
1
stipendio 60 40 40 40 50 70
dipartimento No No No Su Su Is
t2 t3 t4 t5 t6
Proiezione
La proiezione consente di scegliere quali colonne dovranno comparire nel resultset. La sintassi da utilizzare la seguente: SELECT colonna1, ..., colonnaN FROM tabella Esempio 1: Visualizzare matricola e cognome di ogni impiegato SELECT FROM matr, cogn impiegato
t1 indica la tupla 1
Resultset:
matr t1 t2 t3 t4 t5 t6 101 102 103 201 202 301 cogn Sili Rossi Neri Neri Verdi Bisi
Esempio 2: Visualizzare tutti i dati di ciascun impiegato Esiste una sintassi per indicare tutte le colonne di una tabella, senza doverle scrivere. SELECT FROM * impiegato;
La precedente query equivalente a SELECT FROM matr, cogn, stipendio, dipartimento impiegato;
Resultset: tabella IMPIEGATO Esempio 3: Visualizzare tutti i cognomi degli impiegati SELECT FROM Resultset:
cogn t1 t2 t3 t4 t5 t6 Sili Rossi Neri Neri Verdi Bisi
cogn impiegato
Esempio 4: Visualizzare tutti i cognomi degli impiegati, senza ripetizioni Come si pu notare, la query dellesempio 3 non elimina i cognomi ripetuti. Se si desidera eliminare le ripetizioni si deve utilizzare la clausola DISTINCT. SELECT FROM Resultset:
cogn t1 t2 t3 t4 t5 Sili Rossi Neri Verdi Bisi
Esempio 5: Visualizzare gli stipendi degli impiegati aumentati del 2%, insieme alla matricola Gli argomenti della SELECT possono essere costituiti anche da espressioni aritmetiche. SELECT FROM Resultset:
matr t1 t2 t3 t4 t5 t6 101 102 103 201 202 301 stipendio 61.2 40.8 40.8 40.8 51 71.4
Ridenominazione
La ridenominazione consente di atribuire un nome diverso alle colonne della clausola SELECT e alle tabelle della clausola FROM, utilizzando loperatore AS. La ridenominazione avviene specificando AS, seguito dal nuovo nome (alias), subito dopo la colonna/tabella.
Loperatore di ridenominazione non modifica il nome delle colonne nella tabella originale ma solo nella tabella risultante; si tratta quindi di una modifica temporanea che ha come scopo il rendere maggiormente comprensibili i risultati. Per quanto riguarda la modifica del nome di una tabella, lutilit risiede nella possibilit di riferirsi alla stessa con un nome semplificato o abbreviato. Esempio 6: Visualizzare matricola e cognome di ogni impiegato cambiando i nomi degli attributi rispettivamente in matricola e cognome SELECT FROM Resultset:
matricola t1 t2 t3 t4 t5 t6 101 102 103 201 202 301 cognome Sili Rossi Neri Neri Verdi Bisi
Selezione
La selezione consente di scegliere quali righe della tabella dovranno comparire nel resultset. La sintassi da utilizzare la seguente: SELECT colonna1, ..., colonnaN FROM tabella WHERE condizione La condizione di ricerca unespressione composta con operatori aritmetici, logici e di confronto. La tabella seguente riassume i principali operatori. operatori aritmetici operatori logici operatori di confronto +, -, *, / NOT, AND, OR =, <> (diverso), <, <=, >, <=
Esempio 7: Trovare gli impiegati il cui stipendio superiore a 40 SELECT FROM WHERE * impiegato stipendio > 40
Resultset:
matr t1 t2 t3 101 202 301 cogn Sili Verdi Bisi stipendio 60 50 70 dipartimento No Su Is
Esempio 8: Trovare gli impiegati il cui stipendio compreso tra 60 e 70 (inclusi) SELECT FROM WHERE Resultset:
matr t1 t2 101 301 cogn Sili Bisi stipendio 60 70 dipartimento No Is
Una condizione equivalente alla precedente esprimibile mediante loperatore BETWEEN. SELECT FROM WHERE * impiegato stipendio BETWEEN 40 AND 70
Esempio 9: Trovare gli impiegati il cui stipendio inferiore a 20 o superiore a 40 (esclusi) SELECT FROM WHERE Resultset:
matr t1 t2 t3 101 202 301 cogn Sili Verdi Bisi stipendio 60 50 70 dipartimento No Su Is
Esempio 10: Trovare gli impiegati il cui stipendio non compreso tra 40 e 70 (inclusi) SELECT FROM WHERE * impiegato NOT (stipendio >= 40 AND stipendio <= 70)
oppure, analogamente SELECT FROM WHERE SELECT FROM WHERE * impiegato NOT (stipendio BETWEEN 40 AND 70) * impiegato stipendio < 40 OR stipendio > 70
Resultset: tabella vuota Esempio 11: Trovare gli impiegati del dipartimento Su o Is SELECT FROM WHERE * impiegato dipartimento = Su OR dipartimento = Is
Una condizione equivalente alla precedente esprimibile mediante loperatore IN. SELECT FROM WHERE * impiegato dipartimento IN ( Su, Is)
oppure, analogamente SELECT FROM WHERE o, ancora SELECT FROM WHERE * impiegato dipartimento <> No * impiegato dipartimento NOT IN ( No)
Resultset:
matr t1 t2 t3 201 202 301 cogn Neri Verdi Bisi stipendio 40 50 70 dipartimento Su Su Is
Esempio 12: Trovare gli impiegati il cui cognome inizia con R Loperatore LIKE consente di effettuare ricerche su parti di stringhe. Utilizza, a tal scopo, due caratteri jolly: % e _. Il carattere % indica un insieme di caratteri qualunque, mentre il carattere _ indica un carattere qualunque. SELECT FROM WHERE Resultset:
matr t1 102 cogn Rossi stipendio 40 dipartimento No
Quest'opera stata rilasciata con licenza Creative Commons Attribution-ShareAlike 3.0 Unported. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.