Open Source im professionellen Einsatz
Linux-Magazin 04/2001

SQL kurz gefasst

Stets sollst du mich befragen

Der Einstieg in relationale Datenbanken kann einfacher sein als man denkt. Nach Erstellen des Datenmodells muss dieses in SQL übersetzt werden. Die folgenden zwei Seiten helfen SQL-Neulingen dabei.

1075

Die "Structured Query Language" SQL ist die Lingua franca der Datenbankwelt. Fast alle relationalen Datenbanken verstehen mittlerweile SQL, und auch für den Menschen ist es keineswegs schwer zu erlernen. Die Sprache stammt aus den Forschungslabors von IBM, wo sie schon in den siebziger Jahren entwickelt wurde. Seit 1992 gibt es einen gemeinsamen Standard der amerikanischen Standardisierungsbehörden ISO und ANSI: SQL-92. Die meisten hier im Heft vorgestellten Datenbanken halten sich an einen Substandard, nämlich Entry Level SQL-92.

Die Aufgaben von Datenbanksprachen zerfallen in zwei Teile: Das Erzeugen von Datenstrukturen (Datendefinition) und die Manipulation der Daten. Puristen unterscheiden deshalb auch zwischen "Data Definition Languages (DDL)" und "Data Manipulation Languages (DML)". SQL jedoch ist beides.

Wir werden deshalb im Folgenden auf beide Aspekte der Sprache eingehen. Als Beispiel soll das Datenmodell aus dem vorangegangenen Artikel "Daten-Bastelstube" dienen, das wir mit PostgreSQL umsetzen. Dabei kommt eine Version ab 7.0 zum Einsatz, ältere beherrschen noch keine Fremdschlüssel, die aber Bestandteil des Datenmodells sind.

Um uns der Datenbank verständlich zu machen, brauchen wir ein Front-end. Das ist hier im einfachsten Fall das Programm psql, es existieren jedoch auch einfache grafische oder Web-basierte Interfaces. Welches wir auch immer benutzen, beginnen müssen wir mit dem Aufbau einer Datenstruktur, sprich, mit dem Anlegen von Tabellen oder Relationen. Die einfachste Tabelle im Artikel "Datenbastelstube" ist Tabelle 5. So legen wir sie an:

CREATE TABLE hersteller( 
 vid INTEGER,
 vname VARCHAR(40),
 vadress VARCHAR(100),
 vcity VARCHAR(40),
 vzip VARCHAR(7),
 vtel VARCHAR(40),
 PRIMARY KEY (vid));

