SQL Base — Cheat Sheet

Tag: sql, database, relational, crud, ddl, dml, joins

Livello: base

TL;DR: Sintassi fondamentale SQL per interrogare, filtrare, aggregare e manipolare tabelle relazionali, con distinzione netta tra DDL e DML.

Concetti chiave

I database relazionali organizzano i dati in tabelle composte da righe (record) e colonne (attributi).

Una Primary Key identifica in modo univoco ogni record all'interno di una tabella.

Una Foreign Key stabilisce una relazione vincolata verso la Primary Key di un'altra tabella.

DDL (Data Definition Language) gestisce la struttura dello schema: comandi CREATE, ALTER e DROP.

DML (Data Manipulation Language) opera sui dati memorizzati: comandi SELECT, INSERT, UPDATE e DELETE.

Clausola WHERE filtra i singoli record prima di applicare qualsiasi funzione di raggruppamento.

Clausola HAVING filtra i gruppi generati da GROUP BY sulla base di funzioni aggregate.

Ordine logico di esecuzione: FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY, LIMIT.

NULL rappresenta l'assenza di valore e richiede verifiche dedicate con IS NULL o IS NOT NULL.

Tipi di JOIN principali: INNER per corrispondenze esatte, LEFT per mantenere tutti i record della tabella sinistra.

Domande tipiche e risposte pronte

Q: Qual e' la differenza pratica tra le clausole WHERE e HAVING?R: Uso WHERE per escludere le singole righe a monte prima del raggruppamento; applico HAVING solo dopo GROUP BY per filtrare i valori calcolati dalle funzioni aggregate come COUNT o SUM.

Q: Che differenza passa tra INNER JOIN e LEFT JOIN?R: INNER JOIN restituisce soltanto le righe con corrispondenza su entrambe le tabelle collegate; LEFT JOIN mantiene tutte le righe della tabella sinistra, valorizzando a NULL i campi mancanti a destra.

Q: Come si gestiscono i valori NULL nei filtri e nei confronti?R: I confronti standard come l'uguale o il diverso falliscono su NULL restituendo UNKNOWN; utilizzo obbligatoriamente le clausole IS NULL e IS NOT NULL per validare la presenza del dato.

Q: A cosa serve la clausola DISTINCT in una SELECT?R: La impiego per eliminare le righe duplicate dal set di risultati, restituendo valori univoci per le colonne richieste.

Insidie e errori comuni

Eseguire UPDATE o DELETE omettendo la clausola WHERE, modificando o cancellando l'intera tabella.

Usare operatori di uguaglianza standard come = NULL invece della sintassi IS NULL.

Inserire colonne non aggregate nella SELECT quando e' presente una clausola GROUP BY.

Confondere l'ordine logico dei filtri posizionando condizioni aggregate all'interno del WHERE.

Applicare LEFT JOIN e poi filtrare la tabella destra nel WHERE con condizioni non-null, trasformandolo implicitamente in INNER JOIN.

Generare prodotti cartesiani involontari omettendo la condizione di join ON.

Snippet e comandiSQL

```-- Creazione tabella con chiavi

CREATE TABLE users (

id INT PRIMARY KEY AUTO_INCREMENT,

email VARCHAR(255) NOT NULL UNIQUE,

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);

-- Query con aggregazione, filtro e ordinamento

SELECT department_id, COUNT(*) AS total_employees

FROM employees

WHERE salary > 30000

GROUP BY department_id

HAVING COUNT(*) >= 5

ORDER BY total_employees DESC

LIMIT 10;

-- Join tra tabelle

SELECT u.id, u.email, o.total_amount

FROM users u

LEFT JOIN orders o ON u.id = o.user_id;

-- Inserimento, aggiornamento e cancellazione selettiva

INSERT INTO users (email) VALUES ('test@example.com');

UPDATE users SET email = 'updated@example.com' WHERE id = 1;

DELETE FROM users WHERE id = 1;

```

Da ripassare

[ ] Regole di propagazione dei vincoli ON DELETE CASCADE e ON UPDATE CASCADE

[ ] Comportamento di UNION rispetto a UNION ALL sulle righe duplicate

[x] Sintassi standard di SELECT, INSERT, UPDATE e DELETE

[x] Differenze strutturali tra INNER JOIN, LEFT JOIN e RIGHT JOIN

[x] Utilizzo di COUNT, SUM, AVG, MIN e MAX con GROUP BY

Jarvis Interviews
Jarvis