Einführung in SQL: Ein Einstieg
Aus Wikibooks
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.
Inhaltsverzeichnis |
[Bearbeiten] 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.
[Bearbeiten] 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
Auf Englisch probiert er (mit ein paar Synonymen) also so etwas aus:
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 keine Fehlermeldung, sondern ein Ergebnis:
Die Liste ist ihm zu lang und unübersichtlich. Er will sie zunächst einmal sortieren und probiert Sortierung, Reihenfolge aus, bis es passt:
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.
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, er weiß also jetzt, wie er Informationen aus der Datenbank holt:
SELECT <Liste von Teilinformationen> FROM <Teil der Datenbank> WHERE <Bedingung> ORDER BY <Sortierung>
[Bearbeiten] 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. 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> )
[Bearbeiten] 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.)
[Bearbeiten] SELECT für Abfragen
Um Daten abzufragen, steht der SELECT-Befehl zur Verfügung mit folgenden Details:
SELECT wähle aus
[ DISTINCT | ALL ] verschiedene | alle
<Liste von Teilinformationen>
FROM <Teil der Datenbank> aus
[ WHERE <Bedingungen> ] wobei
[ GROUP BY <Sortierung> ] gruppiert durch
[ HAVING <Bedingungen> ] wobei
[ ORDER BY <Liste von Spalten> ] sortiert durch
[Bearbeiten] 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
[Bearbeiten] 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
[Bearbeiten] 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
[Bearbeiten] 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.
[Bearbeiten] 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.