I comandi SQL in sintesi
I comandi SQL si dividono in alcuni gruppi in base a cosa fanno. La tabella elenca quelli che userai di più, e ogni sezione qui sotto ne esegue uno.
| Comando | Gruppo | Cosa fa |
|---|---|---|
CREATE TABLE | DDL | Definisce una nuova tabella e le sue colonne |
ALTER TABLE | DDL | Aggiunge o rinomina una colonna, oppure rinomina una tabella |
DROP TABLE | DDL | Elimina una tabella e tutte le sue righe |
INSERT | DML | Aggiunge nuove righe |
UPDATE | DML | Modifica i valori nelle righe esistenti |
DELETE | DML | Rimuove righe |
SELECT | DQL | Legge righe, filtrate con WHERE e ordinate con ORDER BY |
BEGIN, COMMIT, ROLLBACK | TCL | Raggruppa le modifiche perché riescano o falliscano tutte insieme |
DDL sta per data definition language, DML per data manipulation language, DQL per data query language e TCL per transaction control language. I nomi contano meno della divisione: il DDL cambia la forma del database, il DML cambia ciò che contiene.
CREATE TABLE: definire una tabella
CREATE TABLE dà un nome alla tabella ed elenca le sue colonne con i loro tipi e le loro regole. Ogni altro comando di questa pagina ha bisogno di una tabella su cui lavorare.
La pagina su CREATE TABLE tratta regole come NOT NULL, UNIQUE e DEFAULT.
INSERT: aggiungere righe
INSERT INTO aggiunge una o più righe. Elenca le colonne, poi i valori nello stesso ordine.
La colonna id si è riempita da sola: un INTEGER PRIMARY KEY riceve il numero successivo quando lo ometti. Trovi di più in INSERT.
SELECT: leggere righe
SELECT è il comando che scriverai più spesso. Scegli le colonne, filtra le righe con WHERE e ordinale con ORDER BY.
Tornano solo le righe che superano il test del WHERE, a partire dal voto più alto. Per i dettagli vedi le basi di SELECT e WHERE.
UPDATE: modificare righe
UPDATE imposta nuovi valori su righe che esistono già. La clausola WHERE decide quali righe; se la ometti, cambiano tutte.
Quando non sei sicuro di cosa selezioni una clausola WHERE, eseguila prima come SELECT. La pagina su UPDATE mostra altri schemi.
DELETE: rimuovere righe
DELETE FROM rimuove le righe che soddisfano la sua clausola WHERE. Come UPDATE, se la clausola manca agisce su tutte le righe.
La riga di Chen è sparita e le altre sono intatte. Vedi DELETE.
ALTER TABLE e DROP TABLE: modificare o rimuovere una tabella
ALTER TABLE modifica una tabella esistente senza perderne le righe. DROP TABLE rimuove completamente la tabella.
Una nuova colonna parte da NULL nelle righe esistenti finché non la riempi. ALTER e DROP TABLE elenca cosa permette SQLite.
JOIN: combinare tabelle
Un JOIN legge righe da due tabelle contemporaneamente, abbinate su una colonna che hanno in comune.
Boris non ha iscrizioni, quindi un INNER JOIN lo lascia fuori. Un LEFT JOIN lo terrebbe, con il corso vuoto.
GROUP BY: riassumere righe
GROUP BY riduce a una sola riga le righe che condividono un valore, e una funzione di aggregazione come COUNT o AVG riassume ogni gruppo.
Funzioni di aggregazione e GROUP BY e HAVING vanno più a fondo.
BEGIN, COMMIT e ROLLBACK: raggruppare modifiche
Una transazione fa valere più modifiche come una sola. COMMIT le tiene tutte; ROLLBACK le annulla tutte.
Il trasferimento è stato confermato e la seconda modifica è stata annullata, quindi Ada finisce con 70 e Boris con 80. Transazioni spiega quando usarle.
Dove SQLite è diverso
I comandi di questa pagina sono SQL standard, e quello che impari qui vale anche per MySQL e PostgreSQL. Gli esempi eseguibili, però, sono scritti per SQLite, e sui database più grandi cambiano tre dettagli:
- Elencare le tabelle. Gli esempi leggono
sqlite_master, la tabella di schema di SQLite. MySQL usaSHOW TABLESe PostgreSQL usa la vistainformation_schema.tables(o\dtinpsql). - Id automatici. Una colonna dichiarata
INTEGER PRIMARY KEYnumera da sola le nuove righe in SQLite, ed è per questo che gli esempi conINSERTomettonoid. MySQL richiedeAUTO_INCREMENTsulla colonna, e PostgreSQL una colonna identity (GENERATED BY DEFAULT AS IDENTITY) oSERIAL. - Permessi e modifiche allo schema. SQLite non ha
GRANTnéREVOKE, perché un database SQLite è un unico file senza account utente, e il suoALTER TABLEnon può cambiare il tipo di una colonna.
Domande frequenti
Quali sono i comandi SQL di base?
Cinque coprono quasi tutto il lavoro quotidiano: CREATE TABLE per definire una tabella, INSERT per aggiungere righe, SELECT per leggerle, UPDATE per modificarle e DELETE per eliminarle. Subito dopo vengono ALTER TABLE, DROP TABLE, JOIN, GROUP BY e i comandi di transazione BEGIN, COMMIT e ROLLBACK.
Che differenza c'è tra DDL e DML?
Il DDL (data definition language, linguaggio di definizione dei dati) cambia la struttura del database: CREATE, ALTER e DROP. Il DML (data manipulation language, linguaggio di manipolazione dei dati) cambia le righe dentro le tabelle: INSERT, UPDATE e DELETE. SELECT si limita a leggere, quindi spesso viene elencato a parte come DQL.
I comandi SQL distinguono tra maiuscole e minuscole?
No. SELECT, select e Select funzionano tutti. Scrivere le parole chiave in maiuscolo è una convenzione che le fa risaltare rispetto ai nomi di tabelle e colonne. Il testo tra apici, però, viene confrontato esattamente, quindi 'Ada' e 'ada' sono stringhe diverse in SQLite, a meno che tu non chieda un confronto che ignori le maiuscole.
Questi comandi funzionano allo stesso modo in MySQL e PostgreSQL?
Le istruzioni sono SQL standard e hanno lo stesso significato in tutti e tre, quindi quello che impari qui ti serve anche altrove. Gli esempi eseguibili, però, sono scritti per SQLite: per elencare le tabelle qui si legge sqlite_master, gli id automatici richiedono AUTO_INCREMENT in MySQL o una colonna identity in PostgreSQL, e SQLite non ha GRANT né REVOKE.