SQL (Structured Query Language - strukturierte Abfragesprache)


In vielen Bereichen wird auf Informationen in Datenbanken zurückgegriffen. Im Programm Microsoft Access lassen sich SQL-Anweisungen manuell eingeben oder mit den visuellen Werkzeugen der Benutzeroberfläche erstellen. Das Programm Microsoft Query übergibt SQL-Anweisungen an einen Treiber, der die Anweisungen verarbeitet und sie dann an ein Datenbanksystem weiterreicht. Mit SQL*Plus von Oracle als Werkzeug lassen sich SQL-Anweisungen für eine Datenbank eingeben.

ODBC (Open Database Connectivity)

Definiert eine Schnittstelle für den Datenbankzugriff um damit per SQL auf Daten zugreifen zu können.

Allgemeine Syntaxregeln

Zu beachten sind Groß-/Kleinschreibung, Leerzeichen und logische Trennung der Komponenten durch SQL-Schlüsselwörter.
Die meisten Anweisungen beginnen mit SELECT gefolgt von FROM.
SELECT <Spaltennamen>
FROM <Tabelle>;

Beispiel einer Abfrage
SELECT * FROM URLAUB;
Das Sternchen (*) in weist die Datenbank an, alle Spalten aus der Tabelle URLAUB zurückzugeben. Die Reihenfolge der Spalten wird durch die Datenbank bestimmt.
Die Reihenfolge der Spalten in der Ausgabe wird festgelegt indem die Spaltennamen in der Reihenfolge der gewünschten Ausgabe mitgegeben werden. Die Spaltennamen werden durch Komma getrennt. Es werden nur die namentlich angegebenen Spalten ausgegeben. Zwischen dem letzten Spaltennamen und FROM darf kein Komma stehen.
Beispiel Grossbuchstaben
SELECT NAME, URLANFANG, URLENDE
FROM URLAUB
WHERE NAME = 'URLAUBER';

Beispiel Schlüsselwörter in Kleinbuchstaben
select name, urlanfang, urlende
from urlaub
where name = 'URLAUBER';

Beispiel ohne Zeilenumbruch
SELECT NAME, URLANFANG, URLENDE FROM URLAUB WHERE NAME = 'URLAUBER';
Zu beachten ist das URLAUBER in allen Beispielen groß geschrieben wird. Die SQL-Anweisung ist nicht von der Groß-/Kleinschreibung abhängig. Bei Bezügen auf Daten in einer Datenbank ist die Schreibweise jedoch genau einzuhalten.
Im Beispiel wurde angenommen, dass die Spalte NAME nur Großbuchstaben enthält. Daher führt eine Suche nach Urlauber in der Spalte NAME nicht zu den gewünschten Ergebnissen.
Befehlszeilenorientierte SQL-Programme benötigen ein Semikolon am Ende des Ausdrucks, damit die Abfrage ausgeführt wird. Microsoft Query erfordert kein Abschlusszeichen, da die Abfrage in ein Bearbeitungsfeld eingegeben und bei Betätigung der Schaltfläche ausgeführt wird.

Arithmetische Operatoren

Wenn in einem Ausdruck mehrere Operatoren ohne Klammern vorkommen, findet die Auswertung der Ausdrücke in der folgenden Reihenfolge statt: Multiplikation, Division, Modulo, Addition und Subtraktion

Bedingungen

Um ein bestimmtes Element oder eine Gruppe von Elementen in einer Datenbank zu suchen benötigt man eine oder mehrere Bedingungen.
Mit Bedingungen lassen sich selektive Abfragen erstellen. Die einfachste Form einer Bedingung besteht aus einer Variablen, einer Konstanten und einem Vergleichsoperator. Im folgenden Beispiel ist NAME die Variable, 'URLAUBER' die Konstante und = der Vergleichsoperator.
WHERE NAME = 'URLAUBER';
Die Bedingung NAME = 'URLAUBER' liefert einen Booleschen Ausdruck. Wenn die Gleich-Bedingung erfüllt ist liefert NAME = 'URLAUBER' den Wert TRUE ansonsten FALSE.

Vergleichsoperatoren

Rückgabewerte: TRUE = Wahr, FALSE = Falsch (oder UNKNOWN)
In Datenbanken bezeichnet NULL das Fehlen von Daten in einem Feld. Das bedeutet aber nicht, daß eine Spalte eine 0 oder ein Leerzeichen enthält. Die 0 oder das Leerzeichen sind tatsächliche Werte. NULL bedeutet, dass kein Wert in diesem Feld enthalten ist. Führt man einen Vergleich wie PREIS = 9 aus und der einzige Wert für PREIS ist NULL, liefert der Vergleich das Ergebnis UNKNOWN.
Die meisten SQL-Versionen wandeln daher UNKNOWN in FALSE und stellen den speziellen Operator IS NULL für die Suche einer NULL bereit.
Beispiel NULL - Werte aufspüren
SELECT *
FROM PREISLISTE
WHERE PREIS IS NULL;

Wenn man das Gleichheitszeichen (=) verwendet...
SELECT *
FROM PREISLISTE
WHERE PREIS = NULL;

...werden keine Einträge gefunden, da der Vergleich PREIS = NULL den Wert FALSE zurückgibt.
Es empfiehlt sich also IS NULL anstelle des Gleichheitszeichens zu verwenden und die WHERE-Anweisung in WHERE PREIS IS NULL zu ändern.

Tabellen verknüpfen

Mit SQL kann man Daten aus mehreren Tabellen in einer Abfrage verknüpfen. Wenn eine Spalte in zwei Tabellen denselben Namen hat, muß man die anzuzeigende Spalte mit einem Alias (FROM MITREISENDE M, PREISLISTE P, URLAUB U) spezifizieren. Mit diesen Aliasnamen lassen sich viele Tastenanschläge einsparen und die Lesbarkeit der Anweisung wird verbessert. Es empfiehlt sich immer diesen Alias zu verwenden, um bei einer Erweiterung einer Tabelle Fehler durch doppelte Spaltennamen zu vermeiden.
Werden zwei Tabellen ohne die WHERE-Klausel verknüpft, erhält man das sogenannte kartesische Produkt. Dabei werden alle Zeilen aus allen Tabellen in der FROM-Klausel miteinander verknüpft. (z.B.: jede Tabelle hat 10 Zeilen; Ergebnismenge 10 mal 10 ergibt 100 Zeilen)

Einfache Unterabfrage

Eine Unterabfrage erstellt eine Abfrage mit den Ergebnissen aus einer Unterabfrage.
SELECT * FROM Tabelle WHERE (Unterabfrage) = Wert

Verschachtelte Unterabfrage

Eine verschachtelte Unterabfrage enthält mindstens eine weitere Unterabfrage in dieser Unterabfrage.
SELECT * FROM Tabelle WHERE (Unterabfrage(Unterabfrage(Unterabfrage...)))