In questa prima lezione di SQL, esploreremo il comando SELECT ... FROM ...
fondamentale per interrogare (to query) un database. Impareremo come selezionare colonne specifiche (operazione di proiezione dell’algebra relazionale) da una tabella e come filtrare le righe (operazione di selezione dell’algebra relazionale) che soddisfano determinate condizioni.
Per gli esempi di questa lezione, utilizzeremo la seguente istanza della tabella Student
Proiezione: SELECT ... FROM ...
La proiezione è il processo di selezione delle colonne da una tabella specifica, in SQL la proiezione si ottiene utilizzando il comando SELECT
seguito dalla lista delle colonne da selezionare e specificando la/e tabella/e da cui operare la selezione mediante la clausola FROM
.
Ad esempio, possiamo utilizzare la query seguente per selezionare il first_name
e il last_name
degli studenti dalla tabella Student
:
SELECT first_name, last_name
FROM Student;
Possiamo vedere a fianco il risultato della seguente query.
È importante notare che SQL non produce risultati sotto forma di insiemi, è infatti possibile avere una tabella con valori duplicati, ad esempio la seguente query
SELECT last_name
FROM Student;
produce il risultato mostrato a fianco, vediamo che per ogni riga della tabella originale esiste una riga nella tabella risultante. Questo aspetto di SQL permette di utilizzare il linguaggio per query del tipo conta quanti studenti hanno il cognome Bianchi.
first_name | last_name |
---|
Raimondo | Bianchi |
Edoardo | Conte |
Mario | Bianchi |
… | … |
last_name |
---|
Bianchi |
Conte |
Bianchi |
Rossi |
Rossi |
Verdi |
Rossi |
Visconti |
Sciascia |
Importante
Il risultato di una qualsiasi query SQL (quindi anche SELECT ...
) è sempre una tabella (relazione). Anche nel caso in cui si abbia come risultato un singolo valore, questo sarà una riga di una tabella con una sola colonna. Quest rende possibile query nidificate (nested query) in cui il risultato di una query è utilizzato all’interno di un’altra query.
L’utilizzo di *
Nella lista di colonne è possibile utilizzare l’asterisco (star) *
per indicare che si vogliono selezionare tutte le colonne della tabella. Questa possibilità strana dal momento che la seguente query
produce esattamente la tabella Student
. Tuttavia sarà utile *
quando l’unico scopo della query sarà selezionare alcune righe utilizzando la clausola WHERE
che verrà discussa in una lezione successiva
Utilizzo di più tabelle
È possibile indicare una lista di tabelle nella clausola FROM
, in questo caso viene creata una tabella unica risultante dal prodotto cartesiano di tutte le tabelle. Vediamo in un caso molto semplice cosa significa il prodotto cartesiano tra due tabelle.
Student
\(\times\) Class
Name | class | id | room |
---|
Al | 1A | 1A | 101 |
Al | 1A | 2A | 203 |
Bob | 2A | 1A | 101 |
Bob | 2A | 2A | 203 |
Nell’ambito dei database relazionali, il prodotto cartesiano tra tabelle non è un’operazione significativa, ad esempio nel prodotto Student
\(\times\) Class
, cosa indica nella realtà la tupla (Bob,2A,1A,101)
? Il prodotto cartesiano, tuttavia, è il punto di partenza dell’operazione join che è fondamentale quando si opera con database relazionali.
Alias
Alias su tabelle
È possibile assegnare alias alle colonne o alle tabelle per renderle più leggibili o per abbreviare i nomi lunghi. Ad esempio, possiamo assegnare un alias “S” alla tabella Student e un alias “T” alla tabella Teacher in questo modo:
SELECT S.first_name, T.last_name
FROM Student AS S, Teacher AS T;
Questo rende la query più comprensibile e facile da leggere.
Alias su colonne
Gli alias su colonne consentono di assegnare nomi alternativi alle colonne di output nella query. Questo può essere utile per rendere più chiari e significativi i risultati o per abbreviare nomi lunghi di colonne. Gli alias vengono definiti nella clausola SELECT
e vengono utilizzati per rinominare temporaneamente le colonne nella query.
SELECT first_name AS First, last_name AS Last
FROM Student;
In questo esempio, stiamo assegnando gli alias First
e Last
alle colonne first_name
e last_name
nella tabella Student
. Il risultato della query includerà colonne con questi alias anziché i nomi originali delle colonne, rendendo i risultati più leggibili e comprensibili.
Ovviamente è possibile combinare alias per tabelle e per colonne
SELECT S.last_name AS StudentLast, T.last_name AS TeacherLast
FROM Student AS S, Teacher AS T;
Esempi
Vediamo ora alcuni esempi di query SELECT ... FROM ...
- Selezionare cognome e data di nascita degli studenti
SELECT last_name AS Cognome, birth_date AS
FROM Student;
- Selezionare nome, indirizzo e email di studenti
SELECT first_name, home_address, email
FROM Student;
- Selezionare cognome e indirizzo email di studenti utilizzando come nomi di colonne
Surname
, Contact
SELECT last_name AS Surname, email AS Contact
FROM Student;
Domande e Esercizi
Domande
- Indica in quali casi può essere utile utilizzare l’alias per le tabelle.
- Indica in quali casi può essere utile utilizzare l’alias per le colonne.
- Nell’esempio del prodotto cartesiano, quali righe ti sembra abbiano senso? Perché?.
- Nell’esempio sopra con cognomi duplicati, quale sarebbe il risultato se SQL fornisse un insieme?
Esercizi
Per i seguenti esercizi si consideri la seguente tabella Teacher
- Selezionare nome, cognome e data di assunzione di ogni insegnante.
- Selezionare cognome, email e numero di telefono di ogni insegnante, indicando i nome delle colonne in italiano.
- Selezionare identificativo e email degli insegnanti.