• Non ci sono risultati.

6 Interrogazioni con SQL: il comando Select

Nel documento ESERCITAZIONI SVOLTE ACCESS (pagine 78-81)

Un’importante caratteristica del linguaggio SQL è la sua capacità di estrarre le informazioni desiderate dal database mediante interrogazioni. Queste funzionalità sono fornite dal comando

SELECT che è semplice da usare e allo stesso tempo molto potente.

Il comando Select riflette la natura dichiarativa del linguaggio SQL, e le interrogazioni sulle tabelle del database sono eseguite specificando solo cosa si vuole ottenere, senza doversi preoccupare di problemi quali: le modalità di rappresentazione dei dati e i percorsi per ritrovarli nelle memorie di massa.

La struttura base del comando Select è descritta nel seguente schema:

SELECT Elenco di espressioni FROM Tabelle

WHERE Condizioni ;

Esempio: interrogazioni su una sola tabella.

SELECT Cognome, Nome, Residenza FROM Impiegati

WHERE Dipartimento = 'Prod'; SELECT ID, Cognome, Nome FROM Impiegati

WHERE Dipartimento = 'Prod' AND Residenza = 'Torino';

ESERCIZI da 1 a 2 pag. 249 e da da 40 a 41 pag. 251

Cancella i dipendenti del dipartimento

Ricerca & Sviluppo.

Manca la clausola WHERE: il comando svuota la tabella Impiegati dai dati, ma rimane la sua struttura.

Un elenco di espressioni, che coinvolgono le colonne, da mostrare. * per indicare tutte le colonne. La tabella, o le tabelle, usate nell’interrogazione.

Una espressione logica che specifica quali righe considerare. Espressione booleana ottenuta componendo confronti con gli operatori AND OR e NOT.

Cognome, nome e residenza dei dipendenti del dipartimento di codice Prod.

ID, Cognome, Nome dei dipendenti che lavorano alla produzione e risiedono a Torino.

SELECT * FROM Impiegati

WHERE Residenza = 'Roma';

Il comando Select possiede i due predicati ALL e DISTINCT. Con il predicato ALL si richiede che nel risultato dell’interrogazione siano incluse tutte le righe, anche se duplicate, che soddisfano alle condizioni contenute nel comando. Questo predicato è di default ed in genere è omesso.

SELECT * SELECT ALL *

FROM Impiegati FROM Impiegati

WHERE Residenza = 'Milano'; WHERE Residenza = 'Milano';

Se viene specificato il predicato DISTINCT le righe duplicate nella tabella risultante sono ridotte a una. Per esempio, se si desidera ottenere l’elenco di tutte le località di residenza dei dipendenti, senza duplicati, si deve usare la clausola DISTINCT prima dell’indicazione dell’attributo.

SELECT DISTINCT Residenza SELECT Residenza

FROM Impiegati; FROM Impiegati;

Come si è anticipato nel Capitolo 3, i DBMS commerciali, per ragioni di efficienza, non rispettano strettamente il modello relazionale, che non ammette la presenza di righe duplicate in una tabella. Il predicato DISTINCT fa in modo che un comando Select produca una tabella coerente con tale modello.

La tabella che si ottiene come risultato dell’interrogazione ha di norma un’intestazione delle colonne che riporta i nomi degli attributi; se si vuole modificare tale intestazione, occorre rinominare la colonna usando la clausola AS.

SELECT ID AS Matricola, Nome, Cognome FROM Impiegati;

Con il comando SELECT si può richiedere il calcolo di espressioni basate sugli attributi della tabella; la tabella risultante contiene delle colonne con i risultati del calcolo per ogni riga. Tali colonne possono avere un’intestazione opportuna utilizzando la parola AS. In assenza di AS l’intestazione della colonna con l’espressione viene costruita dal sistema in modo differente a seconda dell’implementazione. Nel caso di Access il nome è Espr1 per la prima espressione, Espr2 per la seconda espressione e così via.

Tutti i dati dei dipendenti che abitano a Roma.

I due comandi si equivalgono.

La presenza del predicato

DISTINCT in un comando

Select impone che una riga sia inclusa nella tabella risul- tante solo se non c’è un’al- tra riga con gli stessi valori.

Elenco degli impiegati con ID, Nome

e Cognome, ma usando Matricola

SELECT Cognome, Nome, Stipendio AS Attuale, Stipendio*1.05 AS Nuovo FROM Impiegati

WHERE Dipartimento = 'Mag';

SELECT Cognome, Nome, Residenza, Stipendio FROM Impiegati

WHERE Stipendio >= 55000;

SELECT Cognome, Nome, Residenza, Stipendio FROM Impiegati

WHERE Stipendio >= [Retribuzione minima?];

Si osservi che per controllare la presenza di valori nulli si deve usare il predicato IS NULL, mentre è errato ricercare tali valori in altro modo, come è mostrato di seguito. Si ricorda, a proposito, che il dipendente con ID=5 non è assegnato ad alcun dipartimento.

SELECT ID AS Matricola, Cognome, Nome FROM Impiegati

WHERE Dipartimento IS NULL;

SELECT ID AS Matricola, Cognome, Nome FROM Impiegati

WHERE Dipartimento = '';

Gli impiegati del magazzino con l’importo dello stipendio e quello del nuovo stipendio se fosse aumentato del 5%.

Gli importi di Stipendio in

Impiegati non sono modificati.

Elenca i dipendenti con retribuzione di almeno 55000 euro

Interrogazione parametrica: lo stipendio minimo è scelto dall’utente al momento dell’interrogazione.

Per elencare i dipendenti senza dipartimento di assegnazione, si devono riconoscere le righe con valori nulli nel campo Dipartimento.

Per scrivere un’interrogazione in SQL nell’ambiente di Access, bisogna creare una nuova query accedendo alla Visualizzazione Struttura, e chiudere la finestra di dialogo Mostra tabella senza scegliere alcuna tabella. Poi si deve fare clic sulla scelta che è diventata la proposta del pulsante

Visualizza.

Ricerca una stringa vuota in Dipartimento.

L’interrogazione produce un elenco vuoto perché in Impiegati non ci sono righe con una stringa di caratteri vuota in Dipartimento.

Appare una finestra come quella in figura che permette di scrivere l’interrogazione desiderata.

Le istruzioni del linguaggio SQL sono a formato libero e terminano con il carattere punto e virgola: un comando SQL può essere scritto liberamente su una o più righe e le parole chiave del linguaggio possono essere scritte indifferentemente a caratteri maiuscoli o minuscoli.

In un comando SQL possono comparire commenti, con la convenzione che si considera un commento tutto quello che compare in una riga di seguito alla sequenza di caratteri “-- “. Per esempio, i due comandi SELECT mostrati di seguito sono entrambi corretti e sono sintatticamente identici; sono stati anche inseriti: un commento che occupa parte di una riga e tre commenti che occupano un’intera riga.

SELECT Matricola, Cognome, Nome -- Esempio di commento FROM Studenti

WHERE Provincia = 'BO';

--

-- Il seguente comando SELECT è identico al precedente --

Select Matricola, Cognome, Nome From Studenti Where Provincia = 'BO';

Nel documento ESERCITAZIONI SVOLTE ACCESS (pagine 78-81)