Ein Einstieg

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Seitentitel: Einführung in SQL: Ein Einstieg
(Einführung in SQL: Ein Einstieg)


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[Bearbeiten]

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[Bearbeiten]

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:

Red x.svg Gleichzeitig Sortierung und Einschränkung
Select Name, Vorname From Mitarbeiter order by Name where Name < 'B'
Crystal Clear app terminal.png Ausgabe
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?

Check-green.svg Zuerst Einschränkung, dann Sortierung
Select Name, Vorname From Mitarbeiter where Name < 'B' order by Name
Crystal Clear app terminal.png Ausgabe
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
Crystal Clear app terminal.png Ausgabe
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[Bearbeiten]

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.

Red x.svg Fehler
Insert into Mitarbeiter VALUES ('Webern', 'Anton')
Crystal Clear app terminal.png Ausgabe
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.

Red x.svg Fehler
Insert into Mitarbeiter (Name, Vorname) VALUES ('Webern', 'Anton')
Crystal Clear app terminal.png Ausgabe
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[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]

Wikipedia hat einen Artikel zum Thema SQL.

Weitere Informationen gibt es in folgenden Kapiteln: