
Nehmen wir einmal an, dass ein Versicherungsunternehmen einen neuen Geschäftsführer bekommt. Dieser sammelt zunächst Informationen, um sich mit dem Unternehmen vertraut zu machen.
Datenbanken enthalten Informationen
Der Geschäftsführer findet in seinem Büro keine Akten, sondern nur einen PC. Nach dem Einschalten und Anmelden bekommt er folgende Begrüßung:
Wikibooks-Beispieldatenbank (C) Wiki-SQL Bitte geben Sie einen SQL-Befehl ein: sql >
Damit wird der Geschäftsführer auf mehrere Punkte der Organisation in seinem Unternehmen hingewiesen.
- Die Daten sind in einer Datenbank zusammengefasst mit dem Namen Beispieldatenbank.
- Diese Datenbank (DB) stammt von der Firma Wikibooks.
- Um etwas mit dieser DB zu machen, soll er hinter "sql >" einen SQL-Befehl eingeben.
Die Inhalte dieser Datenbank sind in Beispieldatenbank beschrieben, Einzelheiten in Tabellenstruktur der Beispieldatenbank erläutert.
Das Datenbanksystem (DBMS) der Firma Wikibooks wird als Wiki-SQL bezeichnet. Dies bedeutet, dass die Beispieldatenbank zu Wiki-SQL passen muss – in Bezug auf das Dateiformat, die interne Struktur und den Aufbau der Befehle.
SQL ist die Abkürzung für Structured Query Language, also strukturierte Abfragesprache. Der Geschäftsführer hat schon einmal davon gehört, dass dies eine standardisierte Form ist, um mit Datenbanken zu arbeiten, und probiert es aus.
Abfrage nach den Mitarbeitern
Als erstes möchte er eine Liste seiner Mitarbeiter haben. Er überlegt, wie die Abfrage lauten könnte:
Hole Name und Vorname von den Mitarbeitern
Da die Abfrage lediglich eine Fehlermeldung erzeugt, probiert er, seine Abfrage in unterschiedlicher Form auf Englisch durchzuführen (leider auch ohne Erfolg); diese könnten etwa so aussehen:
Get Name, Vorname From Mitarbeiter Fetch Name, Vorname From Mitarbeiter Find Name, Vorname From Mitarbeiter Search Name, Vorname From Mitarbeiter
Und schließlich bekommt er mit der folgenden Eingabe keine Fehlermeldung, sondern ein Ergebnis:
Select Name, Vorname From Mitarbeiter
Die Liste ist ihm zu lang und unübersichtlich. Er will sie zunächst einmal sortieren und probiert Sortierung, Reihenfolge aus, bis es passt:
Select Name, Vorname From Mitarbeiter order by Name
Dann möchte er die Auswahl einschränken, nämlich auf die Mitarbeiter mit Anfangsbuchstaben 'A'. Wieder nach ein paar Versuchen weiß er, dass nicht WITH, sondern WHERE die Lösung liefert.
Select Name, Vorname From Mitarbeiter where Name < 'B'
Jetzt möchte er beide Abfragen verbinden:

Select Name, Vorname From Mitarbeiter order by Name where Name < 'B'

SQL error code = -104. Token unknown - line 1, column 53. WHERE.
Das kann doch nicht sein?! WHERE ist doch das richtige Verfahren für eine solche Einschränkung?! Kommt es etwa auf die Reihenfolge der Zusätze an?

Select Name, Vorname From Mitarbeiter where Name < 'B' order by Name

NAME VORNAME
Aagenau Karolin
Aliman Zafer
Welche Informationen sind denn sonst gespeichert? Er weiß auch (z. B. vom DIR-Befehl des Betriebssystems), dass ein Sternchen anstelle von alles gesetzt werden kann. Und siehe da, es klappt:
Select * From Mitarbeiter where Name < 'B' order by Name

