4th Jul 2022 9 minutes de lecture 8 conseils que les débutants absolus peuvent utiliser pour corriger les requêtes SQL Marcos Pierri comment faire comment faire en sql Table des matières 1. Placez d'abord les parenthèses ouvertes et fermées 2. Ne pas mettre de virgule à la fin d'une colonne ou d'une séquence de tableau 3. Utiliser l'évaluation partielle des requêtes pour déboguer les longues requêtes SQL 4. Faites attention aux noms de colonnes et de tables 5. Comparez uniquement les types de données compatibles 6. Utilisez IS NULL lorsque vous comparez des valeurs NULL 7. Incluez toujours la condition JOIN 8. Inclure les colonnes non agrégées de la liste SELECT dans les colonnes GROUP BY Essayez vous-même ! Les erreurs de code sont fréquentes - et frustrantes. Et lorsque vous venez d'apprendre le langage SQL, il peut être très difficile de trouver et de corriger vos erreurs. Dans cet article, nous allons vous montrer huit façons de résoudre ou d'éliminer les erreurs de codage SQL les plus courantes. Aujourd'hui, nous allons parler de quelques astuces que le débutant en SQL peut utiliser pour éviter plusieurs erreurs courantes. Ces astuces fonctionnent dans n'importe quel environnement de base de données. Au fur et à mesure, nous vous montrerons des messages d'erreur. La formulation exacte de vos messages d'erreur peut être un peu différente, mais ne vous inquiétez pas ; chaque moteur de base de données a ses propres variantes, mais la signification est la même. 6 erreurs de syntaxe courantes que tous les apprenants de SQL fonthttps://t.co/owxdMv9UNT#sql #LearnSQL #Database - Vertabelo (@Vertabelo) 3 janvier 2017 Ceci étant dit, nous ne nous concentrerons pas sur les messages d'erreur. Nous allons plutôt mettre le doigt sur la cause réelle du problème (comme l'oubli d'une parenthèse ou d'un guillemet). Ainsi, vous apprendrez à contourner le problème dès le départ. Vous êtes prêt ? C'est parti ! 1. Placez d'abord les parenthèses ouvertes et fermées Se souvenir du caractère de fermeture est essentiel pour éliminer les parenthèses, guillemets, doubles guillemets ou crochets déséquilibrés. Les meilleures pratiques suggèrent de taper les deux caractères en premier (ouverture et fermeture), puis de taper ce qui se trouve à l'intérieur. L'exemple suivant montre une erreur lorsque les parenthèses ne sont pas équilibrées : SELECT lastname, firstname FROM employee WHERE salary >= (select AVG(salary) from employee ; ERROR: syntax error at or near ";" LINE 2: WHERE salary >= (select AVG(salary) from employee ; Exemple 1 : Parenthèses non équilibrées 2. Ne pas mettre de virgule à la fin d'une colonne ou d'une séquence de tableau Les virgules servent de séparateur en SQL. Il ne doit pas y avoir de virgule entre FROM et le premier nom de table ou après le dernier nom de table. La même idée s'applique à la définition des colonnes : lorsque vous créez une table, veillez à ne pas saisir de virgule supplémentaire après le nom final de la colonne. Il s'agit d'une erreur très courante. SELECT * FROM employee, department, ERROR: syntax error at or near "," LINE 1: SELECT * FROM employee, department Exemple 2 : Une virgule supplémentaire 3. Utiliser l'évaluation partielle des requêtes pour déboguer les longues requêtes SQL De nombreux clients SQL comme Navicat ou pgAdmin permettent l'exécution partielle d'une requête. Vous pouvez le faire en utilisant votre souris pour mettre en évidence une partie du code. En utilisant cette technique de division et de reconquête, vous pouvez facilement isoler et corriger les erreurs. Évidemment, la partie marquée doit être du SQL valide. La requête suivante comporte deux erreurs. Si nous exécutons la première ligne de la requête, nous pouvons voir le premier problème. (Indice : la colonne "llastname" n'existe pas). SELECT llastname, firstname FROM employee WHERE salary >= (select MAXI(salary) from employee ; ERROR: column "llastname" does not exist LINE 1: SELECT llastname, firstname FROM employee Exemple 3 : Un nom de colonne incorrect Cependant, si nous exécutons l'instruction SQL complète, nous obtenons une erreur liée à des parenthèses non équilibrées : SELECT llastname, firstname FROM employee WHERE salary >= (select MAXI(salary) from employee; ERROR: syntax error at or near ";" LINE 2: WHERE salary >= (select MAX(salary) from employee ; Exemple 4 : Sous-requête avec des parenthèses incorrectes Nous pouvons également marquer une sous-requête et l'exécuter individuellement, comme dans l'exemple suivant : SELECT llastname, firstname FROM employee WHERE salary >= (select MAXI(salary) from employee; ERROR: function maxi(numeric) does not exist LINE 1: select MAXI(salary) from employee Exemple 5 : Nom de fonction incorrect 4. Faites attention aux noms de colonnes et de tables Faites très attention lorsque vous tapez les noms de colonnes ou de tables. Si possible, essayez de copier et de coller le nom d'une commande que vous savez correcte, de préférence une commande qui a déjà été exécutée correctement. Les meilleures pratiques suggèrent de copier et coller les noms même si vous pensez que cela prend plus de temps que de les taper. Il est très courant d'avoir un nom de colonne mal orthographié ou de se référer à une colonne dans une table qui ne figure pas dans la clause FROM. Vérifiez toujours les fautes de frappe dans le nom de la colonne, assurez-vous que la table dans le FROM a cette colonne, et assurez-vous que la table est mentionnée dans le FROM. SELECT llastname, firstname FROM employees ERROR: table "employees" does not exist LÍNEA 1: SELECT llastname, firstname FROM employees Exemple 6 : Nom de table incorrect Une autre bonne pratique consiste à utiliser un alias de table ou un nom de table comme préfixe de colonne. Ceci est doublement important lorsque vous avez deux tables ou plus dans la clause <>FROM. L'erreur suivante peut apparaître si vous faites référence à deux colonnes au nom identique dans des tables différentes : SELECT lastname, name FROM department, employee WHERE depto_id = depto_id ERROR: column reference "depto_id" is ambiguous LINE 3: WHERE depto_id = depto_id Exemple 7 : noms de colonnes ambigus SELECT lastname, name FROM department, employee WHERE department.depto_id = employee.depto_id Exemple 8 : noms de colonnes préfixés Pour corriger ces erreurs, ajoutez le nom de la table avant le nom de la colonne. (Dans l'exemple ci-dessus, ce serait employee.depto_id et department.depto_id au lieu de seulement depto_id.) 5. Comparez uniquement les types de données compatibles Lorsque vous écrivez des conditions de comparaison dans la clause WHERE, assurez-vous que les deux types de données sont compatibles avec l'opérateur de comparaison et entre eux. Si ce n'est pas possible, vous devrez peut-être convertir l'un des types de données. La règle générale est de comparer des nombres avec des nombres, des chaînes de caractères avec des chaînes de caractères, etc. Certains systèmes de bases de données convertissent automatiquement les types de données lorsque cela est possible ; d'autres proposent des conversions de type de données améliorées (par exemple, une valeur TIMESTAMP peut être automatiquement convertie en DATE avant les comparaisons). D'autres services de bases de données encore ne proposent aucune conversion. Il est donc préférable de rechercher vous-même ces problèmes potentiels. Quoi qu'il en soit, le code SQL suivant obtient une erreur de non-concordance des données car une chaîne CHAR est comparée à une valeur entière : SELECT lastname, salary FROM employee WHERE depto_id = firstname ERROR: operator does not exist: integer = character varying LINE 3: WHERE depto_id = firstname Exemple 9 : Types de données non concordants Aucun opérateur ne correspond au nom et au(x) type(s) d'arguments donnés. Vous devrez peut-être ajouter des casts de type explicites pour résoudre cette erreur. 6. Utilisez IS NULL lorsque vous comparez des valeurs NULL Si vous avez seulement besoin de vérifier si une colonne a une valeur NULL, faites attention aux expressions que vous utilisez. Une erreur courante consiste à utiliser = NULL ou <> NULL, mais ces expressions ne sont pas syntaxiquement valides. Utilisez plutôt les clauses IS NULL et IS NOT NULL. Voyons les exemples incorrects et corrects : SELECT firstname, lastname FROM employee WHERE depto_id = NULL Exemple 10 : Comparaison NULL incorrecte SELECT firstname, lastname FROM employee WHERE depto_id is NULL Exemple 11 : Comparaison correcte de NULL 7. Incluez toujours la condition JOIN Il existe plus d'une façon valide de faire une jointure en SQL. La méthode traditionnelle consiste à énumérer toutes les tables à joindre dans la clause FROM et à placer les conditions de jointure dans la clause WHERE pour créer des paires d'enregistrements. L'autre méthode (plus déclarative) consiste à utiliser la clause JOIN et à énumérer les conditions de jointure après la clause ON. Ces deux méthodes sont syntaxiquement équivalentes, mais vous devez savoir comment identifier la condition de jointure dans les deux cas. Ici, nous avons deux jointures valides : SELECT lastname, name FROM department, employee WHERE department.depto_id = employee.depto_id SELECT lastname, name FROM department JOIN employee ON department.depto_id = employee.depto_id Exemple 12 : Deux jointures équivalentes Cependant, le conseil est le suivant : N'oubliez pas la condition de jointure ! Chaque fois que vous joignez deux tables ou plus, vous devez écrire une condition de jointure pour lier les deux tables. Si vous ne la spécifiez pas, vous n'obtiendrez pas de message d'erreur, mais des résultats incorrects. Ceux-ci seront erronés car chaque enregistrement de la première table sera joint à tous les enregistrements de la deuxième table. Ce type d'ensemble de résultats est appelé produit cartésien de deux tables, et n'est généralement pas un résultat attendu. SELECT lastname, name FROM department, employee Exemple 13 : Un produit cartésien - généralement pas le résultat souhaité 8. Inclure les colonnes non agrégées de la liste SELECT dans les colonnes GROUP BY Lorsque vous utilisez des fonctions d'agrégation, il existe certaines restrictions quant aux colonnes qui peuvent être incluses dans la liste SELECT (c'est-à-dire les noms de colonnes après la clause SELECT ). Vous ne pouvez inclure que les colonnes spécifiées dans la clause GROUP BY, plus les fonctions d'agrégation et les constantes. Si vous ne sélectionnez que les colonnes d'agrégation, toute autre colonne générera une erreur. Vous pouvez le constater dans l'exemple suivant. SELECT department.depto_id, name , count(*) employees FROM department, employee WHERE department.depto_id = employee.depto_id GROUP BY department.depto_id ERROR: column "department.name" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: SELECT department.depto_id, name , count(*) employees Exemple 14 : colonnes supplémentaires dans la liste SELECT SELECT department.depto_id, name , count(*) employees FROM department, employee WHERE department.depto_id = employee.depto_id GROUP BY department.depto_id Exemple 15 : Aucune colonne supplémentaire dans la liste SELECT Il est parfois nécessaire de filtrer les données à l'aide d'une fonction d'agrégation. L'une des erreurs les plus courantes consiste à placer une condition utilisant la fonction d'agrégation dans la clause WHERE. Cette erreur est illustrée ci-dessous : SELECT department.depto_id, name , count(*) employees FROM department, employee WHERE department.depto_id = employee.depto_id AND count(*) > 1 GROUP BY department.depto_id ERROR: aggregate functions are not allowed in WHERE LÍNEA 4: AND count(*) > 1 Exemple 16 : Fonction d'agrégation incorrecte dans la clause WHERE N'oubliez pas que si vous devez filtrer à l'aide d'une fonction d'agrégation, la bonne méthode consiste à placer la condition utilisant l'agrégation dans la clause HAVING, comme dans l'exemple suivant : SELECT department.depto_id, name , count(*) employees FROM department, employee WHERE department.depto_id = employee.depto_id HAVING count(*) > 1 GROUP BY department.depto_id Exemple 17 : La fonction d'agrégation est dans la clause HAVING Essayez vous-même ! LearnSQL est un excellent endroit pour s'initier à SQL. Plusieurs cours sont destinés aux apprenants débutants. Vous pouvez tester les conseils de cet article sur les exercices de ce cours SQL. Tags: comment faire comment faire en sql