L’istruzione SELECT

In questa lezione useremo alcuni statement basilari per interrogare un database Oracle servendoci di diversi esempi col il DB Seed. Quando si effettua un’ interrogazione allora si dice che si esegue una query.

È il comando SQL più utilizzato in assoluto perché consente di estrarre i dati memorizzati nel database. La query ha inizio con la parola riservata SELECT, seguita dai nomi di colonna della/e tabella/e che desideriamo interrogare.

Usando l’asterisco (*), possiamo richiedere tutte le colonne di una tabella (o vista) senza elencarle esplicitamente, oppure possiamo indicare i nomi di ciascuna colonna.

La parola riservata FROM è obbligatoria in una SELECT. È sempre seguita dal nome di tabella (o vista) da cui prelevare i dati.

Dopo aver stabilito la connessione al database Seed con l’utente HR analizziamo la struttura della tabella “countries” con il comando DESCRIBE.

Risultato della query

La tabella “countries” è composta di tre colonne, country_idcountry_name e region_id. Scriviamo ora la più semplice forma di SELECT che consente di ricevere tutte le colonne e le righe di questa tabella.

SQL> SELECT * FROM countries;
Risultato della query

Per motivi di spazio non elenchiamo tutte le righe. Il nome della prima colonna è stato abbreviato ai primi due caratteri perché, come si nota dal risultato della DESCRIBEprecedente, il contenuto per questa colonna è fissato a due caratteri.

Se volessimo invece visualizzare il solo contenuto delle colonne country_id e country_name useremmo le istruzioni:

SQL> COL country_id FORMATa10
SQL> SELECT country_id, country_name FROM countries;
Risultato della query

La riga precedente alla SELECT imposta la formattazione a 10 caratteri della colonna country_id.

Alias di nomi di colonna

Gli alias permettono di ottenere nomi di colonne più significativi nella query senza modificare i nomi dei campi nelle tabelle. Il nome dell’alias di colonna è definito alla destra del nome vero della colonna dati, separato da uno spazio o usando la parola riservata AS. Se l’alias è formato da più parole, separate da spazi, allora è obbligatorio racchiuderlo fra virgolette (” “). L’ordine delle lettere maiuscole o minuscole viene preservato esclusivamente se l’alias è racchiuso fra virgolette, altrimenti sarà sempre scritto in maiuscolo.

SQL> col idnazione format a10
SQL> SELECT country_id AS idnazione, 2	country_name AS "Nome Nazione" FROM countries;
Risultato della query

Il nome della colonna idnazione, che è un alias, è riportato interamente in maiuscolo nel risultato della query proprio perché non è stato delimitato da virgolette.

L’unicità dei risultati

Se abbiamo una query che fornisce più righe uguali tra loro, possiamo eliminare le ripetizioni usando la parola riservata DISTINCT, di seguito a SELECT.

L’unicità è garantita sull’intera riga e per tutte le colonne. Per esempio visualizziamo il codice del dipartimento in cui lavora ciascun impiegato:

SQL> SELECT department_id FROM employees;

Otterremo ben 107 righe come risultato. Proviamo ora a riscriviamo la precedente query con DISTINCT:

SQL> SELECT DISTINCT department_id AS "NR DIP." FROM employees;
Risultato della query

Abbiamo ottenuto poche righe tutte diverse tra loro. L’unicità del risultato è stata garantita solamente sulla colonna department_id. Nulla ci vieta di inserire più colonne.

SQL> SELECT DISTINCT department_id, job_id FROM employees;
Risultato della query

Non tutte le righe risultanti sono state riportate per motivi di spazio ma si può vedere come il risultato sia diverso da quello della precedente query. Anche se la colonnadepartment_id riporta valori doppi (20, 30, 50 ad esempio) l’unicità delle righe risultanti è assicurata su entrambe le colonne.

Come limitare le righe

La clausola WHERE è utilizzata nella SELECT precisamente dopo FROM e serve a limitare, o meglio a filtrare, il numero delle righe da restituire. Solo le righe che soddisfano la condizione logica posta in WHERE sono restituite all’utente.

Possiamo usare nomi di colonna con questa clausola ma non alias di nomi di colonna.

Ad esempio:come facciamo a conoscere gli impiegati che lavorano nel dipartimento nr. 20?

SQL> SELECT first_name AS nome, last_name AS cognome,
  2  department_id AS dep_id FROM employees WHERE department_ID = 20;
Risultato della query

La tabella DUAL

È una tabella fittizia disponibile a tutti gli utenti del database. Ogni DB Oracle possiede la propria tabella DUAL. La sua particolarità consiste nel possedere una sola colonna e nel restituire sempre una sola riga. Possiamo usare DUAL in molteplici casi, anche per calcolare espressioni.

Ottenere il nome dell’utente

SQL> SELECT user FROM DUAL;
Risultato della query

Conoscere la data odierna

SQL> SELECT SYSDATE FROM DUAL;
Risultato della query

Calcolare un’espressione matematica

SQL> SELECT (8765-2345) * 4.34 AS risultato FROM DUAL;
Risultato della query

Nell’ultimo caso abbiamo anche usato l’alias, considerando l’intera espressione alla stregua di una colonna dati.

Both comments and pings are currently closed.

Comments are closed.