Operatoren sauber formatieren in SQL-Abfragen

Sauber formatierter Quellcode erleichtert die Übersicht und damit die Fehlersuche. Doch wie leserlich aufbereiteter Sourcecode aussehen soll, ist und bleibt weitgehend Geschmackssache. Im Folgenden stelle ich meine Vorlieben beim Formatieren von SQL-Statements vor.

Ich benütze diese Gelegenheit, wieder einmal auf unsere Sammlung von Best Practices in den Coding Guidelines for Webdevelopment hinzuweisen. Hätte man die unter dem Fachbereich SQL festgehaltenen, einfachen Regeln beherzigt, hätte ich mir gestern eine halbe Stunde Fehlersuche erspart. Aber alles der Reihe nach.

Bevorzugte Schreibweise für AND / OR

Beginnen wir mit meiner bevorzugten Schreibweise für AND- und OR-Verknüpfungen:

SELECT * FROM users WHERE active = 1 AND admin = 1 Das Augenmerk bei diesem Query sei auf die Position des Operators AND gelegt. Er steht auf einer neuen Zeile und leitet die Bedingung ein. Und zwar aus folgenden Überlegungen:

  • Das Auge kann «active AND admin» mit einem Blick erkennen und damit die logische Verknüpfung erstellen. Die Bedingungen der Verknüpfung sind in diesem Fall zweitrangig.
  • Der Operator steht bei der Bedingung, die verknüpft werden soll. Das tönt für mich logisch.
  • Die mit AND verknüpfte Anweisung kann als komplette Zeile entfernt werden, ohne dass eine Anpassung am restlichen Statement nötig wäre.

Zur Überprüfung der Überlegungen eine Gegenüberstellung von zwei Schreibweisen, die sich nur in der Platzierung des AND-Operators unterscheiden:

Best Practice zweite Wahl
SELECT * FROM users WHERE active = 1 AND admin = 1 SELECT * FROM users WHERE active = 1 AND admin = 1

Das gleiche Beispiel noch mit einer OR-Verknüpfung:

Best Practice zweite Wahl
SELECT * FROM users WHERE active = 1 OR admin = 1 SELECT * FROM users WHERE active = 1 OR admin = 1

Die gleiche Logik lässt sich auch auf das Verknüpfen von Tabellen anwenden. Und so schreibe ich Joins nach diesem Muster:

SELECT tabelle1.spalte1, tabelle1.spalte2, tabelle2.spalte1, tabelle2.spalte2 FROM tabelle1 INNER JOIN tabelle2 ON tabelle1.spalteid = tabelle2.spalteid WHERE tabelle1.spalte3 = 10 AND tabelle2.spalte3 = ´Haus´ Auf den ersten Blick erkenne ich wiederum die Art der Verknüpfung: Inner Join. Zudem kann ich die Verknüpfungsanweisungen mit dem ON-Operator leicht lesen, da sie auf einer neuen Zeile aufgeführt werden. Gerade bei mehreren Joins werden die Anweisungen schnell unübersichtlich.

Was bei diesem Beispiel noch auffällt, ist die Notation im SELECT-Bereich. Die ausgewählten Spalten werden nach Herkunft (Tabelle) zeilenweise aufgeführt. Und nochmals das komplette Beispiel in der Gegenüberstellung:

Best Practice
SELECT tabelle1.spalte1, tabelle1.spalte2, tabelle2.spalte1, tabelle2.spalte2 FROM tabelle1 INNER JOIN tabelle2 ON tabelle1.spalteid = tabelle2.spalteid WHERE tabelle1.spalte3 = 10 AND tabelle2.spalte3 = ´Haus´

zweite Wahl
SELECT tabelle1.spalte1, tabelle1.spalte2, tabelle2.spalte1, tabelle2.spalte2 FROM tabelle1 INNER JOIN tabelle2 ON tabelle1.spalteid = tabelle2.spalteid WHERE tabelle1.spalte3 = 10 AND tabelle2.spalte3 = ´Haus´

Variationen für die Spalte «zweite Wahl» gäbe es natürlich diverse. Und logischerweise führen beide Schreibweisen zum exakt gleichen Ergebnis, sind also funktionell nicht unterschiedlich. Es ist eine Frage der Philosophie. Und für mich gehört der Operator zum zweiten Element, das in einer Beziehung zu einem ersten steht, da das zweite Element zum ersten hinzugefügt wird.

Kommentare

Leave this field empty
Ihren Kommentar hinzufügen

Falls Sie abonnieren, werden alle neuen Kommentare zu diesem Thema an Ihre E-Mail-Adresse gesandt.

TrackBacks

Es gibt keine Trackbacks für diesen Eintrag.

Trackback URL dieses Eintrages:
http://www.samelis.ch/blog/mischa/trackback.cfm?id=7F1DDF20-59C4-412E-B2C0C4F17887A7A6