Top Kniffe für ein besseres Arbeiten mit SQL

SQL ist überall, SQL ist einfach zu erlernen und SQL-Lösungen lassen sich problemlos implementieren. Egal, ob man nun SQL häufig oder nur gelegentlich verwendet, diese Tricks und Ratschläge für die Arbeit mit der Datenbanksprache helfen auf jeden Fall, Fehler zu vermeiden und die Performance zu verbessern.

Viele SQL-Versionen sind anbieterspezifisch. Die folgenden Tipps gelten für Jet- und Transact-SQL, aber sie können auf andere SQL-Produkte adaptiert werden.

1. Arbeiten mit Jet-SQL im Access-SQL-Fenster

Access-Benutzer erstellen jedes Mal, wenn sie eine Abfrage generieren, auch gleichzeitig SQL-Anweisungen, sie wissen es nur nicht. Sie benutzen das Query-Design-Fenster, eine grafische Darstellung des eigentlichen SQL. Die wenigsten Benutzer sind in der Lage, die geeigneten SQL-Anweisungen zu erstellen, die sie benötigen, weshalb die grafische Oberfläche sehr hilfreich ist. Doch auch für Programmierer bietet sie einige Vorteile. Wenn es einem zum Beispiel schwer gelingt, ohne Hilfsmittel einen fehlerfreien SQL-Code zu erstellen, kann man auf das SQL-Fenster zurückgreifen:

  • Nach dem Erstellen einer Abfrage mithilfe des Query-Design-Fensters muss der Code aus dem SQL-Fenster in ein VBA-Modul kopiert werden.
  • Wenn eine im Code durchgeführte Abfrage eine wenig aussagekräftige Fehlermeldung in VBA erzeugt, kopiert man die SQL-Anweisung in das SQL-Fenster und führt sie aus. Access liefert meist bessere Informationen über den Fehler als VBA.

Nicht jede SQL-Anweisung kann direkt aus dem Modul in das SQL-Fenster kopiert werden. Wenn die Anweisung Verkettungen oder Variablen enthält, sollte man eine Debug.Print-Anweisung direkt nach der Definitionsanweisung einfügen. Falls ein Debugging für die Anweisung durchgeführt werden soll, kopiert man die evaluierte Anweisung aus dem Immediate-Fenster. Die folgende Anweisung im Code funktioniert beispielsweise wegen der Variablen und der Verkettung im SQL-Fenster nicht:

Ist dagegen eine Debug.Print-Anweisung dahinter gesetzt, lassen sich die evaluierten Ergebnisse aus dem Immediate-Fenster kopieren:

2. Reservierte Wörter in SQL

SQL reserviert bestimmte Wörter als Schlüsselwörter. Sie sollten nicht zur Bezeichnung von Spalten, Tabellen, Variablen oder Objekten verwendet werden. Kommen diese Wörter außerhalb des von der Engine vorgesehenen Kontexts zum Einsatz, verwirrt dies die Engine und verursacht Fehler oder sogar ohne Fehlermeldung falsche Ergebnisse.

3. Der Unterschied zwischen ALL, DISTINCT und DISTINCTROW

Die SQL-Anweisung SELECT unterstützt drei Prädikate: ALL, DISTINCT und DISTINCTROW. ALL ist der Standard und gibt alle Einträge aus, welche die jeweils eingegebenen Bedingungen erfüllen. DISTINCT beschränkt die Ergebnisse auf in einer oder mehreren Spalten nur einmal vorkommende Werte. Zum Beispiel würde die folgende Anweisung nur einen Eintrag für jeden LastName-Wert ausgeben:

Mit anderen Worten: Wenn ein Eintrag sowohl für John Smith als auch für Mary Smith vorhanden ist, gibt diese Anweisung nur einen Eintrag für Smith aus. DISTINCT funktioniert jedoch für alle Spalten, nicht nur für die unmittelbar folgende Spalte. Das bedeutet, dass diese Anweisung einen Eintrag für John und Mary ausgibt, da die kombinierten Spalten keinen doppelten Eintrag ergeben:

Wenn die SELECT-Klausel auf mehr als eine Spalte bezogen wird, muss die Kombination der Werte aus allen ausgewählten Spalten für einen bestimmten Eintrag einzigartig sein.

DISTINCT weist ein paar Besonderheiten auf, die man kennen sollte:

  • Man sollte DISTINCT nicht zusammen mit einem Asterisk (*) verwenden. Die Spalten müssen mit ihrem Namen angeben werden.
  • Abfragen unter Verwendung von DISTINCT können nicht aktualisiert werden, was auch sinnvoll ist.

Während DISTINCT mit Spalten funktioniert, bezieht sich DISTINCTROW auf Einträge. (Transact-SQL unterstützt DISTINCTROW nicht.) Dieses Prädikat weist ebenfalls einige Einschränkungen auf, die das Beheben eines Fehlers erschweren können:

  • Die Engine ignoriert DISTINCTROW, wenn die Abfrage nur eine Tabelle enthält.
  • Die Engine ignoriert DISTINCTROW, wenn man auf alle Spalten aus allen zugrundeliegenden Tabellen verweist.

Page: 1 2 3 4 5

ZDNet.de Redaktion

Recent Posts

Gefahren im Foxit PDF-Reader

Check Point warnt vor offener Schwachstelle, die derzeit von Hackern für Phishing ausgenutzt wird.

1 Tag ago

Bitdefender entdeckt Sicherheitslücken in Überwachungskameras

Video-Babyphones sind ebenfalls betroffen. Cyberkriminelle nehmen vermehrt IoT-Hardware ins Visier.

2 Tagen ago

Top-Malware in Deutschland: CloudEye zurück an der Spitze

Der Downloader hat hierzulande im April einen Anteil von 18,58 Prozent. Im Bereich Ransomware ist…

2 Tagen ago

Podcast: „Die Zero Trust-Architektur ist gekommen, um zu bleiben“

Unternehmen greifen von überall aus auf die Cloud und Applikationen zu. Dementsprechend reicht das Burg-Prinzip…

2 Tagen ago

Google schließt weitere Zero-Day-Lücke in Chrome

Hacker nutzen eine jetzt gepatchte Schwachstelle im Google-Browser bereits aktiv aus. Die neue Chrome-Version stopft…

2 Tagen ago

Hacker greifen Zero-Day-Lücke in Windows mit Banking-Trojaner QakBot an

Microsoft bietet seit Anfang der Woche einen Patch für die Lücke. Kaspersky-Forscher gehen davon aus,…

2 Tagen ago