Timestamp Unix e come i computer tengono il tempo
Cosa significa il 1 gennaio 1970, perche contare i secondi batte i calendari, il problema Y2K38 e come i fusi orari complicano tutto.
Ogni app che usi ogni giorno — la tua banca, la tua email, il tuo feed social — archivia e recupera dati usando una qualche forma di SQL. Inventato in IBM negli anni '70, Structured Query Language e sopravvissuto a ogni moda della programmazione per oltre 50 anni. Capire le sue operazioni fondamentali richiede circa 20 minuti. Padroneggiarlo richiede una carriera.
SQL organizza tutto attorno a quattro verbi, spesso chiamati CRUD (Create, Read, Update, Delete):
-- Read data
SELECT name, email FROM users WHERE active = true;
-- Create data
INSERT INTO users (name, email) VALUES ('Jane', '[email protected]');
-- Update data
UPDATE users SET active = false WHERE last_login < '2025-01-01';
-- Delete data
DELETE FROM users WHERE id = 42;SELECT e di gran lunga il piu complesso: supporta filtri, ordinamento, raggruppamento, join e subquery. Gli altri tre sono diretti una volta che hai capito le clausole WHERE.
I database reali normalizzano i dati su piu tabelle. Una JOIN le collega:
| Tipo di join | Restituisce | Quando usarla |
|---|---|---|
| INNER JOIN | Solo le righe corrispondenti | Ti servono dati che esistono in entrambe le tabelle |
| LEFT JOIN | Tutte le righe a sinistra + quelle corrispondenti a destra | Vuoi tutti gli utenti, anche quelli senza ordini |
| RIGHT JOIN | Tutte le righe a destra + quelle corrispondenti a sinistra | Usata raramente; uguale a LEFT JOIN con tabelle invertite |
| FULL JOIN | Tutte le righe da entrambi i lati | Ti serve un quadro completo dei dati non corrispondenti |
INNER JOIN
LEFT JOIN
RIGHT JOIN
FULL JOIN
GROUP BY comprime le righe in gruppi, e funzioni aggregate come COUNT, SUM, AVG, MIN e MAX riassumono ogni gruppo:
SELECT department, COUNT(*) AS headcount, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING COUNT(*) > 5
ORDER BY avg_salary DESC;Nelle codebase di team, le query SQL vivono nel codice applicativo, nei file di migrazione e negli script ad hoc. Confronta queste due versioni della stessa query:
-- Messy: hard to scan, easy to miss bugs
select u.name,o.total,o.created_at from users u join orders o on u.id=o.user_id where o.total>100 and u.active=true order by o.created_at desc limit 20;
-- Formatted: structure is visible at a glance
SELECT
u.name,
o.total,
o.created_at
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE o.total > 100
AND u.active = true
ORDER BY o.created_at DESC
LIMIT 20;Lo standard SQL (ISO/IEC 9075) definisce il linguaggio, ma ogni motore di database aggiunge le proprie estensioni:
I database NoSQL (MongoDB, Redis, DynamoDB) scambiano schemi strutturati con flessibilita. Usa SQL quando i tuoi dati hanno relazioni chiare e hai bisogno di garanzie transazionali. Usa NoSQL quando il tuo schema evolve rapidamente, hai bisogno di scalare orizzontalmente o i tuoi dati hanno naturalmente forma di documento (blob JSON, profili utente, log di eventi).
SQL non e un database: e un linguaggio. Impararlo una volta ti apre l'accesso a decine di motori di database, da un file SQLite da 50 KB a un data warehouse su scala petabyte.
Cosa significa il 1 gennaio 1970, perche contare i secondi batte i calendari, il problema Y2K38 e come i fusi orari complicano tutto.
Cosa sono gli UUID, v4 vs v7, probabilita di collisione, basi dell'hashing, algoritmi deboli vs sicuri e come i JWT trasportano l'autenticazione.
Cosa sono i dati strutturati, Schema.org e JSON-LD, tipi di schema piu comuni e rich results, meta tag, Open Graph e robots.txt spiegati bene.