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
.
La tabella "countries" è composta di tre colonne, country_id
, country_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;
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 DESCRIBE
precedente, 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;
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;
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;
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;
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 colonna department_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;
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;
Conoscere la data odierna
SQL> SELECT SYSDATE FROM DUAL;
Calcolare un'espressione matematica
SQL> SELECT (8765-2345) * 4.34 AS risultato FROM DUAL;
Nell'ultimo caso abbiamo anche usato l'alias, considerando l'intera espressione alla stregua di una colonna dati.