ID PERSONALNUMMER NAME VORNAME GEBURTSDATUM TELEFON (und noch mehr)
13 60001 Aagenau Karolin 02.01.1950 0234/66006001 usw.
18 80002 Aliman Zafer 12.11.1965 0201/4012161 usw.
Prima, damit ist klar, wie Informationen aus der Datenbank geholt werden:
SELECT <Liste von Teilinformationen> FROM <Teil der Datenbank> WHERE <Bedingung> ORDER BY <Sortierung>
Neuaufnahme bei den Mitarbeitern
Als nächstes möchte der Geschäftsführer sich selbst als Mitarbeiter speichern. Schnell kommt er auf das „Grundgerüst“ des Befehls:
INSERT INTO Mitarbeiter VALUES
Wenn er danach seinen Namen schreibt, bekommt er wieder eine Fehlermeldung mit "token unknown". Er hat aber schon von der Benutzung von Klammern in der EDV gehört.

Insert into Mitarbeiter VALUES ('Webern', 'Anton')

SQL error code = -804.<br />
Count of read-write columns does not equal count of values.
Na gut, dann wird eben ausdrücklich angegeben, dass erstmal nur Name und Vorname einzutragen sind.

Insert into Mitarbeiter (Name, Vorname) VALUES ('Webern', 'Anton')

validation error for column PERSONALNUMMER, value "*** null ***".
Ach so, die Personalnummer muss angegeben werden, und vermutlich alles andere auch. Aber die ID ist doch gar nicht bekannt? Nun, immerhin sind wir auf diese Grundstruktur des Befehls gekommen:
INSERT INTO <Teil der Datenbank> [ ( <Liste von Teilinformationen> ) ] VALUES ( <Liste von Werten> )
SQL und natürliche Sprache
Offensichtlich sind die Befehle von SQL der natürlichen englischen Sprache nachempfunden. (Die englische Sprache hat wegen der klaren Satzstruktur und Grammatik insofern natürlich Vorteile gegenüber der komplizierten deutschen Syntax.)
SELECT für Abfragen
Um Daten abzufragen, gibt es den SELECT-Befehl mit folgenden Details:
SELECT wähle aus [ DISTINCT | ALL ] verschiedene | alle <Liste von Teilinformationen> FROM <Teil der Datenbank> aus [ WHERE <Bedingungen> ] wobei [ GROUP BY <Liste von Spalten> ] gruppiert durch [ HAVING <Bedingungen> ] wobei [ ORDER BY <Sortierung> ] sortiert durch
INSERT für Neuaufnahmen
Um Daten neu zu speichern, gibt es den INSERT-Befehl mit folgenden Details:
INSERT INTO <Teil der Datenbank> einfügen in [ <Liste von Teilinformationen> ] VALUES ( <Liste von Werten> ) Werte /* oder */ INSERT INTO <Teil der Datenbank> einfügen in [ <Liste von Teilinformationen> ] SELECT <Ergebnis einer Abfrage> durch eine Auswahl
UPDATE für Änderungen
Um Daten zu ändern, gibt es den UPDATE-Befehl mit folgenden Details:
UPDATE <Teil der Datenbank> aktualisiere SET <spalte1> = <wert1> [ , setze fest <spalte2> = <wert2> , usw. <spalten> = <wertn> ] [ WHERE <bedingungsliste> ]; wobei
DELETE für Löschungen
Um Daten zu löschen, gibt es den DELETE-Befehl mit folgenden Details:
DELETE FROM <Teil der Datenbank> lösche aus [ WHERE <bedingungsliste> ]; wobei
CREATE TABLE bei der Struktur einer Tabelle
Um eine neue Tabelle zu erstellen, gibt es den CREATE TABLE-Befehl mit folgenden Einzelheiten:
CREATE TABLE <Teil der Datenbank> erzeuge Tabelle ( <Spaltenliste>, <weitere Angaben> )
So einfach kann es gehen? Dann kann man doch auch eigene Daten erzeugen, speichern, abfragen und auswerten.
Zusammenfassung
Die einzelnen Teile der SQL-Befehle sind leicht verständlich; und es scheint nur wenige Befehle zu geben, die man als „Anfänger“ wirklich lernen muss. Natürlich kann man nicht sofort alle Möglichkeiten erfassen. Aber angesichts des begrenzten Umfangs und der klaren Struktur lohnt es sich, sich näher damit zu befassen. Dies will dieses Buch erleichtern.
Siehe auch
Wikipedia hat einen Artikel zum Thema SQL.
Weitere Informationen gibt es in folgenden Kapiteln: