Torna all'elenco degli articoli Articoli
Tempo di lettura: 8 minuti

Errori SQL: Cinque errori comuni di SQL

Mentre imparate l'SQL, fate attenzione a questi comuni errori di codifica

Avete scritto del codice SQL e siete pronti a interrogare il vostro database. Inserite il codice e .... non viene restituito alcun dato. Al contrario, viene visualizzato un messaggio di errore.

Non disperate! Gli errori di codifica sono comuni in qualsiasi linguaggio di programmazione e SQL non fa eccezione. In questo articolo, esamineremo cinque errori comuni che si commettono quando si scrive SQL.

Il modo migliore per prevenire gli errori in SQL è la pratica. LearnSQL.it offre oltre 30 corsi interattivi di SQL. Provate il nostro SQL Practice con 5 corsi e oltre 600 esercizi pratici.

Attenzione al linguaggio (e alla sintassi)

L'errore SQL più comune è un errore di sintassi. Cosa significa sintassi? Fondamentalmente, si tratta di un insieme di parole e comandi. Se si utilizza una sintassi scorretta, il database non capisce cosa si sta cercando di dirgli.

Per capire come funziona la sintassi, possiamo pensare a una lingua parlata. Immaginate di dire a una persona "Nice dof" quando intendete "Nice dog". La persona non sa cosa significhi "dof". Così, quando si dice al database di trovare una TABELLA invece di un'altra, il database non sa cosa deve fare.

Le persone tendono a commettere gli stessi tipi di errori di sintassi, quindi i loro errori sono solitamente facili da individuare e molto simili. Dopo aver letto questo articolo, dovreste essere in grado di ricordare ed evitare (o correggere) questi errori comuni. Sapere quali sono gli errori da ricercare è molto importante per i codificatori SQL alle prime armi, soprattutto all'inizio. I nuovi codificatori tendono a commettere più errori e a perdere più tempo a cercarli.

I tipi di errori SQL che esamineremo sono i seguenti:

  1. Errori di ortografia dei comandi
  2. Dimenticare le parentesi e le virgolette
  3. Specificare un ordine di dichiarazione non valido
  4. Omissione degli alias delle tabelle
  5. Utilizzo di nomi sensibili alle maiuscole e alle minuscole

Pronti? Iniziamo.

Errori SQL:

1. Errori di ortografia dei comandi

Questo è il tipo di errore SQL più comune tra gli sviluppatori principianti e quelli esperti. Vediamo come si presenta. Esaminate la semplice istruzione SELECT qui sotto e vedete se riuscite a individuare un problema:

SELECT *
FORM dish
WHERE NAME = 'Prawn Salad';

Se si esegue questa query, si otterrà un errore che afferma:

Syntax error in SQL statement "SELECT * FORM[*] dish WHERE NAME = 'Prawn Salad';"; 
SQL statement: SELECT * FORM dish WHERE NAME = 'Prawn Salad'; [42000-176]

Ogni versione del database indica la parola o la frase esatta che non capisce, anche se il messaggio di errore può essere leggermente diverso.

Cosa c'è di sbagliato? Avete sbagliato a scrivere FROM come FORM. Gli errori ortografici si trovano comunemente nelle parole chiave (come SELECT, FROM e WHERE) o nei nomi di tabelle e colonne.

Gli errori ortografici SQL più comuni sono dovuti a:

  • "dita paffute" che colpiscono una lettera vicina a quella giusta: SELEVT o FTOM o WJIRE
  • "Digitazione sconsiderata" in cui si digitano le lettere giuste nell'ordine sbagliato: SELETC o FORM o WHEER

Soluzione:

Usare un editor SQL che abbia l'evidenziazione della sintassi: le parole chiave SELECT e WHERE saranno evidenziate, ma l'errore di scrittura FORM non sarà evidenziato.

Se state imparando con corsi interattivi di SQL in LearnSQL.it, l'editor di codice mette ogni parola chiave di SELECT in viola chiaro. Se la parola chiave è nera, come qualsiasi altro argomento, si sa che c'è un problema. (Nel nostro esempio, FORM è nero).

Quindi, se correggiamo la nostra dichiarazione, otterremo:

SELECT *
FROM dish
WHERE NAME = 'Prawn Salad'

La parola chiave è ora del colore giusto e l'istruzione viene eseguita senza errori.

2. Dimenticare le parentesi e le citazioni

Le parentesi raggruppano le operazioni e guidano l'ordine di esecuzione. In SQL (e in tutti i linguaggi di programmazione che utilizzo), il seguente ordine di operazioni ...

SELECT *
FROM artist
WHERE first_name = 'Vincent' and last_name = 'Monet' or last_name = 'Da Vinci';

... non è la stessa cosa di:

SELECT *
FROM artist
WHERE first_name = 'Vincent' and (last_name = 'Monet' or last_name = 'Da Vinci');

Riesci a capire perché?

Un errore molto comune in SQL è quello di dimenticare la parentesi di chiusura. Quindi, se osserviamo questa dichiarazione errata :

SELECT *
FROM artist
WHERE first_name = 'Vincent' and (last_name = 'Monet' or last_name = 'Da Vinci';

Otteniamo un codice di errore con la posizione dell'errore (il 102° carattere dall'inizio):

ERROR: syntax error at or near ";" Position: 102

Ricordate: le parentesi sono sempre in coppia.

Lo stesso vale per gli apici singoli ( ' ' ) o doppi ( " " ). In SQL non esiste una situazione in cui si possa trovare un apice (sia esso singolo o doppio) senza il suo compagno. I valori di testo delle colonne possono contenere una sola virgoletta (ad esempio, exp.last_name = "O'Reilly") e in queste situazioni è necessario mescolare due tipi di virgolette o utilizzare i caratteri di escape. (In SQL, usare i caratteri di escape significa semplicemente mettere un'altra virgoletta vicino al carattere che si vuole disattivare, ad esempio exp.last_name = 'O'’Reilly.).

Soluzione:

Pratica, pratica, pratica. Scrivere più codice SQL vi darà l'esperienza necessaria per evitare questi errori. Ricordate che di solito si dimentica la parentesi di chiusura o la virgoletta. Raramente tralasciano quella di apertura. Se avete problemi, controllate bene la punteggiatura di chiusura!

3. Ordine delle istruzioni non valido

Quando si scrivono le istruzioni SELECT, bisogna tenere presente che c'è un ordine predefinito di parole chiave necessario affinché l'istruzione venga eseguita correttamente. Non c'è margine di manovra.

Vediamo un esempio di istruzione ordinata correttamente:

SELECT name
FROM dish
WHERE name = 'Prawn Salad'
GROUP BY name
HAVING count(*) = 1
ORDER BY name;

Non ci sono scorciatoie: è sufficiente ricordare l'ordine corretto delle parole chiave per l'istruzione SELECT:

  • SELECT identifica i nomi delle colonne e le funzioni
  • FROM specifica il nome o i nomi delle tabelle (e le condizioni di JOIN se si utilizzano più tabelle)
  • WHERE definisce le istruzioni di filtraggio
  • GROUP BY mostra come raggruppare le colonne
  • HAVING filtra i valori raggruppati
  • ORDER BY imposta l'ordine di visualizzazione dei risultati.

Non si può scrivere una parola chiave WHERE prima di una FROM, e non si può mettere una HAVING prima di una GROUP BY. L'istruzione non sarebbe valida.

Vediamo cosa succede quando si confonde l'ordine delle istruzioni. In questo caso, utilizzeremo il comune errore SQL di anteporre ORDER BY a GROUP BY:

SELECT name
FROM dish
WHERE name = 'Prawn Salad'
ORDER BY name
GROUP BY name
HAVING count(*) = 1

Il messaggio di errore visualizzato è piuttosto intimidatorio!

Syntax error in SQL statement "SELECT name FROM dish WHERE name = 'Prawn Salad' 
ORDER BY name GROUP[*] BY name HAVING count(*) = 1;"; SQL statement: 
SELECT name FROM dish WHERE name = 'Prawn Salad' ORDER BY name GROUP BY 
name HAVING count(*) = 1; [42000-176]

Soluzione:

Non scoraggiatevi! Si può notare che tutte le parole chiave sono evidenziate correttamente e tutte le virgolette e le parentesi sono chiuse. Ora è necessario controllare l'ordine delle istruzioni. Quando si è agli inizi dello studio di SQL, suggerisco di usare una lista di controllo dell'ordine SELECT. Se si incontra un problema, si può fare riferimento alla lista per trovare l'ordine corretto.

4. Omissione degli alias di tabella

Quando si uniscono le tabelle, la creazione di alias di tabella è una pratica diffusa. Questi alias distinguono le colonne con lo stesso nome tra le varie tabelle; in questo modo il database saprà quali valori di colonna restituire. Questo non è obbligatorio quando si uniscono tabelle diverse, perché si possono usare i nomi completi delle tabelle. È invece obbligatorio quando si unisce una tabella a se stessa.

Supponiamo di scrivere un'istruzione SQL per trovare la posizione attuale di una mostra e la posizione dell'anno precedente:

SELECT *
FROM exhibit
    JOIN exhibit ON (id = previous_id);

Il database restituirebbe un errore:

Ambiguous column name "id"; SQL statement: SELECT * FROM exhibit JOIN exhibit ON (id = previous_id); [90059-176]

Nota: se nel messaggio di errore compare la dicitura "nome colonna ambiguo", è sicuramente necessario disporre di alias di tabella.

L'istruzione corretta (con gli alias) sarebbe:

SELECT ex.* , exp.name
FROM exhibit
    JOIN exhibit ON (ex.id = exp.previous_id);

Soluzione:

Esercitatevi a usare gli alias delle tabelle per le istruzioni di una singola tabella SELECT. Usate spesso gli alias: rendono il vostro SQL più leggibile.

5. Utilizzo di nomi sensibili alle maiuscole e alle minuscole

Questo errore si verifica solo quando è necessario scrivere nomi non standard per tabelle o oggetti del database.

Supponiamo che sia necessario avere una tabella chiamata LargeClient e che per qualche motivo se ne aggiunga un'altra chiamata LARGECLIENT. Come già si sa, i nomi degli oggetti nei database sono solitamente insensibili alle maiuscole e alle minuscole. Pertanto, quando si scrive una query per la tabella LargeClient, il database interrogherà effettivamente LARGECLIENT.

Per evitare questo inconveniente, è necessario mettere le doppie virgolette intorno al nome della tabella. Ad esempio:

SELECT * FROM
"LargeClient"
 WHERE cust_name = 'Mijona';

Quando si crea una tabella, è necessario utilizzare le doppie virgolette se:

  • Il nome della tabella è sensibile alle maiuscole e alle minuscole.
  • Il nome della tabella contiene caratteri speciali. Ciò include l'uso di uno spazio vuoto, come "Large Client".

Soluzione:

Evitare di usare questi nomi, se possibile. Altrimenti, ricordate i doppi apici!

Tutti commettono errori in SQL

Questi sono i cinque errori più comuni nel codice SQL. Probabilmente li commetterete molte volte durante l'apprendimento di questo linguaggio. Ricordate che tutti commettono errori nella scrittura del codice. In effetti, commettere errori è una parte normale e prevedibile dello sviluppo del software.

Quindi non scoraggiatevi. Quando in futuro farete degli errori, cercate di analizzare il codice in modo strutturato. Con un'analisi strutturata, è possibile trovare e correggere gli errori più rapidamente.

Se volete conoscere altri errori sintattici che non ho incluso in questo articolo, fatemelo sapere. In un prossimo articolo, esamineremo gli errori non sintattici. Questi errori restituiscono o modificano i dati e sono quindi molto più pericolosi. Iscrivetevi al nostro blog per non perdervelo!