Zurück zur Artikelliste Artikel
8 Leseminuten

SQL-Fehler: Fünf häufige SQL-Fehler

Achten Sie beim Erlernen von SQLauf die folgenden häufigen Programmierfehler

Sie haben einen SQL-Code geschrieben und sind bereit, Ihre Datenbank abzufragen. Sie geben den Code ein und .... erhält keine Daten zurück. Stattdessen erhalten Sie eine Fehlermeldung.

Seien Sie nicht verzweifelt! Programmierfehler sind in jeder Programmiersprache üblich, und SQL ist da keine Ausnahme. In diesem Artikel gehen wir auf fünf häufige Fehler ein, die beim Schreiben von SQL gemacht werden.

Der beste Weg, um Fehler in SQL zu vermeiden, ist Übung. LearnSQL.de bietet über 30 interaktive SQL-Kurse an. Probieren Sie unseren SQL-Praxis Track mit 5 Kursen und über 600 praktischen Übungen.

Achten Sie auf Ihre Sprache (und Syntax)

Der häufigste SQL-Fehler ist ein Syntaxfehler. Was ist mit Syntax gemeint? Im Grunde bedeutet es eine bestimmte Anordnung von Wörtern und Befehlen. Wenn Sie eine ungeeignete Syntax verwenden, weiß die Datenbank nicht, was Sie ihr mitteilen wollen.

Um zu verstehen, wie Syntax funktioniert, können wir uns eine gesprochene Sprache vorstellen. Stellen Sie sich vor, Sie sagen zu einer Person "Nice dof", wenn Sie "Nice dog" meinen. Die Person weiß nicht, was "dof" bedeutet. Wenn Sie also Ihrer Datenbank sagen, sie solle eine TABELLE statt einer TABELLE suchen, weiß die Datenbank nicht, was sie tun soll.

Menschen neigen dazu, die gleichen Arten von Syntaxfehlern zu machen, so dass ihre Fehler in der Regel leicht zu erkennen sind und sich stark ähneln. Nachdem Sie diesen Artikel gelesen haben, sollten Sie in der Lage sein, sich an diese häufigen Fehler zu erinnern und sie zu vermeiden (oder zu beheben). Zu wissen, auf welche Fehler man achten muss, ist für Anfänger in der SQL-Programmierung sehr wichtig, besonders am Anfang. Neue Programmierer neigen dazu, mehr Fehler zu machen und mehr Zeit damit zu verbringen, nach ihnen zu suchen.

Die folgenden Arten von SQL-Fehlern werden wir uns ansehen

  1. Falsche Schreibweise von Befehlen
  2. Vergessen von Klammern und Anführungszeichen
  3. Angabe einer ungültigen Anweisungsreihenfolge
  4. Auslassen von Tabellenaliasen
  5. Groß- und Kleinschreibung bei Namen

Sind Sie bereit? Fangen wir an.

SQL-Fehler:

1. Falsche Schreibweise von Befehlen

Dies ist die häufigste Art von SQL-Fehlern, sowohl bei Anfängern als auch bei erfahrenen Entwicklern. Schauen wir uns an, wie er aussieht. Sehen Sie sich die einfache SELECT-Anweisung unten an und prüfen Sie, ob Sie ein Problem erkennen können:

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

Wenn Sie diese Abfrage ausführen, erhalten Sie eine Fehlermeldung, die lautet:

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

Jede Datenbankversion teilt Ihnen das genaue Wort oder den Ausdruck mit, den sie nicht versteht, obwohl die Fehlermeldung leicht unterschiedlich sein kann.

Was ist hier falsch? Sie haben FROM falsch als FORM geschrieben. Rechtschreibfehler finden sich häufig in Schlüsselwörtern (wie SELECT, FROM und WHERE) oder in Tabellen- und Spaltennamen.

Die häufigsten SQL-Rechtschreibfehler sind zurückzuführen auf:

  • "Pausbäckige Finger", bei denen man einen Buchstaben fast richtig trifft: SELEVT oder FTOM oder WJIRE
  • "Leichtsinniges Tippen", bei dem Sie die richtigen Buchstaben in der falschen Reihenfolge eingeben: SELETC oder FORM oder WHEER

Lösung:

