Kleine Einf uhrung in SQL

Die Seite wird erstellt Sven-Aarge Ruf
 
WEITER LESEN
Kleine Einführung in SQL

                         c Clab-Team
             Institut für Computerlinguistik
                    Universität Zürich

                          Dez. 2008

                      Zusammenfassung

Die Structured Query Language, kurz SQL, ist eine Datenbank-
sprache, die sowohl zur Abfrage, als auch zur Manipulation von
Daten in einer relationalen Datenbank dient.
Kleine Einführung in SQL                                                                                  1

1    Voraussetzungen                                   Perl auf Basis des abstrakten Datenbank-Layers
                                                       DBI zwar möglich, aufgrund der unterschiedli-
Über das grundsätzliche Ziel des Einsatzes von       chen SQL-Implementierungen aber nur schwer
L SQL sollten Sie informiert sein, bevor Sie diese     zu realisieren ist.
Lerneinheit benützen, ansonsten werden keine
Kenntnisse vorausgesetzt.
                                                       4      Grundlegendes
2    Lernziel                                          In einer relationalen Datenbank werden Infor-
                                                       mationen in Tabellen gespeichert. Jede Tabelle
SQL ist relativ leicht zu erlernen. In dieser          speichert zu unterschiedlichen Datensätzen (ho-
Lerneinheit finden Sie eine kleine Einführung         rizontal) diverse Informationen (vertikal).
in die Sprache und ihre Verwendung. Die-               Ein Beispiel für eine Datentabelle:
se Einführung ist knapp und beschränkt sich
auf das Wesentliche, ist aber für einen Ein-
                                                                             Mitarbeiter
stieg ausreichend. Sie stammt von Markus Wolf,
                                                        MID      Nachname    Vorname       Standort      Gehalt
Böblingen. Das Original findet sich auf seiner
                                                        123      Wolf        Markus        Böblingen    30000
Website unter http://www.perlunity.de/                  456      Simpson     Homer         Springfield   120000
perl/datenbanken/sql.shtml.Am Schluss                   789      Schmidt     Werner        Bonn          75000
der Lerneinheit finden Sie eine ILAP, in der Sie
das Gelernte vertiefen können. Sie sollten nach       Um Daten in diese Tabelle einzugeben, zu
Durcharbeiten dieser Lerneinheiten einfache L          ändern, zu löschen und abzufragen, kann man
Anfragen an ebenso einfache Datenbanken feh-           die Structured Query Language, kurz SQL, ver-
lerlos in SQL formulieren können. Sie sollten         wenden.
ausserdem die Probleme erkannt haben, wel-                 Unser Streifzug durch SQL beginnt bei einfa-
che sich beim Umsetzen von natürlichsprachlich        chen Abfragen über eine Tabelle, Abfragen mit
formulierten Informationsbedürfnissen in SQL          Kriterien und schliesslich Abfragen über meh-
ergeben.                                               rere Tabellen, so genannte Joins. Abschliessend
                                                       werden die Daten einer Tabelle manipuliert, d.h.
                                                       Daten werden
3    Einleitung
                                                       • hinzugefügt,
Die Structured Query Language, kurz SQL,
                                                       • geändert, und
wird verwendet, um relationale Datenbanken
anzusprechen. SQL ist sehr umfangreich und             • gelöscht.
umfasst nicht nur Anweisungen und Befehle
zum Abfragen der Daten - wie man aus dem
Namen schliessen könnte - sondern auch die
                                                       5      Abfragen mit SELECT
Möglichkeiten, Daten zu ändern oder die Daten-
                                                       Eine Abfrage dient dem Suchen und Anzeigen
bank selbst zu beschreiben. Somit kann man mit
                                                       von vorhandenen Daten. Dies geschieht in SQL
SQL so ziemlich alle Aufgaben erledigen, die
                                                       immer mit dem SELECT-Befehl.
zur Administration und Benutzung von Daten-
                                                           Wir wollen aus der Beispieltabelle Mitarbei-
banken anfallen.
                                                       ter den Namen und Standort aller Mitarbeiter er-
    Hier sei noch erwähnt, dass es einen SQL-
                                                       fahren:
