23rd Jun 2022 7 Leseminuten Wie man lange SQL-Abfragen strukturiert Marek Pankowski CTE Inhaltsverzeichnis Wie man SQL-Abfragen strukturiert Tipp 1: Einrücken des Codes Tipp 2: Verwenden Sie die WITH-Klausel Tipp 3: Erläutern Sie sich selbst mit Kommentaren Tipp 4: Unterteilen Sie Abfragen in Schritte Tipp 5: Bleiben Sie bei einer Namenskonvention Die rätselhafte lange SQL-Abfrage - Zusammenfassung Die erste lange SQL-Abfrage, mit der Sie zu tun haben werden, wird Ihnen wahrscheinlich schwer fallen, sie zu strukturieren und zu verstehen. Mit diesen fünf Tipps lernen Sie, wie Sie SQL-Abfragen am besten organisieren, d. h. schreiben und formatieren. Wie wir alle wissen, sind SQL-Abfragen für die Datenbankverwaltung unerlässlich. Ohne sie wäre es äußerst schwierig, die Informationen in einer Datenbank zu finden und mit ihnen zu arbeiten. Die Länge der Abfrage hängt von der Art der benötigten Informationen und der Größe der Datenbank ab. Wenn wir ein einfaches Stück SQL-Code lesen, können wir es in der Regel recht gut verstehen. Was aber, wenn wir es mit einer 1.500 Zeilen langen Abfrage zu tun haben? Wenn wir verstehen wollen, was wir getan haben (oder es anderen verständlich machen wollen), müssen wir wissen, wie man SQL-Abfragen organisiert. Glücklicherweise können Sie mit nur fünf nützlichen Tipps jede lange SQL-Abfrage bewältigen, die Sie jemals schreiben werden. . Wie man SQL-Abfragen strukturiert Tipp 1: Einrücken des Codes Die Einrückung hilft Ihnen, Ihre langen SQL-Abfragen sauber zu halten, indem sie angibt, wo die einzelnen Codeblöcke beginnen. Dies macht die Programmstruktur verständlicher und ermöglicht es Entwicklern, eine bestimmte Anweisung leicht zu finden. Wenn Sie Ihren Code richtig einrücken, können Sie schnell erkennen, was Sie auswählen, aus welchen Tabellen die Daten stammen und welche Einschränkungen dafür gelten (d. h. die Klauseln WHERE und GROUP BY ). Schauen wir uns ein relativ langes SQL-Abfragebeispiel an: SELECT column1 ,column2 FROM table1 WHERE column3 IN ( SELECT TOP(1) column4 FROM table2 INNER JOIN table3 ON table2.column1 = table3.column1 ) Vergleichen Sie den obigen Code mit diesem Beispiel: SELECT column1, column2 FROM table1 WHERE column3 IN ( SELECT TOP(1) column4 FROM table2 INNER JOIN table3 ON table2.column1 = table3.column1) Stellen Sie sich nun vor, es gäbe auch 100 ähnliche Anweisungen. Ohne Einrückung ist eine so lange SQL-Abfrage sehr schwer zu lesen und zu verstehen! Es gibt keinen einzigen akzeptierten Einrückungsstil. Jedes Unternehmen oder jeder Programmierer entwickelt normalerweise seinen eigenen. Trotzdem sollte Ihr Einrückungsstil für andere sinnvoll sein. Um Ihnen den Einstieg zu erleichtern, habe ich Links zu Style Guides von ApexSQL und Simon Holywell bereitgestellt. Die Einrückung ist das erste, was Sie tun sollten, wenn Sie anfangen, Code zu schreiben. Wenn Sie ein Stück Code ohne Einrückung geerbt haben, gibt es eine Reihe von Websites, auf denen Sie Ihre lange SQL-Abfrage kostenlos formatieren können. Tipp 2: Verwenden Sie die WITH-Klausel Mit der WITH -Klausel können Sie einen Subquery-Block benennen und ihn wie eine normale Tabelle behandeln. In diesem Fall ist die WITH Klausel im Grunde ein Ersatz für eine normale Unterabfrage. Sehen Sie sich das folgende Beispiel einer langen SQL-Abfrage an. Die Aufgabe besteht darin, die Anzahl der Krankenhäuser in Los Angeles anzuzeigen, in denen Patienten, deren letzter Besuch mehr als 14 Tage zurückliegt, eine durchschnittliche Medikamentendosis von mehr als 1.000 Einheiten erhalten haben. WITH patient_data AS ( SELECT patient_id, patient_name, hospital, drug_dosage FROM hospital_registry WHERE (last_visit > now() - interval '14 days' OR last_visit IS NULL) AND city = "Los Angeles" ) WITH average_dosage AS ( SELECT hospital, AVG(drug_dosage) AS Average FROM patient_data GROUP BY hospital ) SELECT count(hospital) FROM average_dosage; WHERE AVG(drug_dosage) > 1000 Ich werde alle Elemente in dieser Abfrage erklären. Das erste Element ist die WITH Klausel. Mit ihr können wir zwei Unterabfragen als patient_data und average_dosage angeben und sie wie normale Tabellen verwenden. Die Unterabfrage patient_data wurde verwendet, um die Unterabfrage average_dosage zu erstellen. So wird average_dosage zur endgültigen Datenquelle der SELECT -Anweisung. Diese Anordnung ist viel sauberer, als alles in eine Abfrage zu schreiben und alle Unterabfragen in die WHERE -Anweisungen aufzunehmen. Die WITH -Klausel ist wohl der beste Weg, um SQL-Abfragen zu organisieren, da sie den Code leichter lesbar macht. Tipp 3: Erläutern Sie sich selbst mit Kommentaren Code sagt, wie es geht, aber Kommentare erklären, warum. Kommentare gehören zu den wichtigsten hilfreichen Funktionen in jedem Code, von einem Programmierprojekt in Java bis zu einer SQL-Abfrage. Sie ermöglichen es Programmierern, ihre Gedankengänge und die gewünschten Ergebnisse auszudrücken. Fügen Sie immer Kommentare zu Ihrem Code hinzu. Sie werden sich darüber freuen, ebenso wie alle anderen Programmierer, die an Ihrem SQL arbeiten. Auch wenn Sie gerade eine Pause machen, fügen Sie Kommentare ein - sie helfen Ihnen, dort weiterzumachen, wo Sie aufgehört haben. So sieht eine sehr einfache SQL-Abfrage ohne Kommentare aus: SELECT name, student_group, FROM course_marks WHERE points < 300 OR points IS NULL; Wissen Sie wirklich genau, was die WHERE bedeutet? Ohne Kommentare ist es schwer zu verstehen, was der Programmierer erreichen wollte. Wenn Sie sich fragen, wie Sie SQL-Abfragen am besten organisieren, machen Sie es sich zur Gewohnheit, Kommentare in Ihrem Code zu hinterlassen. Sehen wir uns dieselbe lange SQL-Abfrage an, aber mit Kommentaren und Erklärungen: /*Get the list of every student who failed or was absent on exam*/ SELECT name, student_group, FROM course_marks WHERE points < 300 OR points IS NULL; --student fails when gets 300 or less points. --When student was absent, instead of points there is NULL in column Besser, nicht wahr? Diese Kommentare erklären die Aktionen des Entwicklers und helfen uns zu verstehen, was die Abfrage tut. Tipp 4: Unterteilen Sie Abfragen in Schritte Eine lange SQL-Abfrage ist in Wirklichkeit eine Sammlung von Codeblöcken, die viel leichter zu kontrollieren und auf Fehler zu überprüfen sind. Die schrittweise Erstellung einer Abfrage ist ein bewährtes Verfahren für die SQL-Entwicklung. Auf diese Weise können Sie logische Fehler schneller finden und sich auf Ihre Ergebnisse verlassen. Sehen Sie sich an, wie viel einfacher es ist, diese lange SQL-Abfrage zu verstehen, weil sie in logische Schritte unterteilt wurde: WITH subject AS ( SELECT student_id, subject_id, school_id, sum(exam_score) AS total_score FROM subject_marks GROUP BY student_id, subject_id, school_id ), student AS ( SELECT student_id, school_id, avg(total_score) AS average_student FROM subject GROUP BY student_id, school_id ) SELECT school_id, avg(average_student) FROM student GROUP BY school_id; Wir möchten, dass das Ergebnis dieser Abfrage die durchschnittliche Punktzahl für jeden Schüler jeder Schule ausgibt. Der erste Schritt (die WITH subject Klausel) findet die Summe der Punkte für jedes Fach. Der zweite Schritt (die WITH student Klausel) bildet den Durchschnitt der Punkte für jeden Schüler. Wenn wir die SELECT erreichen, müssen wir nur noch die durchschnittliche Punktzahl ermitteln und die Ergebnisse nach Schulen gruppieren. Wenn Sie eine lange SQL-Abfrage auf diese Weise aufbauen, schreiben Sie tatsächlich eine Abfrage, die weder sehr lang noch kompliziert ist. Es kommt nur darauf an, wie Sie die Abfrage aufteilen. Tipp 5: Bleiben Sie bei einer Namenskonvention Es ist auch sehr wichtig, eine einzige Namenskonvention für Tabellen, Spalten und Abfragen zu verwenden. Dadurch wird der SQL-Code einfacher zu schreiben und zu lesen. Wenn eine Legacy-Datenbank Tabellen mit den Namen PRODUCT, users, USERS_other und UserSECOND_NEW hat, sieht das sehr unprofessionell aus, und die Codierung wird chaotisch. Halten Sie sich an die gängigen Regeln für Groß- und Kleinschreibung, Unterstriche, Leerzeichen usw. Dies gilt auch für Abfragestile: Halten Sie sich an die gleichen Formatierungsregeln und Einrückungsmuster für die gesamte Datenbank. Wenn Sie nach einer SELECT eine neue Zeile beginnen, tun Sie das jedes Mal, vor allem wenn Sie eine lange SQL-Abfrage schreiben. Die Benennungskonventionen können von Datenbank zu Datenbank sehr unterschiedlich sein. Wie bei der Einrückung gibt es auch hier keinen einheitlichen, von der Industrie anerkannten Stil. Ich empfehle Ihnen, herauszufinden, welche Konventionen am weitesten verbreitet sind, und Ihren eigenen Stil an diesen auszurichten. Diese Artikel in den Blogs Vertabelo und Launch by Lunch-Blogs sind ein guter Anfang. Der beste Weg, den Unterschied zwischen gutem und schlechtem Abfragestyling zu verstehen, ist, es selbst zu sehen. Im Folgenden finden Sie ein Beispiel für einen schlechten Stil: SELECT name, SECONDNAME, Date_TIME, address, SecondAddress FROM registry, other_USERSData WHERE registry.id = other_USERSData.id; Diese Abfrage, die einen konstanten Stil verwendet, ist viel besser lesbar: SELECT name, second_name, date_time, address, second_address FROM registry, other_users_data WHERE registry.id = other_users_data.id; Die rätselhafte lange SQL-Abfrage - Zusammenfassung Zusammenfassend lässt sich sagen, dass diese Tipps Ihnen helfen werden, bessere Abfragen zu schreiben, unabhängig von ihrer Länge, aber es ist besonders wichtig, sie anzuwenden, wenn Sie eine lange SQL-Abfrage schreiben. Das Beste, was Sie tun können, ist die Anwendung guter Techniken zu üben. Wenn Sie nicht wissen, wie Sie Ihre Fähigkeiten entwickeln können, ist unser SQL für Anfänger Kurs ist eine großartige Lösung. Es gibt viele Lektionen, in denen Sie lernen, wie man SQL-Abfragen organisiert. Es braucht Zeit, um zu lernen, wie man saubere und intelligente SQL-Abfragen schreibt. Sie müssen die Tabellenbeziehungen, die Code- und Datenplanung, die Identifizierung der Teile einer Abfrage und die zu erwartenden Ergebnisse verstehen. Geduld und harte Arbeit sind der Schlüssel zum Erfolg! Tags: CTE