Verwenden Sie einen SQL-Editor mit Syntaxhervorhebung: Die Schlüsselwörter SELECT und WHERE werden hervorgehoben, aber das falsch geschriebene FORM wird nicht hervorgehoben.

Wenn Sie mit interaktive SQL-Kurse in LearnSQL.de lernen, wird im Code-Editor jedes Schlüsselwort der Anweisung SELECT in hellviolett dargestellt. Wenn das Schlüsselwort schwarz ist, wie bei jedem anderen Argument, wissen Sie, dass es ein Problem gibt. (In unserem Beispiel ist FORM schwarz).

Wenn wir also unsere Anweisung korrigieren, erhalten wir:

SELECT *
FROM dish
WHERE NAME = 'Prawn Salad'

Das Schlüsselwort hat jetzt die richtige Farbe und die Anweisung wird ohne Fehler ausgeführt.

2. Vergessen von Klammern und Anführungszeichen

Klammern fassen Operationen zusammen und geben die Ausführungsreihenfolge vor. In SQL (und in allen Programmiersprachen, die ich verwende) ist die folgende Reihenfolge der Operationen ...

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

... nicht dasselbe wie:

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

Können Sie herausfinden, warum?

Ein sehr häufiger SQL-Fehler besteht darin, die schließende Klammer zu vergessen. Wenn wir uns also diese fehlerhafte Anweisung ansehen:

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

Wir erhalten einen Fehlercode mit der Position des Fehlers (das 102. Zeichen vom Anfang an):

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

Denken Sie daran: Klammern werden immer paarweise gesetzt.

Das Gleiche gilt für einfache Anführungszeichen ( ' ' ) oder doppelte Anführungszeichen ( " " ). In SQL gibt es keine Situation, in der ein Anführungszeichen (entweder ein einfaches Anführungszeichen oder ein doppeltes Anführungszeichen) ohne sein Gegenstück vorkommt. Spaltentextwerte können ein Anführungszeichen enthalten (z. B. exp.last_name = "O'Reilly"), und in solchen Situationen müssen wir zwei Arten von Anführungszeichen mischen oder Escape-Zeichen verwenden. ( In SQL bedeutet die Verwendung von Escape-Zeichen einfach, dass man ein weiteres Anführungszeichen neben das zu deaktivierende Zeichen setzt - z. B. exp.last_name = 'O'’Reilly.)

Die Lösung:

Üben, üben, üben. Wenn Sie mehr SQL-Code schreiben, werden Sie die Erfahrung sammeln, die Sie brauchen, um diese Fehler zu vermeiden. Und denken Sie daran, dass die Leute normalerweise die schließende Klammer oder das Anführungszeichen vergessen. Die erste Klammer wird selten weggelassen. Wenn Sie Probleme haben, schauen Sie sich Ihre abschließende Interpunktion genau an!

3. Ungültige Anweisungsreihenfolge

Wenn Sie SELECT-Anweisungen schreiben, sollten Sie daran denken, dass es eine vordefinierte Reihenfolge der Schlüsselwörter gibt, damit die Anweisung korrekt ausgeführt werden kann. Hier gibt es keinen Spielraum.

Sehen wir uns ein Beispiel für eine korrekt angeordnete Anweisung an:

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

Hier gibt es keine Abkürzung; Sie müssen sich nur die richtige Reihenfolge der Schlüsselwörter für die SELECT-Anweisung merken:

  • SELECT identifiziert Spaltennamen und Funktionen
  • FROM gibt den oder die Tabellennamen an (und JOIN Bedingungen, wenn Sie mehrere Tabellen verwenden)
  • WHERE definiert Filteranweisungen
  • GROUP BY zeigt, wie man Spalten gruppiert
  • HAVING filtert die gruppierten Werte
  • ORDER BY legt die Reihenfolge fest, in der die Ergebnisse angezeigt werden sollen

Sie können das Schlüsselwort WHERE nicht vor FROM schreiben, und Sie können HAVING nicht vor GROUP BY einfügen. Die Anweisung wäre ungültig.

Schauen wir uns an, was passiert, wenn Sie die Reihenfolge der Anweisungen durcheinander bringen. In diesem Fall verwenden wir den häufigen SQL-Fehler, ORDER BY vor GROUP BY zu setzen:

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

Die Fehlermeldung, die wir sehen, ist ziemlich furchteinflößend!

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]

Die Lösung:

