23rd Jun 2022 8 Leseminuten 8 Tipps, mit denen auch absolute Anfänger SQL-Abfragen korrigieren können Marcos Pierri SQL-Tipps Inhaltsverzeichnis 1. Offene und schließende Klammern zuerst setzen 2. Setzen Sie kein Komma am Ende einer Spalten- oder Tabellensequenz 3. Verwenden Sie die partielle Abfrageauswertung, um lange SQL-Abfragen zu debuggen 4. Achten Sie auf Spalten- und Tabellennamen 5. Nur kompatible Datentypen vergleichen 6. IS NULL beim Vergleich von NULL-Werten verwenden 7. Immer die JOIN-Bedingung einbeziehen 8. Nicht aggregierte Spalten aus der SELECT-Liste in GROUP BY-Spalten einbeziehen Probieren Sie es selbst aus! Code-Fehler sind häufig - und frustrierend. Und wenn man SQL gerade erst lernt, kann es sehr schwierig sein, die Fehler zu finden und zu beheben. In diesem Beitrag zeigen wir Ihnen acht Möglichkeiten, wie Sie häufige SQL-Codierungsfehler lösen oder beseitigen können. Heute sprechen wir über einige Tipps, die SQL-Anfänger verwenden können, um verschiedene häufige Fehler zu vermeiden. Diese Tipps sind in jeder Datenbankumgebung anwendbar. Im weiteren Verlauf werden wir einige Fehlermeldungen zeigen. Der genaue Wortlaut Ihrer Fehlermeldungen kann ein wenig anders sein, aber keine Sorge, jede Datenbank-Engine hat ihre eigenen Varianten, aber die Bedeutung ist dieselbe. 6 häufige Syntax-Fehler, die alle SQL-Lernenden machenhttps://t.co/owxdMv9UNT#sql #LearnSQL #Database - Vertabelo (@Vertabelo) January 3, 2017 In diesem Sinne werden wir uns nicht auf Fehlermeldungen konzentrieren. Stattdessen werden wir die eigentliche Ursache des Problems (z. B. das Vergessen einer Klammer oder eines Anführungszeichens) herausfinden. Auf diese Weise lernen Sie, wie Sie das Problem von vornherein umgehen können. Sind Sie bereit? Dann fangen wir an! 1. Offene und schließende Klammern zuerst setzen Um unausgewogene Klammern, Anführungszeichen, doppelte Anführungszeichen oder eckige Klammern zu vermeiden, ist es wichtig, sich an das schließende Zeichen zu erinnern. Bewährte Verfahren empfehlen, beide Zeichen zuerst einzugeben (offenes und schließendes Zeichen) und dann das einzugeben, was darin steht. Das folgende Beispiel zeigt einen Fehler, wenn die Klammern nicht ausgeglichen sind: 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 ; Beispiel 1: Unausgewogene Klammern 2. Setzen Sie kein Komma am Ende einer Spalten- oder Tabellensequenz Kommas dienen in SQL als Trennzeichen. Zwischen FROM und dem ersten Tabellennamen oder nach dem letzten Tabellennamen sollten keine Kommas stehen. Das Gleiche gilt für die Definition von Spalten: Wenn Sie eine Tabelle erstellen, achten Sie darauf, dass Sie kein zusätzliches Komma nach dem letzten Spaltennamen eingeben. Dies ist ein sehr häufiger Fehler. SELECT * FROM employee, department, ERROR: syntax error at or near "," LINE 1: SELECT * FROM employee, department Beispiel 2: Ein zusätzliches Komma 3. Verwenden Sie die partielle Abfrageauswertung, um lange SQL-Abfragen zu debuggen Viele SQL-Clients wie Navicat oder pgAdmin erlauben die teilweise Ausführung einer Abfrage. Sie können dies tun, indem Sie mit der Maus einen Teil des Codes markieren. Mit dieser Technik des Teilens und Eroberns können Sie Fehler leicht isolieren und beheben. Der markierte Teil muss natürlich gültiges SQL sein. Die folgende Abfrage weist zwei Fehler auf. Wenn wir die erste Zeile der Abfrage ausführen, können wir das erste Problem erkennen. (Hinweis: Die Spalte "llastname" existiert nicht.) 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 Beispiel 3: Ein falscher Spaltenname Wenn wir jedoch die gesamte SQL-Anweisung ausführen, erhalten wir einen Fehler im Zusammenhang mit unausgewogenen Klammern: 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 ; Beispiel 4: Unterabfrage mit falscher Klammerung Wir können auch eine Unterabfrage markieren und sie einzeln ausführen, wie im nächsten Beispiel: 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 Beispiel 5: Falscher Funktionsname 4. Achten Sie auf Spalten- und Tabellennamen Achten Sie sehr genau darauf, wenn Sie Spalten- oder Tabellennamen eingeben. Wenn möglich, versuchen Sie, den Namen aus einem Befehl zu kopieren und einzufügen, von dem Sie wissen, dass er korrekt ist - vorzugsweise einen, der bereits ordnungsgemäß ausgeführt wurde. Bewährte Verfahren empfehlen das Kopieren und Einfügen von Namen, auch wenn Sie glauben, dass dies zeitaufwändiger ist als das Eintippen. Ein falsch geschriebener Spaltenname oder ein Verweis auf eine Spalte in einer Tabelle, die nicht in der FROM Klausel enthalten ist, kommt sehr häufig vor. Achten Sie immer auf Tippfehler im Spaltennamen, vergewissern Sie sich, dass die Tabelle in FROM diese Spalte hat, und stellen Sie sicher, dass die Tabelle in FROM erwähnt wird. SELECT llastname, firstname FROM employees ERROR: table "employees" does not exist LÍNEA 1: SELECT llastname, firstname FROM employees Beispiel 6: Falscher Tabellenname Eine weitere gute Praxis ist die Verwendung eines Tabellenalias oder eines Tabellennamens als Spaltenpräfix. Dies ist doppelt wichtig, wenn Sie zwei oder mehr Tabellen in der <>FROM-Klausel haben. Der folgende Fehler kann auftreten, wenn Sie sich auf zwei identisch benannte Spalten in verschiedenen Tabellen beziehen: 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 Beispiel 7: Zweideutige Spaltennamen SELECT lastname, name FROM department, employee WHERE department.depto_id = employee.depto_id Beispiel 8: Vorangestellte Spaltennamen Um diese Fehler zu beheben, fügen Sie den Tabellennamen vor dem Spaltennamen ein. (Im obigen Beispiel wären das employee.depto_id und department.depto_id statt nur depto_id.) 5. Nur kompatible Datentypen vergleichen Wenn Sie Vergleichsbedingungen in die WHERE Klausel schreiben, stellen Sie sicher, dass beide Datentypen mit dem Vergleichsoperator und miteinander kompatibel sind. Wenn dies nicht möglich ist, müssen Sie eventuell einen der Datentypen casten. In der Regel sollten Sie Zahlen mit Zahlen, Zeichenketten mit Zeichenketten usw. vergleichen. Einige Datenbanksysteme konvertieren Datentypen automatisch, wo dies möglich ist; andere bieten erweiterte Datentypkonvertierungen (z. B. kann ein TIMESTAMP-Wert vor Vergleichen automatisch in ein DATE konvertiert werden). Wieder andere Datenbankdienste bieten überhaupt keine Konvertierungen an. Es ist also am besten, wenn Sie sich selbst um diese potenziellen Probleme kümmern. Jedenfalls erhält der folgende SQL-Code einen Fehler bei der Datenübereinstimmung, weil ein CHAR-String mit einem Integer-Wert verglichen wird: SELECT lastname, salary FROM employee WHERE depto_id = firstname ERROR: operator does not exist: integer = character varying LINE 3: WHERE depto_id = firstname Beispiel 9: Nicht übereinstimmende Datentypen Kein Operator entspricht dem angegebenen Namen und Argumenttyp(en). Möglicherweise müssen Sie explizite Typ-Casts hinzufügen, um dieses Problem zu lösen. 6. IS NULL beim Vergleich von NULL-Werten verwenden Wenn Sie nur überprüfen müssen, ob eine Spalte einen NULL-Wert hat, achten Sie besonders darauf, welche Ausdrücke Sie verwenden. Ein häufiger Fehler ist es, = NULL oder <> NULL zu verwenden, aber diese Ausdrücke sind syntaktisch nicht gültig. Verwenden Sie stattdessen die Klauseln IS NULL und IS NOT NULL. Schauen wir uns die falschen und richtigen Beispiele an: SELECT firstname, lastname FROM employee WHERE depto_id = NULL Beispiel 10: Falscher NULL-Vergleich SELECT firstname, lastname FROM employee WHERE depto_id is NULL Beispiel 11: Korrekter NULL-Vergleich 7. Immer die JOIN-Bedingung einbeziehen Es gibt mehr als eine gültige Möglichkeit, eine Verknüpfung in SQL durchzuführen. Die herkömmliche Methode besteht darin, alle zu verknüpfenden Tabellen in der FROM-Klausel aufzulisten und die Verknüpfungsbedingungen in die WHERE-Klausel aufzunehmen, um Paare von Datensätzen zu bilden. Die andere (deklarativere) Methode besteht darin, die JOIN-Klausel zu verwenden und die Verknüpfungsbedingungen nach der ON-Klausel aufzuführen. Beide sind syntaktisch gleichwertig, aber Sie sollten wissen, wie Sie die Join-Bedingung für beide identifizieren können. Hier haben wir zwei gültige Joins: 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 Beispiel 12: Zwei gleichwertige Joins Der Tipp lautet jedoch: Vergessen Sie nicht die Join-Bedingung! Jedes Mal, wenn Sie zwei oder mehr Tabellen verbinden, müssen Sie eine Join-Bedingung schreiben, um beide Tabellen zu verknüpfen. Wenn Sie dies nicht angeben, erhalten Sie keine Fehlermeldung, sondern nur falsche Ergebnisse. Diese werden falsch sein, weil jeder Datensatz der ersten Tabelle mit allen Datensätzen der zweiten Tabelle verknüpft wird. Diese Art von Ergebnismenge wird als kartesisches Produkt zweier Tabellen bezeichnet und ist normalerweise kein erwartetes Ergebnis. SELECT lastname, name FROM department, employee Beispiel 13: Ein kartesisches Produkt - in der Regel nicht das gewünschte Ergebnis 8. Nicht aggregierte Spalten aus der SELECT-Liste in GROUP BY-Spalten einbeziehen Bei der Verwendung von Aggregatfunktionen gibt es einige Einschränkungen, welche Spalten in die SELECT Liste (d.h. die Spaltennamen nach der SELECT Klausel) aufgenommen werden können. Sie können nur die in der Klausel GROUP BY angegebenen Spalten sowie Aggregatfunktionen und Konstanten einbeziehen. Wenn Sie nur Aggregatspalten auswählen, führt jede andere Spalte zu einem Fehler. Sie können dies im folgenden Beispiel sehen. 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 Beispiel 14: Zusätzliche Spalten in der SELECT-Liste SELECT department.depto_id, name , count(*) employees FROM department, employee WHERE department.depto_id = employee.depto_id GROUP BY department.depto_id Beispiel 15: Keine zusätzlichen Spalten in der SELECT-Liste Manchmal müssen wir Daten mit Hilfe einer Aggregationsfunktion filtern. Einer der häufigsten Fehler besteht darin, eine Bedingung mit der Aggregatfunktion in die WHERE -Klausel zu setzen. Dies ist unten dargestellt: 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 Beispiel 16: Falsche Aggregatfunktion in der WHERE-Klausel Denken Sie daran, wenn Sie mit Hilfe einer Aggregatfunktion filtern müssen, ist es richtig, die Bedingung mit Hilfe des Aggregats in die HAVING Klausel zu setzen, wie im folgenden Beispiel: 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 Beispiel 17: Die Aggregatfunktion steht in der HAVING-Klausel Probieren Sie es selbst aus! LearnSQL ist ein guter Ort, um mit SQL zu beginnen. Mehrere Kurse sind für Anfänger gedacht. Sie können die Tipps in diesem Artikel anhand der Übungen in diesem SQL-Kurs testen. Tags: SQL-Tipps