L'operazione SELECT in SQL

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

student_idfirst_namelast_namebirth_dateregistration_datehome_addressemail
1RaimondoBianchi2004-01-012023-02-17 09:00:00123 Main Straimondo@example.com
2EdoardoConte2004-08-192023-02-17 09:30:00456 Elm Stedoardo@example.com
3MarioBianchi2008-05-102023-02-17 10:00:00789 Oak Stmario@example.com
4AliceRossi2003-02-202023-02-17 10:30:00101 Maple Stalice@example.com
5MarioRossi2007-10-312023-02-17 11:00:00202 Cedar Stmario2@example.com
6BarbaraVerdi2007-04-012023-02-17 11:30:00303 Pine Stbarbara@example.com
7CarloRossi2006-10-312023-02-17 12:00:00404 Birch Stcarlo@example.com
8DavideVisconti2004-06-222023-02-17 12:30:00505 Redwood Stdavide@example.com
9MichelaSciascia2006-02-222023-02-17 13:00:00606 Cedar Stmichela@example.com

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_namelast_name
RaimondoBianchi
EdoardoConte
MarioBianchi
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

SELECT *
FROM Student;

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

Nameclass
Al1A
Bob2A

Class

idroom
1A101
2A203

Student \(\times\) Class

Nameclassidroom
Al1A1A101
Al1A2A203
Bob2A1A101
Bob2A2A203

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 ...

  1. Selezionare cognome e data di nascita degli studenti
SELECT last_name AS Cognome, birth_date AS
FROM Student;
  1. Selezionare nome, indirizzo e email di studenti
SELECT first_name, home_address, email
FROM Student;
  1. 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

  1. Indica in quali casi può essere utile utilizzare l’alias per le tabelle.
  2. Indica in quali casi può essere utile utilizzare l’alias per le colonne.
  3. Nell’esempio del prodotto cartesiano, quali righe ti sembra abbiano senso? Perché?.
  4. 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

teacher_idfirst_namelast_namebirth_datehire_dateemailphone_number
1LucaGalli1980-03-152005-07-20luca@example.com123-456-789
2LauraFerrari1975-09-282010-02-12laura@example.com987-654-321
3MarcoBianchi1990-12-102015-11-30marco@example.com111-222-333
4AnnaRusso1985-06-032008-08-05anna@example.com555-888-777
5GiuseppeConti1992-11-222017-04-15giuseppe@example.com777-333-111
  1. Selezionare nome, cognome e data di assunzione di ogni insegnante.
  2. Selezionare cognome, email e numero di telefono di ogni insegnante, indicando i nome delle colonne in italiano.
  3. Selezionare identificativo e email degli insegnanti.
  • Michele Schimd © 2024
  • Ultimo aggiornamento: 17/02/2024
  • Materiale di studio e di esercizio per gli alunni dello Zuccante.

Creative Commons License