Lassen Sie sich nicht entmutigen! Sie können sehen, dass alle Schlüsselwörter korrekt hervorgehoben und alle Anführungszeichen und Klammern geschlossen sind. Jetzt sollten Sie die Reihenfolge der Anweisungen überprüfen. Wenn Sie gerade erst mit Ihrem SQL-Studium beginnen, empfehle ich Ihnen, eine Checkliste SELECT zu verwenden. Wenn Sie auf ein Problem stoßen, sehen Sie in Ihrer Liste nach, wie die richtige Reihenfolge aussieht.

4. Weglassen von Tabellenaliasen

Bei der Verknüpfung von Tabellen ist die Erstellung von Tabellenaliasen eine gängige Praxis. Diese Aliase unterscheiden zwischen Spalten mit demselben Namen in verschiedenen Tabellen, so dass die Datenbank weiß, welche Spaltenwerte sie zurückgeben muss. Dies ist nicht zwingend erforderlich, wenn wir verschiedene Tabellen verknüpfen, da wir die vollständigen Tabellennamen verwenden können. Es ist jedoch zwingend erforderlich, wenn wir eine Tabelle mit sich selbst verknüpfen.

Angenommen, wir schreiben eine SQL-Anweisung, um den aktuellen Standort einer Ausstellung und den Standort des Vorjahres zu ermitteln:

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

Die Datenbank würde einen Fehler zurückgeben:

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

Hinweis: Immer wenn Sie in Ihrer Fehlermeldung auf "mehrdeutige Spaltennamen" stoßen, benötigen Sie mit Sicherheit Tabellen-Aliase.

Die korrekte Anweisung (mit Aliasen) würde lauten:

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

Lösung:

Üben Sie die Verwendung von Tabellenaliasen für SELECT Anweisungen für einzelne Tabellen. Verwenden Sie Aliase häufig - sie machen Ihr SQL lesbarer.

5. Groß- und Kleinschreibung bei Namen

Dieser Fehler tritt nur auf, wenn Sie nicht standardisierte Namen für Tabellen oder Datenbankobjekte schreiben müssen.

Nehmen wir an, Sie benötigen eine Tabelle namens LargeClient und fügen aus irgendeinem Grund eine weitere Tabelle namens LARGECLIENT hinzu. Wie Sie bereits wissen, wird bei Objektnamen in Datenbanken normalerweise nicht zwischen Groß- und Kleinschreibung unterschieden. Wenn Sie also eine Abfrage für die Tabelle LargeClient schreiben, wird die Datenbank tatsächlich LARGECLIENT abfragen.

Um dies zu vermeiden, müssen Sie den Tabellennamen in doppelte Anführungszeichen setzen. Ein Beispiel:

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

Wenn Sie eine Tabelle erstellen, müssen Sie doppelte Anführungszeichen verwenden, wenn:

  • Der Tabellenname zwischen Groß- und Kleinschreibung unterscheidet.
  • Der Tabellenname Sonderzeichen enthält. Dazu gehört auch die Verwendung eines Leerzeichens, wie z. B. "Großkunde".

Lösung:

Vermeiden Sie die Verwendung dieser Namen, wenn Sie können. Wenn nicht, denken Sie an Ihre doppelten Anführungszeichen!

Jeder macht SQL-Fehler

Dies sind die fünf häufigsten Fehler in SQL-Code. Sie werden Ihnen beim Erlernen dieser Sprache wahrscheinlich noch oft unterlaufen. Denken Sie daran, dass jeder beim Schreiben von Code Fehler macht. Fehler zu machen ist sogar ein normaler und vorhersehbarer Teil der Softwareentwicklung.

Lassen Sie sich also nicht entmutigen. Wenn Sie in Zukunft Fehler machen, versuchen Sie, Ihren Code strukturiert zu analysieren. Mit einer strukturierten Analyse können Sie Ihre Fehler schneller finden und korrigieren.

Wenn Sie mehr über andere syntaktische Fehler erfahren möchten, die ich hier nicht aufgeführt habe, lassen Sie es mich bitte wissen. In einem der nächsten Artikel werden wir uns mit nicht-syntaktischen Fehlern befassen. Diese geben Daten zurück oder verändern sie und sind daher viel gefährlicher. Abonnieren Sie unseren Blog, damit Sie ihn nicht verpassen!