Retour à la liste des articles Articles
9 minutes de lecture

Erreurs SQL : Cinq erreurs SQL courantes

Lorsque vous apprenez SQL, faites attention à ces erreurs de codage courantes

Vous avez écrit du code SQL et vous êtes prêt à interroger votre base de données. Vous entrez le code et .... aucune donnée n'est renvoyée. Au lieu de cela, vous recevez un message d'erreur.

Ne désespérez pas ! Les erreurs de codage sont courantes dans tout langage de programmation, et SQL ne fait pas exception. Dans cet article, nous allons aborder cinq erreurs courantes que les gens commettent lorsqu'ils écrivent du SQL.

La meilleure façon d'éviter les erreurs en SQL est la pratique. LearnSQL.com propose plus de 30 cours SQL interactifs. Essayez notre La pratique du SQL avec 5 cours et plus de 600 exercices pratiques.

Surveillez votre langage (et votre syntaxe)

L'erreur SQL la plus courante est une erreur de syntaxe. Que signifie la syntaxe ? En gros, il s'agit d'un ensemble de mots et de commandes. Si vous utilisez une syntaxe incorrecte, la base de données ne sait pas ce que vous essayez de lui dire.

Pour comprendre comment fonctionne la syntaxe, nous pouvons penser à une langue parlée. Imaginez que vous dites à une personne "Nice dof" alors que vous voulez dire "Nice dog". La personne ne sait pas ce que "dof" signifie. Ainsi, lorsque vous demandez à votre base de données de trouver un TABEL au lieu d'un TABLEAU, la base de données ne sait pas ce qu'elle doit faire.

Les gens ont tendance à faire les mêmes types d'erreurs de syntaxe, de sorte que leurs erreurs sont généralement faciles à repérer et très similaires. Après avoir lu cet article, vous devriez être en mesure de vous souvenir et d'éviter (ou de corriger) ces erreurs courantes. Il est très important pour les codeurs SQL novices de savoir quelles erreurs rechercher, surtout au début. Les nouveaux codeurs ont tendance à faire plus d'erreurs et à passer plus de temps à les chercher.

Les types d'erreurs SQL que nous allons examiner sont les suivants :

  1. les commandes mal orthographiées
  2. Oublier les parenthèses et les guillemets
  3. Spécifier un ordre d'instruction non valide
  4. Omettre les alias de table
  5. Utilisation de noms sensibles à la casse

Vous êtes prêt ? Commençons.

Erreurs SQL :

1. Commandes mal orthographiées

Il s'agit du type d'erreur SQL le plus courant chez les développeurs débutants et expérimentés. Voyons à quoi elle ressemble. Examinez la simple instruction SELECT ci-dessous et voyez si vous pouvez déceler un problème :

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

Si vous exécutez cette requête, vous obtiendrez une erreur indiquant :

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

Chaque version de la base de données vous indiquera le mot ou l'expression exact qu'elle ne comprend pas, bien que le message d'erreur puisse être légèrement différent.

Quel est le problème ici ? Vous avez mal orthographié FROM et FORM. On trouve souvent des fautes d'orthographe dans les mots-clés (comme SELECT, FROM et WHERE) ou dans les noms de tables et de colonnes.

Les erreurs d' orthographe SQL les plus courantes sont dues à :

  • "Des doigts potelés" où vous frappez une lettre près de la bonne : SELEVT ou FTOM ou WJIRE
  • "Unefrappe irréfléchie" où vous tapez les bonnes lettres dans le mauvais ordre : SELETC ou FORM ou WHEER

Solution :

Utilisez un éditeur SQL doté d'une coloration syntaxique : les mots-clés SELECT et WHERE seront mis en évidence, mais le mot FORM mal orthographié ne le sera pas.

Si vous apprenez avec Cours de SQL interactif sur LearnSQL.coml'éditeur de code place chaque mot-clé de l'instruction SELECT en violet clair. Si le mot-clé est noir, comme c'est le cas pour tout autre argument, vous savez qu'il y a un problème. (Dans notre exemple, FORM est noir).

Donc, si nous corrigeons notre déclaration, nous obtenons :

SELECT *
FROM dish
WHERE NAME = 'Prawn Salad'

Le mot-clé est maintenant de la bonne couleur et l'instruction s'exécute sans erreur.

2. Oublier les parenthèses et les citations

