edutecnica

Comando SELECT in SQL

         

L'aspetto più importante del linguaggio SQL è costituito dalla possibilita di porre interrogazioni in modo molto semplice alla base di dati per ritrovare le informazioni che interessano.

Queste prestazioni sono fornite dal comando SELECT, che è nello stesso tempo molto potente e molto semplice da usare.

Con il comando SELECT vengono attivate le interrogazioni sulle relazioni e le operazioni relazionali per ottenere nuove tabelle (recorset).

La sintassi del comando SELECT è la seguente

SELECT colonne
FROM tabelle
[ WHERE condizione ]
[ GROUP colonne ]
[ HAVING condizione ]
[ ORDER BY attributi ]

Dove tra parentesi quadra abbiamo riportato le clausole opzionali.

Accanto alla parola SELECT vengono indicati i nomi delle colonne (attributi) da elencare (se è necessario per elencare tutte le colonne basta scrivere il segno di asterisco * dopo la parola SELECT); dopo FROM vengono indicati i nomi delle tabelle su cui deve operare il comando SELECT; dopo la clausola WHERE si specifica la condizione che deve essere soddisfatta dai campi delle righe: possono comparire anche più condizioni combinate con gli operatori AND, OR e NOT.

Per esempio l'elenco con cognome, nome e codice fiscale dei dipendenti con funzione di Impiegato si ottiene con il comando SELECT nella forma:

SELECT Cognome, Nome, Filiale
FROM Personale
WHERE Funzione = 'Impiegato';

In questo primo esempio accanto alla parola SELECT sono stati specificati solo alcuni attributi tra quelli presenti nella tabella.

Per richiedere tutti i dati dei dipendenti che abitano in provincia di Milano, si usa il comando SELECT nella forma:

SELECT *
FROM Personale
WHERE Prov = 'MI' ;

Nel secondo esempio il simbolo * sostituisce l'elencazione di tutti gli attributi della tabella Personale.

Il comando SELECT possiede due predicati ALL e DISTINCT.

Il predicato ALL indica la richiesta di ottenere come risultato dell'interrogazione tutte le righe che soddisfano alle condizioni contenute nel comando.
Questo predicato è di default, cioè se non viene fatta nessuna specificazione vengono visualizzate tutte le righe della tabella che rispondono alle condizioni poste.

Pertanto le due seguenti istruzioni SELECT sono equivalenti:

SELECT ALL *
FROM Personale
WHERE Prov = 'MI';

e

SELECT *
FROM Personale
WHERE Prov = 'MI';

Se viene specificato il predicato DISTINCT le righe duplicate nella tabella risultante vengono ridotte a una.

Per esempio se si desidera ottenere l'elenco di tutte le professioni presenti tra i dipendenti della tabella Personale, specificando una sola volta il tipo di professione anche quando è riferita a più dipendenti, si deve usare la clausola DISTINCT prima dell'indicazione dell'attributo:

SELECT DISTINCT Funzione
FROM Personale;

Il comando SELECT nella forma senza DISTINCT

SELECT Funzione
FROM Personale;

produrrebbe l'elenco di tutte le professioni dei dipendenti ripetendo tante volte la stessa professione in righe diverse, tante quanti sono i dipendenti che svolgono quella funzione.

In presenza del predicato DISTINCT in un'interrogazione con SELECT che contiene più attributi, una riga puo essere inclusa nella tabella risultante solo se la combinazione di valori provenienti da tutti gli attributi è univoca.

La tabella che si ottiene come risultato dell'interrogazione con SELECT normalmente possiede un'intestazione delle colonne che riporta i nomi degli attributi; se si vuole modificare tale intestazione, occorre dichiarare la stringa della nuova intestazione insieme alla clausola AS.

Per esempio per ottenere l'elenco delle diverse province da cui provengono i dipendenti della tabella Personale, intestando la colonna del risultato con il titolo Provincia, si deve scrivere il comando SELECT secondo la seguente sintassi:

SELECT DISTINCT Prov AS Provincia
FROM Personale;

Con il comando SELECT si può anche richiedere il calcolo di espressioni sugli attributi presenti nella tabella; la tabella risultante contiene una colonna aggiuntiva con i risultati del calcolo per ogni riga. Questa nuova colonna viene intestata con una descrizione opportuna utilizzando la parola AS.

Per esempio il comando seguente visualizza, accanto agli stipendi attuali, quali sarebbero i nuovi stipendi base dei dipendenti aumentati del 5%, senza modifica dell'importo di ciascuno stipendio nelle righe della tabella:

SELECT Cognome, Nome, Stipendio AS Attuale, Stipendio*1.05 AS Nuovo
FROM Personale;

In alcuni degli esempi precedenti e in quelli che verranno mostrati in seguito, per rendere più semplice l'illustrazione dei comandi di SQL, vengono utilizzati valori costanti nelle condizioni scritte dopo WHERE, come nel caso dell'interrogazione vista all'inizio.

SELECT Cognome, Nome
FROM Personale
WHERE Funzione = 'Impiegato';

In realtà il tipo di funzione del dipendente da utilizzare nell''operazione di confronto, anziché essere uguale alla costante Impiegato, dovrebbe essere indicato in modo parametrico, per poter usare la stessa interrogazione più volte per funzioni diverse dei dipendenti. Per esempio, in Access per Windows questo può essere fatto indicando tra parentesi quadre il nome del parametro: al momento dell'esecuzione del comando SELECT viene richiesto all'utente di inserire, in modo interattivo attraverso una finestra di dialogo, il tipo di funzione che si vuole controllare per i dipendenti.

SELECT Cognome, Nome
FROM Personale
WHERE Funzione = [TipoFunzione];

Pagine correlate: