Quando tiriamo fuori dati dal database, raramente ci servono proprio tutte le colonne. Per esempio, nella tabella dei dipendenti employees potresti avere 15 colonne: nome, cognome, data di nascita, posizione, stipendio, data di assunzione e così via. Ma magari vuoi solo sapere i loro nomi e le posizioni. Ha senso, no? Prendere tutti i dati è inutile e inefficiente. Ed è qui che entra in gioco l’arte di selezionare solo le colonne che ti servono.
Se vuoi una metafora, è come se dovessi prendere solo le mele da un cesto pieno di arance, mele e banane. Figo, vero? Ecco, è proprio quello che faremo!
Sintassi
Ricorda, SQL è stato progettato per essere il più user-friendly possibile.
Prima di tutto, il case delle query non conta. Puoi scrivere SELECT, Select o select e funzionerà sempre. Poi, gli a capo non hanno importanza. Il DBMS trasforma comunque la query in una riga unica, quindi scrivila come ti pare.
Come avrai già intuito, le parole chiave SELECT e FROM non bastano. Altrimenti non ci sarebbe così tanto da dire su SQL. Una query SQL più completa ha questa forma:
SELECT colonne
FROM tabella
WHERE condizione
GROUP BY colonne
HAVING colonne
ORDER BY ordinamento
Dove:
colonne— sono i nomi delle colonne che vuoi ottenere.tabella— è il nome della tabella da cui estrai i dati.condizione— la condizione per filtrare le righe.ordinamento— le righe e l’ordine di ordinamento.
Sembra facile? Vediamolo con un esempio vero. Ma partiamo da qualcosa di più semplice.
Esempio di query base
Supponiamo di avere una tabella students con i dati degli studenti. Ecco come potrebbe essere la struttura della tabella:
| id | first_name | last_name | age | grade |
|---|---|---|---|---|
| 1 | Alex | Lin | 20 | A |
| 2 | Anna | Song | 22 | B |
| 3 | Otto | Art | 19 | A |
Ora vogliamo vedere solo i cognomi last_name e i voti grade di tutti gli studenti.
La query sarà così:
SELECT last_name, grade
FROM students;
Risultato:
| last_name | grade |
|---|---|
| Lin | A |
| Song | B |
| Art | A |
Complimenti, hai appena risparmiato risorse del database e reso il risultato molto più leggibile!
Concatenazione di stringhe
Ormai sai già selezionare i dati, proviamo qualcosa di più interessante. Nella nostra tabella nome e cognome sono in colonne diverse. Scriviamo una query che mostri una colonna con il nome completo dello studente.
Per concatenare due stringhe in PostgreSQL si usa l’operatore ||. La nostra query SELECT sarà così:
SELECT first_name || last_name, grade
FROM students;
Risultato:
| first_name || last_name | grade |
|---|---|
| AlexLin | A |
| AnnaSong | B |
| OttoArt | A |
Hmm. Sembra che manchi qualcosa. Tipo uno spazio tra nome e cognome! Sistemiamo subito.
SELECT first_name || ' ' || last_name, grade
FROM students;
Risultato:
| first_name || ' ' || last_name | grade |
|---|---|
| Alex Lin | A |
| Anna Song | B |
| Otto Art | A |
Bello. Il contenuto della tabella risultato mi piace, ma che fine ha fatto l’intestazione? Sarebbe bello vedere full name, o almeno name, non first_name || ' ' || last_name. Così non è né bello né pratico. Ma c’è una soluzione anche per questo.
Selezione usando alias
Le query SQL possono essere molto più leggibili usando gli alias. È solo un modo per dare un nuovo nome a una colonna nella query. Gli alias usano la parola chiave AS (anche se tecnicamente puoi ometterla, ma per chiarezza meglio usarla sempre).
Guarda qui:
SELECT first_name AS "Nome", last_name AS "Cognome", grade AS "Voto"
FROM students;
Risultato:
| Nome | Cognome | Voto |
|---|---|---|
| Alex | Lin | A |
| Anna | Song | B |
| Otto | Art | A |
Qui abbiamo:
- Rinominato le colonne per renderle più chiare in italiano.
- Usato gli alias nella query, con
AS.
Se il tuo capo o il cliente vuole vedere i dati degli utenti senza impazzire davanti alla tabella, gli alias sono tuoi amici.
Ora miglioriamo un po’ la nostra query per il nome completo.
SELECT first_name || ' ' || last_name AS "Nome completo", grade AS "Voto"
FROM students;
Risultato:
| Nome completo | Voto |
|---|---|
| Alex Lin | A |
| Anna Song | B |
| Otto Art | A |
Perfetto. Proprio come volevamo.
Perché selezionare solo alcune colonne?
- Performance
Pensa di lavorare con una tabella enorme, milioni di righe e centinaia di colonne. Estrarre tutto con SELECT * può richiedere minuti o anche ore, e consumare un sacco di risorse del server. Così invece prendi solo quello che ti serve.
- Leggibilità
Quando estrai solo le colonne che ti servono, il risultato è molto più facile da capire. Altrimenti il risultato sembrerà una timeline infinita di notizie di venerdì sera.
- Minimizzare gli errori
Meno dati gestisci nella query, meno probabilità hai di sbagliare qualcosa. Soprattutto se poi lavori ancora su quei dati.
Cosa ricordare?
Alias delle tabelle
Un altro modo per gestire nomi di tabelle lunghi è usare gli alias per le tabelle. Dovrebbero ricordare il nome originale o essere comunque collegati logicamente al contenuto.
SELECT sa05.first_name, sa05.course_id
FROM students_archive_2005 AS sa05
Questo metodo è super utile se hai nomi di tabelle lunghissimi tipo university_students_enrollments_records: puoi usare usr o us
Errori tipici nella selezione di colonne specifiche
Errori nei nomi delle colonne. Se scrivi male il nome di una colonna, riceverai un errore tipo:
ERROR: column "lastname" does not exist. Controlla sempre che i nomi siano giusti.Nomi in conflitto. Quando la query coinvolge più tabelle, specifica sempre a quale tabella appartiene il campo. Tipo
students.first_name.Usare
SELECT *— è una trappola per principianti. Sì, funziona ed è comodo, ma nei progetti grandi è una pessima pratica! Seleziona sempre solo le colonne che ti servono davvero.
GO TO FULL VERSION