La SELECT è il comando per leggere e recuperare dati dal database. È il cuore del Query Language.
SELECT [DISTINCT] colonna1, colonna2, ... -- cosa mostrare
FROM NomeTabella -- da quale tabella
WHERE condizione -- filtrare le righe
ORDER BY colonna [ASC | DESC] -- ordinare i risultati
LIMIT n [OFFSET m]; -- limitare il numero di righe
-- Tutte le colonne di tutti gli studenti
SELECT * FROM Studenti;
-- Solo nome e cognome
SELECT nome, cognome FROM Studenti;
-- Con filtro e ordinamento
SELECT nome, cognome, voto_medio
FROM Studenti
WHERE voto_medio >= 7.0
ORDER BY cognome ASC, nome ASC;
-- Senza valori duplicati
SELECT DISTINCT nome_corso FROM Corsi;
-- Alias per rinominare le colonne nel risultato
SELECT nome AS "Nome Studente", voto_medio AS Media FROM Studenti;
-- Limitare i risultati (es. paginazione)
SELECT * FROM Studenti ORDER BY cognome LIMIT 10 OFFSET 0; -- prima pagina
SELECT * FROM Studenti ORDER BY cognome LIMIT 10 OFFSET 10; -- seconda pagina
Confronto:
WHERE voto_medio = 8.0 -- uguale
WHERE nome <> 'Mario' -- diverso
WHERE crediti > 4
WHERE data_nascita <= '2005-12-31'
Logici:
WHERE voto_medio >= 6.0 AND id_classe = 3
WHERE nome = 'Mario' OR nome = 'Marco'
WHERE NOT (voto_medio < 6.0)
Intervallo:
WHERE voto_medio BETWEEN 6.0 AND 8.0 -- estremi inclusi
WHERE data_nascita BETWEEN '2000-01-01' AND '2005-12-31'
Lista di valori:
WHERE nome IN ('Mario', 'Luigi', 'Marco')
WHERE id_corso NOT IN (1, 2, 3)
Pattern matching (LIKE):
WHERE cognome LIKE 'R%' -- inizia con R
WHERE email LIKE '%@gmail.com' -- termina con @gmail.com
WHERE nome LIKE '_a%' -- seconda lettera è 'a'
WHERE codice LIKE 'AB___' -- inizia con AB + 3 caratteri qualsiasi
-- % = zero o più caratteri qualsiasi
-- _ = esattamente un carattere qualsiasi
Case-insensitive (PostgreSQL):
WHERE nome ILIKE 'm%' -- trova sia 'Mario' che 'mario'
NULL:
WHERE email IS NULL
WHERE telefono IS NOT NULL