Les parenthèses regroupent les opérations et guident l'ordre d'exécution. En SQL (et dans tous les langages de programmation que j'utilise), l'ordre des opérations suivant ...

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

... n'est pas le même que :

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

Pouvez-vous comprendre pourquoi ?

Une erreur très courante en SQL est d'oublier les crochets fermants. Donc si nous regardons cette déclaration erronée :

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

Nous obtenons un code d'erreur avec la position de l'erreur (le 102e caractère depuis le début) :

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

Rappelez-vous : les parenthèses vont toujours par paire.

Il en va de même pour les guillemets simples ( ' ' ) ou doubles ( " " ). Il n'existe aucune situation en SQL où nous trouverions un guillemet (qu'il s'agisse d'un guillemet simple ou d'un guillemet double) sans son compagnon. Les valeurs de texte des colonnes peuvent contenir un guillemet ( par exemple exp.last_name = "O'Reilly") et dans ces situations, nous devons mélanger deux types de guillemets ou utiliser des caractères d'échappement. (En SQL, l'utilisation de caractères d'échappement signifie simplement que l'on place un autre guillemet près du caractère que l'on veut désactiver - par exemple exp.last_name = 'O'’Reilly.).

Solution :

Pratiquez, pratiquez, pratiquez. Écrire plus de code SQL vous donnera l'expérience dont vous avez besoin pour éviter ces erreurs. Et n'oubliez pas que les gens oublient généralement la parenthèse ou le guillemet fermant. Ils oublient rarement le guillemet d'ouverture. Si vous rencontrez des problèmes, examinez de près toute votre ponctuation finale !

3. Ordre incorrect des instructions

Lorsque vous écrivez des instructions SELECT, gardez à l'esprit qu'il existe un ordre prédéfini de mots-clés nécessaire à la bonne exécution de l'instruction. Vous ne disposez d'aucune marge de manœuvre.

Prenons un exemple d'instruction correctement ordonnée :

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

Il n'y a pas de raccourci ici ; vous devez simplement vous souvenir de l'ordre correct des mots-clés pour l'instruction SELECT :

  • SELECT identifie les noms et fonctions des colonnes
  • FROM spécifie le ou les noms des tables (et JOIN les conditions si vous utilisez plusieurs tables)
  • WHERE définit les instructions de filtrage
  • GROUP BY montre comment grouper les colonnes
  • HAVING filtre les valeurs groupées
  • ORDER BY définit l'ordre dans lequel les résultats seront affichés.

Vous ne pouvez pas écrire un mot-clé WHERE avant un mot-clé FROM, et vous ne pouvez pas mettre un mot-clé HAVING avant un mot-clé GROUP BY. La déclaration ne serait pas valide.

Voyons ce qui se passe lorsque vous mélangez l'ordre des instructions. Dans ce cas, nous utiliserons l'erreur SQL courante consistant à placer ORDER BY avant GROUP BY:

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

Le message d'erreur qui s'affiche est assez intimidant !

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]

Solution :

Ne vous découragez pas ! Vous pouvez voir que tous les mots-clés sont correctement mis en évidence et que toutes les citations et parenthèses sont fermées. Vous devez maintenant vérifier l'ordre des instructions. Lorsque vous débutez vos études de SQL, je vous suggère d'utiliser une liste de contrôle de l'ordre des instructions sur SELECT. Si vous rencontrez un problème, reportez-vous à votre liste pour connaître l'ordre correct.

4. Omettre les alias de table

Lorsque vous joignez des tables, la création d'alias de table est une pratique courante. Ces alias permettent de distinguer les colonnes portant le même nom dans les différentes tables ; ainsi, la base de données saura quelles valeurs de colonne renvoyer. Cette pratique n'est pas obligatoire lorsque nous joignons différentes tables, puisque nous pouvons utiliser les noms complets des tables. Mais elle est obligatoire si nous joignons une table à elle-même.

Supposons que nous écrivions une instruction SQL pour trouver le lieu actuel d'une exposition et le lieu de l'année précédente :

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

La base de données renverrait une erreur :

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

Remarque : chaque fois que vous rencontrez "nom de colonne ambigu" dans votre message d'erreur, vous avez sûrement besoin d'alias de table.

L'instruction correcte (avec des alias) serait :

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

Solution :

Entraînez-vous à utiliser des alias de table pour les déclarations concernant une seule table SELECT. Utilisez souvent les alias - ils rendent votre SQL plus lisible.

5. Utilisation de noms sensibles à la casse

Cette erreur se produit uniquement lorsque vous devez écrire des noms non standard pour des tables ou des objets de base de données.

Disons que vous avez besoin d'une table nommée LargeClient et que, pour une raison quelconque, vous ajoutez une autre table appelée LARGECLIENT. Comme vous le savez déjà, les noms d'objets dans les bases de données sont généralement insensibles à la casse. Ainsi, lorsque vous écrivez une requête pour la table LargeClient, la base de données interrogera en fait LARGECLIENT.

Pour éviter cela, vous devez mettre des guillemets autour du nom de la table. Par exemple :

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

Lorsque vous créez une table, vous devez utiliser des guillemets doubles si :

  • La table aura un nom sensible à la casse.
  • Le nom de la table contient des caractères spéciaux. Cela inclut l'utilisation d'un espace vide, comme "Grand Client".

Solution :

Évitez d'utiliser ces noms si vous le pouvez. Sinon, n'oubliez pas vos guillemets !

Tout le monde fait des erreurs SQL

Ce sont les cinq erreurs les plus courantes dans le code SQL. Vous les ferez probablement de nombreuses fois au cours de votre apprentissage de ce langage. N'oubliez pas que tout le monde fait des erreurs en écrivant du code. En fait, faire des erreurs est une partie normale et prévisible du développement de logiciels.

Ne vous découragez donc pas. Lorsque vous ferez des erreurs à l'avenir, essayez d'analyser votre code de manière structurée. Grâce à une analyse structurée, vous pourrez trouver et corriger vos erreurs plus rapidement.

Si vous souhaitez connaître d'autres erreurs syntaxiques que je n'ai pas incluses ici, n'hésitez pas à m'en faire part. Dans un prochain article, nous nous intéresserons aux erreurs non syntaxiques. Celles-ci renvoient ou modifient des données et sont donc beaucoup plus dangereuses. Abonnez-vous à notre blog pour ne pas le manquer !