Die Syntax ist also einfach: Nach dem Namen ("Attribut" in Datenbanksprache) folgt der Datentyp, optional die Länge des Feldes. Anschließend legen wir noch optional fest, welches Attribut als Primärschlüssel dient. Alle Eingaben sind nicht von Groß- oder Kleinschreibung abhängig, die Großbuchstaben dienten hier nur der Unterscheidung von Befehlssyntax und Attributen. Jedes SQL-Kommando schließt mit einem Semikolon ab und kann sich über mehrere Zeilen erstrecken. Bei psql verändert sich dann der Prompt von datenbankname=> zu datenbankname(->, um anzuzeigen, dass der Befehl noch nicht abgeschlossen ist.

In der folgenden Relation PC tauchen zusätzlich zum Primärschlüssel noch ein Fremdschlüssel mit dem Schlüsselwort references und der Datentyp DATE auf:

create table PC (
 pcid integer,
 vid integer references hersteller,
 typ varchar,
 buydate date,
 primary key (pcid));

Da es hier nur um Syntax geht, sollen die beiden Tabellen genügen. Nun geht es daran, die Tabellen mit Inhalt auszustatten. Meist findet dabei der Befehl INSERT INTO Verwendung:

INSERT INTO hersteller VALUES ( 
   1,'Red Hat','Hauptstädter Straße 58',
   `Stuttgart','70178',
   '0711/964370');

Postgres hält außerdem den leider nicht standardkonformen Befehl COPY bereit, mit dem sich bequem Daten aus ASCII-Files einlesen lassen, die man beispielsweise aus einer Tabellenkalkulation exportiert hat.

Listing 1: Zwei kleine Tabellen, einfach abgefragt

osverwaltung=> select * from pc;
 pcid | vid |           typ |  buydate
------+-----+-------------------------+------------
    1 |   4 | Schreibtisch-PC | 20.01.1999
    2 |   4 | Schlepptop | 24.12.2000
    3 |   5 | Die fette Sun im Keller | 06.08.1992
(3 rows)  
osverwaltung=> select * from hersteller;
 vid |  vname |        vadress |    vcity | vzip |    vtel
-----+---------+------------------------+-------------+-------+-------------
   1 | Red Hat | Hauptstädter Straße 58 | Stuttgart | 70178 | 0711/964370
   2 | SuSE | Schanzäckerstraße 10 | Nürnberg | 90443 | 0911/740530
   3 | Caldera | Nägelsbachstraße 49c | Erlangen | 91025 | 09131/71920
   4 | IBM | Schöneicher Straße 220 | Böblingen | 71003 | 07031/160
   5 | Sun | Sonnenallee 1 | Heimstätten | 85551 | 089/460080
(5 rows)

Listing 2: Anwendung von SELECT

osverwaltung=> select typ, buydate from pc where vid =
osverwaltung-> (select vid from hersteller
osverwaltung(> where vname = `Sun');
           typ |  buydate
--------------------------+-----------
 Die fette Sun im Keller | 06.08.1992
(1 row)

Letztendlich sind es aber nicht die Möglichkeiten, Daten einzugeben, die Datenbanken auszeichnen, sondern die vielfältigen Abfragemöglichkeiten, im Fall von SQL mit der SELECT-Anweisung. Im einfachsten Fall erhält man mit SELECT * FROM tabelle; eine komplette Tabelle mit allen im Haushalt vorhandenen Rechnern und allen Herstellern, siehe Listing 1. Das genügt natürlich noch nicht. In Listing 2 steht daher eine etwas nützlichere Abfrage, die alle von Sun produzierten Rechner zusammen mit dem Kaufdatum ausgibt. Wie man sieht, ist es nur einer. Verschachtelte Abfragen sind in fast allen Datenbanksystemen möglich. In MySQL müssen sie jedoch anders nachgebildet werden; wie, das beschreibt der Vergleich von Postgres und MySQL in diesem Heft.

Die SELECT-Anweisung ist das Herzstück von SQL, und sie bietet unzählige Möglichkeiten: Sortieren nach bestimmten Kriterien, Gruppieren von Ergebnissen, Pattern Matching mit LIKE und vieles mehr, was den Rahmen des Artikels bei weitem sprengen würde. Hier soll nur noch kurz ein Beispiel angegeben werden, wie man Einträge mit einer Kombination von UPDATE und SELECT verändert, auch das gehört schließlich zum täglichen Brot einer Datenbank. Für den zugegeben etwas konstruierten Fall, dass wir von dem Rechner im Keller nur noch das Kaufdatum wissen, sich jetzt aber die Telefonnummer des Herstellers, den wir nicht kennen (nun ja...) geändert hat, können wir sie wie im Listing 3 aktualisieren.

Listing 3: UPDATE kombiniert mit SELECT

osverwaltung=> update hersteller SET vtel = '0190 677677' WHERE
osverwaltung-> vid =
osverwaltung-> (SELECT vid from pc where buydate = '06.08.1992');
UPDATE 1
osverwaltung=> select * from hersteller
osverwaltung-> ;
 vid |  vname |        vadress |    vcity | vzip |    vtel
-----+----------+-------------------------+---------------+-------+----------
   1 | Red Hat | Hauptstädter Straße 58 | Stuttgart | 70178 | 0711/964370
   2 | SuSE | Schanzäckerstraße 10 | Nürnberg | 90443 | 0911/740530
   3 | Caldera | Nägelsbachstraße 49c | Erlangen | 91025 | 09131/71920
   4 | IBM | Schöneicher Straße 220 | Böblingen | 71003 | 07031/160
   5 | Sun | Sonnenallee 1 | Heimstätten | 85551 | 0190 677677
(5 rows)

Zum Schluss noch zwei Möglichkeiten, Daten auch wieder loszuwerden. Ganze Tabellen entfernt man kurz und schmerzlos mit DROP tabelle; einzelne Zeilen mit DELETE, wobei ganz analog zu UPDATE Bedingungen festgelegt werden können. Ein einfaches Beispiel: Das Notebook ist verkauft, wir entfernen seine Repräsentation in der Datenbank:

DELETE FROM pc 
   WHERE typ = 'Schlepptop';

Es gibt auch hier allerlei Fallstricke zu beachten, vor allem das so genannte kaskadierende Löschen beim Einsatz von Fremdschlüsseln. Trotzdem sollten die wenigen Einblicke in SQL genügen, erste Gehversuche zu unternehmen und dann nach Bedarf tiefer einzusteigen. Die Materie kann spannender sein als man glaubt, und aus der Mode ist SQL trotz Objektorientierung und XML noch lange nicht. Literatur zum Thema SQL gibt es wie Sand am Meer. Im Kasten finden Sie eine kleine Auswahl. (uwo)

Infos

[1] SQL-Tutorium: http://dblabor.f4.fhtw-berlin.de/morcinek/sqltutor

[2] PostgreSQL-Homepage: http://www.postgresql.org

[3] Online Postgres-Datenbanken anlegen und "spielen": http://pgdemo.acucore.com

[4] G. Matthiessen, M. Unterstein: Relationale Datenbanken und SQL, Konzepte...Addison-Wesley, ISBN 3827315581

[5] H. Eirund, U. Kohl: Datenbanken leicht gemacht, Teubner, ISBN 3519026449

[6] B. Röhrig, Datenbanken mit Linux, C&L Verlag, ISBN 3932311329

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Findet Memo

    Ein Archiv für Texte und andere Dokumente in Office-Formaten ist mit Oracle relativ einfach zu realisieren: Die Datenbank stellt dafür einen ganzen Werkzeugkasten mächtiger Funktionen bereit.

  • 44 Servergebote

    Die Firmen-Homepage ist seit 11.20 Uhr auf Slashdot verlinkt, das neue Massenmailing soll raus und die Datenbank muss Umfragedaten in Rekordzeit ausspucken: Dieser Artikel erklärt, mit welchen Techniken der Server die Belastung übersteht.

  • Renntrimm

    Geschickte Konfiguration und Geschwindigkeits-optimierte SQL-Selects verbessern die Performance einer Datenbankanwendung ganz ohne zusätzliche teure Hardware merklich - demonstriert am Beispiel von Oracle-Datenbanken unter Linux.

  • MySQL-Tuning

    Heute sind Webdienste selten, bei denen nicht irgendwo eine MySQL-Datenbank mitwirkt. Manchmal entspricht ihr Durchsatz oder ihre Antwortzeit nicht den Erwartungen. Dieser Artikel zeigt, wie man bei MySQL Performanceprobleme in den Griff bekommt.

  • Webwehr

    Web Application Firewalls wehren bekannte Angriffe ab, bieten jedoch keinen Schutz vor den immer neuen Tricks der Cracker. Mod-Selinux schiebt ihnen den endgültigen Riegel vor.

comments powered by Disqus

Ausgabe 11/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.