Einführung in SQL: Ein Einstieg

Aus Wikibooks

Wechseln zu: Navigation, Suche


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.

Wikipedia-logo.png 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:

Crystal Clear app terminal.png SQL-Quelltext:

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:

Crystal Clear app terminal.png SQL-Quelltext:

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.

Crystal Clear app terminal.png SQL-Quelltext:

SELECT Name, Vorname FROM Mitarbeiter WHERE Name < 'B'

Jetzt möchte er beide Abfragen verbinden:

Crystal Clear action button cancel.png Crystal Clear app terminal.png SQL-Quelltext:

SELECT Name, Vorname FROM Mitarbeiter ORDER BY Name WHERE Name < 'B'

Crystal Clear app kscreensaver.png SQL-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?

Crystal Clear action apply.png Crystal Clear app terminal.png SQL-Quelltext:

SELECT Name, Vorname FROM Mitarbeiter WHERE Name < 'B' ORDER BY Name

Crystal Clear app kscreensaver.png SQL-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:

Crystal Clear app terminal.png SQL-Quelltext:

SELECT * FROM Mitarbeiter WHERE Name < 'B' ORDER BY Name

Crystal Clear app kscreensaver.png SQL-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, 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.

Crystal Clear action button cancel.png Crystal Clear app terminal.png SQL-Quelltext:

INSERT INTO Mitarbeiter VALUES ('Webern', 'Anton')

Crystal Clear app kscreensaver.png SQL-Ausgabe:  

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.

Crystal Clear action button cancel.png Crystal Clear app terminal.png SQL-Quelltext:

INSERT INTO Mitarbeiter (Name, Vorname) VALUES ('Webern', 'Anton')

Crystal Clear app kscreensaver.png SQL-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> )


[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.


Persönliche Werkzeuge