Standard gibt, an dem sich die Datenbankher-
steller leider nur orientieren, aber sich nicht dar-   SELECT Nachname, Vorname, Standort
an halten. Dies hat zur Folge, dass eine da-           FROM Mitarbeiter;
tenbankunabhängige Software-Entwicklung mit           So sieht das Ergebnis aus:
Kleine Einführung in SQL                                                                           2

        Nachname       Vorname   Standort         SELECT Nachname
        Wolf           Markus    Böblingen       FROM Mitarbeiter
        Simpson        Homer     Springfield      WHERE Gehalt >= 50000;
        Schmidt        Werner    Bonn             die folgenden Datensätze zurückgeliefert:
Was genau haben wir getan: Wir haben uns alle                         Nachname
Mitarbeiter aus der Tabelle Mitarbeiter zur An-
                                                                      Simpson
sicht ausgewählt, und zwar deren Namen und
                                                                      Schmidt
Standort. Die Mitarbeiter-Nummer (MID) haben
wir dabei ausser Acht gelassen.                   Es wurden also alle Mitarbeiter, deren Gehalt
Eine Abfrage funktioniert generell also so:       gleich ist oder über 50000 liegt, ausgewählt. Ein
                                                  anderes Beispiel:
SELECT SpaltenName, SpaltenName, ...
FROM TabellenName;                                SELECT Gehalt
                                                  FROM Mitarbeiter
Um alle Informationen, die in einer Tabelle ge-   WHERE Nachname = ’Simpson’;
speichert sind, zu sehen, benutzt man folgenden
                                                  Das Resultat:
Ausdruck:
                                                                       Gehalt
SELECT *
                                                                       120000
FROM TabellenName;

                                                  7    Mehrere Kriterien in einer
6     SELECT mit Abfragekriteri-
                                                       Abfrage
      en
                                                  Man kann Kriterien mit logischen Operato-
Um eine Abfrage durchzuführen, die nicht         ren verknüpfen, und damit sehr detaillier-
alle Datensätze in der Tabelle zurückliefert,   te und aussagekräftige Abfragen durchführen.
benötigen wir Abfragekriterien. Anhand dieser    Beispiel:
Kriterien werden die Datensätze gefiltert. Die
                                                  SELECT Nachname, Vorname
allgemeine Form einer Abfrage mit Kriterien:
                                                  FROM Mitarbeiter
SELECT SpaltenName,SpaltenName, ...               WHERE Gehalt > 50000 AND Standort
FROM TabellenName                                                         != ’Springfield’;
WHERE Kriterium
                                                      Wie man im Resultat sieht, wäre Homer
     Der Aufbau des Kriterienausdrucks leitet     Simpson aufgrund seines Gehaltes, das grösser
sich von der relationalen Algebra ab. Folgende    als 50000 ist, im Resultat enthalten, allerdings
Operatoren gibt es in SQL, um vergleichende       wurde sein Standort Springfield als Ausschlus-
Ausdrücke zu bilden:                             skriterium angegeben:

=                     gleich                                   Nachname      Vorname
 oder !=            nicht gleich                             Schmidt       Werner
<                     kleiner als
                                                      Die beiden Kriterien wurden mit AND ver-
>                     grösser als
                                                  knüpft, das entspricht dem logischen UND (∧).
=                    grösser als oder gleich
                                                  drückt.
Aus der Tabelle Mitarbeiter werden mit der Ab-        Eine andere Möglichkeit, Aussagen mitein-
frage                                             ander zu verknüpfen, bieten die Schlüsselwörter
Kleine Einführung in SQL                                                                              3

IN und BETWEEN. IN wird verwendet, um in            Das Resultat dieser Anfrage mit LIKE lautet:
Spalten, die Zeichenketten beinhalten, eine L
                                                                        Nachname
Menge von möglichen Kriterien anzugeben. Für
die folgende SQL-Anfrage werden Nachname                                Schmidt
und Vorname eines Datensatzes zurückgeliefert,                         Simpson
wenn die in der Klammer angegebene Zeichen-
                                                        Das Prozentzeichen in der Anfrage ist da-
kette (nach IN) in der Spalte Standort des Daten-
                                                    bei als Wildcard zu sehen, repräsentiert also al-
satzes vorhanden ist.
                                                    le möglichen Zeichenfolgen. Im Folgenden noch
SELECT Nachname, Vorname                            ein paar Beispiele für den Einsatz von Wild-
FROM Mitarbeiter                                    cards: ’Home%’, ’%ome%’, ’%omer’.
WHERE Standort IN (’Böblingen’, ’Bonn’);

Das Resultat dieser Anfrage lautet also:            8    Schlüssel und Indizes
               Nachname     Vorname                 Damit man dieselben Daten nicht mehrmals
               Wolf         Markus                  in unterschiedlichen Tabellen speichern muss,
               Schmidt      Werner                  werden sie indiziert. Dazu bekommt ein Da-
                                                    tensatz in einer Tabelle einen Primärschlüssel
Für Zahlenwerte gibt man ein Zahlenintervall       (primary key). Dieser besteht aus einer oder
mit BETWEEN an:                                     mehreren Spalten. Auf jeden Fall muss der
SELECT Nachname, Vorname                            Primärschlüssel eines Datensatzes in dieser Ta-
FROM Mitarbeiter                                    belle eindeutig sein, d.h. es darf keinen anderen
WHERE Gehalt BETWEEN 20000 AND 50000;               Datensatz mit demselben Schlüssel geben.
                                                        Man spricht von einem Fremdschlüssel (for-
Das Resultat dieser Anfrage mit BETWEEN lau-        eign key) bei einer Tabellenspalte, die in einer an-
tet:                                                deren Tabelle ein Primärschlüssel ist. Das heisst,
               Nachname     Vorname                 die beiden Tabellen haben miteinander zu tun,
                                                    ihre Datensätze sind untereinander verknüpft.
               Wolf         Markus
                                                    Für die im nächsten Kapitel behandelten Join-
       Man kann den ganzen Ausdruck mit NOT         Beispiele gelten folgende Beispieltabellen:
negieren, es werden also die Datensätze abge-
fragt, die nicht diesen Kriterien entsprechen:

SELECT Nachname, Vorname
FROM Mitarbeiter
WHERE Standort NOT IN (’Böblingen’, ’Bonn’);

Das Resultat dieser Anfrage mit NOT IN lautet:

               Nachname     Vorname
               Simpson      Homer

       Und damit bekommen wir bei dieser Ab-
frage wieder Homer Simpson. Ein weiteres
Schlüsselwort ist LIKE:

SELECT Nachname
FROM Mitarbeiter
WHERE Vorname LIKE ’H%’;
Kleine Einführung in SQL                                                                                               4

                                                           Artikel
                                          ArtikelNr.       Bezeichnung          Preis
                                          0010             Kaffeebecher         5
                                          0020             T-Shirt              20
                                          0030             Mütze               10
                                          0040             Sweatshirt           45

                                                           Kunden
                     KundenNr.      Nachname       Vorname           Strasse               Stadt
                     99100          Meier          Richard           Hauptstr. 1           70000 Stuttgart
                     43689          Banner         Werner            Moosweg 5             12334 Aachen
                     32074          Zeller         Stefanie          Zollstr. 41           09137 Grenzdorf
                     77077          Schwarz        Eugen             Bahnhofstr. 13        83990 Fulda

                                                         Bestellungen
                                   BestellNr.    KundenNr.           ArtikelNr.       Menge
                                   1234          99100               0020             5
                                   3645          43689               0010             16
                                   1234          99100               0040             2
                                   9834          32074               0030             9

     In diesem Beispiel hat eine Bestellung zwei                            als Fremdschlüssel gespeichert, und dadurch
Fremdschlüssel: zum einen einen Käufer über                              weiss ich, welcher Kunde welche Bestellung
die Kundennummer, zum anderen einen Arti-                                   aufgegeben hat.
kel über die Artikelnummer. Wichtig ist, dass in
                                                                         Und damit ins Geschehen: wir wollen alle Be-
dieser Tabelle kein Primärschlüssel vorhanden
                                                                         stellungen sehen, die Herr Meier aufgegeben
ist. Die Bestellnummer kommt doppelt vor, wie
                                                                         hat:
man sieht. Mit diesen Tabellen werden wir nun
kompliziertere Abfragen durchführen: Joins.                             SELECT BestNr, ArtikelNr, Menge
                                                                         FROM Bestellungen, Kunden
                                                                         WHERE Bestellungen.KundenNr =
9     Joins                                                                    Kunden.KundenNr AND
                                                                                     Nachname = ’Meier’;
Es gibt zwei Voraussetzungen, um miteinander
in Verbindung stehende Tabellen optimal einzu-                           Zu beachten ist in der WHERE-Klausel die No-
setzen:                                                                  tation TabellenName.Spaltenname. Dadurch wer-
                                                                         den die Spalten aus den beiden Tabellen nicht
1. Redundanzfreiheit: Dieselben Daten dürfen
                                                                         verwechselt. Das Ergebnis sieht so aus:
    nicht doppelt in unterschiedlichen Tabellen
    gespeichert werden. Es wäre beispielweise                                                  Bestellungen
    überflüssig, in der Tabelle Bestellungen die Da-                                Bestnr.      Artikelnr.   Menge
    ten des Kunden zu speichern, da diese bereits                                     1234         0020         5
    in der Tabelle Kunden erfasst wurden.                                             1234         0040         2
2. Schlüssel: Woher weiss ich, welcher Kun-                                   Es gibt Kunden, die noch keine Bestellung
    de zu welcher Bestellung gehört? Seine                              aufgegeben haben. Die aber, die schon einmal
    KundenNr, die in der Tabelle Kunden der                              etwas bestellt haben, sollen einen Bonus bekom-
    Primärschlüssel ist, wird in der Bestellung                        men. Dazu wollen wir herausfinden, wer das ist:
Kleine Einführung in SQL                                                                           5

SELECT DISTINCT Kunden.KundenNr,                   • COUNT(*): Liefert die Anzahl der Datensätze,
                            Nachname, Vorname        die den Abfragekriterien entsprechen
FROM Bestellungen, Kunden
                                                   Ein paar Beispiele:
WHERE Bestellungen.KundenNr
         = Kunden.KundenNr                         SELECT SUM(Menge), AVG(Menge)
         ORDER BY Nachname, Vorname;               FROM Bestellungen

     Normalerweise würde Herr Meier im Ergeb-     Berechnet die Anzahl der Artikel, die bestellt
nis zweimal auftauchen, da er ja zwei Bestellun-   wurden, sowie die durchschnittliche Anzahl, die
gen aufgegeben hat. Mit dem Schlüsselwort DI-     von einem Artikel bestellt wurde.
STINCT wird das aber vermieden, er taucht nur
einmal auf. DISTINCT filtert also Duplikate un-    SELECT MAX(Menge), MIN(Menge)
ter den angeforderten Datensätzen heraus. Um      FROM Bestellungen
noch eins draufzusetzen, haben wir das Ergeb-
                                                   Liefert die Bestellung mit der grössten Menge
nis nach Nachnamen und Vornamen sortieren
                                                   und diejenige mit der kleinsten Menge von Ar-
lassen, und zwar durch ORDER BY. Das Ergeb-
                                                   tikeln .
nis dieser Anfrage sieht so aus:
                                                   SELECT COUNT(*)
                       Kunden
                                                   FROM Bestellungen
       Kundennr.       Nachname     Vorname
                                                   WHERE Menge > 10
       43689           Banner       Werner
       99100           Meier        Richard        Zählt alle Bestell-Positionen, bei denen mehr als
       32074           Zeller       Stefanie       10 Stück von einem Artikel bestellt wurden.

Dies also eine kleine Einführung in die Joins,
damit kommt man schon mal weit. Natürlich         11     Daten manipulieren
geht’s aber noch weitaus komplexer.. Wer
                                                   Mit Abfragen lassen sich die Informationen
sich dafür interessiert, bzw. tiefer einsteigen
                                                   in einer Datenbank nach Belieben sortieren
will, findet z.B. bei Wikipedia (http://en.
                                                   und anzeigen. Wie kommen die Daten aber in
wikipedia.org/wiki/SQL mehr Informatio-
                                                   die Datenbank? Wie werden sie geändert und
nen.
                                                   gelöscht? Mit SQL geht das relativ einfach. Als
                                                   Beispiel gilt die Tabelle Artikel mit den Spalten
10     Funktionen                                  ArtikelNr, Bezeichnung und Preis.

5 wichtige Funktionen, die in SQL eingebaut
                                                   11.1       Daten hinzufügen
sind, sollen hier erläutert werden:
                                                   Zuerst fügen wir einen Datensatz in die Tabelle
• SUM(SpaltenName): Addiert alle Werte in die-     Artikel hinzu:
  ser Spalte, wenn es Zahlenwerte sind
                                                   INSERT INTO Artikel
• AVG(SpaltenName): Berechnet das arithmeti-
                                                   VALUES (’0090’,’duschvorhang’,44.95);
  sche Mittel der Werte dieser Sparte
                                                        In diesem Fall wird ein neuer Datensatz in
• MAX(SpaltenName): Liefert den grössten Wert
                                                   die Tabelle eingefügt. Man kann die Reihenfol-
  dieser Spalte
                                                   ge der Werte auch verändern, dann muss aber
• MIN(SpaltenName): Liefert den kleinsten Wert     auch angegeben werden, welche Spalten man
  dieser Spalte                                    meint. Dabei lassen wir dieses Mal den Preis mal
                                                   aus, weil er noch nicht feststeht (auslassen kann
Kleine Einführung in SQL                                                                           6

man alles, ausgenommen die Primärschlüssel,       Lerneinheit, die Formulierung relativ einfacher
die immer vorhanden sein müssen - in diesem        Anfragen in SQL üben. Hier sollen Sie also SQL
Fall ist dies die ArtikelNr).                       “in Isolation” erlernen.
                                                    (ILAP) Praktische Einführung in SQL
INSERT INTO Artikel
                                                       In der zweiten ILAP wird das Augenmerk
            (Bezeichnung, ArtikelNr)
                                                    auf das Verhältnis zwischen natürlichsprachlich
VALUES (’duschvorhang’,’0090’);
                                                    formulierten Informationsbedürfnissen und den
                                                    entsprechenden Eingaben in SQL gelegt. Hier
11.2    Daten ändern                               sollen Sie Ihr Gefühl dafür schärfen, wo SQL
Wenn wir den Preis leergelassen haben, können      einfacher ist als Englisch, und wo es sich umge-
wir ihn natürlich nachträglich einfügen, indem   kehrt verhält:
wir einen bestehenden Datensatz ändern:            (ILAP) SQL und natürliche Sprache

UPDATE Artikel
SET Preis = 44.95
WHERE ArtikelNr = ’0090’;

Dies ist natürlich auch möglich, wenn die zu
ändernden Daten bereits bestehen, und auch,
wenn es mehrere sind:

UPDATE Artikel
SET Preis = 44.95
WHERE Preis = 49.95

Dadurch werden alle Artikel, die bisher 49.95
gekostet haben, nun billiger.

11.3    Daten löschen
Zu guter Letzt wollen wir die Daten wieder
löschen:

DELETE FROM Artikel
WHERE ArtikelNr = ’0090’;

     Damit wird genau ein Datensatz gelöscht,
nämlich der Duschvorhang, den wir vorhin ein-
gefügt haben. Um alle Duschvorhänge, die in
der TabelleArtikel gespeichert sind, zu löschen,
gehen wir wie folgt vor:

DELETE FROM Artikel
WHERE Bezeichnung = ’duschvorhang’;

12     ILAPs zu SQL
Sie finden im folgenden zwei ILAPs. In der er-
sten werden Sie, anhand der Beispiele in dieser
Sie können auch lesen