SQL - die Standard-Abfragesprache für Datenbanken 1. Die

Werbung
SQL - die Standard-Abfragesprache für Datenbanken
1. Die Geschichte von SQL
2. Die Struktur von SQL
SQL enthält alle Sprachelemente, um sämtliche Arbeiten durchzuführen, die beim Umgang mit einer
relationalen Datenbank anfallen, es können Anweisungen auf externer, konzeptioneller und interner
Ebene ausgeführt werden.
SQL ist relational vollständig, d. h. der Sprachumfang ist äquivalent zu dem der Rela tionenalgebra.
Alle bekannteren Systeme wie ORACLE, INFORMIX, aber auch SYBASE, INGRES, usw. bieten wie
bereits erwähnt den Sprachumfang gemäß dem ANSI-Standard, allerdings nur bis zum SQL-92 EntryLevel.
SQL unterscheidet im Kern drei große Befehlsgruppen:
Data Definition Language
Damit werden Anweisungen zur Datendefinition bezeichnet. Gemeint ist damit die Erzeugung und die
Festlegung der Struktur von Datenbankobjekten in einem Datenbankschema, ohne dass bereits Daten
gespeichert werden. Die mit diesen Anweisungen beschriebenen Strukturen werden im Data
Dictionary (Datenlexikon) des DBS festgehalten. Objekte, die erzeugt und definiert werden können,
sind z. B. Benutzer, Tabellen, Sichten, usw.
Diese Gruppe von Anweisung dient zur Manipulation von Daten. Der Name ist jedoch ein wenig
irreführend, denn es gibt in SQL vier Operationen, die man zur Datenmanipulationssprache zählt:
Data Manipulation Language
INSERT (Einfügen von Daten in die DB), UPDATE (Ändern vorhandener Daten) und DELETE
(Löschen gespeicherter Informationen). Diese drei Operationen werden auch zur Klasse der UpdateOperationen zusammengefasst.
Eine Sonderstellung nimmt die vierte Anweisung SELECT ein, da sie die Daten nicht im eigentlichen
Sinn manipuliert, sondern Auswertungen nahezu beliebiger Komplexität ermöglicht.
Hierunter fasst man im weiteren Sinne die Gruppe der Kontrollanweisungen, die in drei Bereiche
zerfällt:
Transaktionen: für Zwecke des Recovery und der Behandlung konkurrierender Zugriffe werden Funktionen zur Transaktionsverarbeitung angeboten.
Data Control Language
Sicherheit: diese wird zum einen mit dem Vie w-Konzept gewährleistet, zum anderen stehen aber auch
Anweisungen zur Verfügung, mit denen die Vergabe von Zugriffsrechten bzw. Privilegien an
Benutzer oder auf Objekten gezielt gesteuert werden kann.
Integrität: der Begriff Integrität bezieht sich auf die Korrektheit und Vollständigkeit der Daten. Zu
dieser Gruppe zählt man auch die Sprachelemente, mit de nen sich Integritätsbedingungen formulieren
lassen. Die Möglichkeiten des Standards SQL-92 sind im Full-Level weitaus größer (z. B. zentrale
DB-weite so genannte allgemeine Zusicherungen (assertions)) als dies in kommerziellen Systemen der
Fall ist.
Jedes System stellt aber auch eigene Erweiterungen zur Verfügung, die bei anderen
Datenbanksystemen nicht vorhanden sind. Bei der Verwendung nicht alltäglicher Anweisungen ist
also in jedem Fall ein Blick in das Handbuch erforderlich.
Diese Erweiterungen sind oft architekturbedingt: z. B. lassen sich mit der Anweisung CREATE
TABLESPACE die Struktur und Größe der Datenbank beeinflussen. Diese Anweisung ordnet sich
aber sowohl vom syntaktischen Aufbau als auch von ihrer Funktionalität her (es wird ein DB-Objekt
erzeugt) in die Systematik der anderen DDL Anweisungen ein, so dass wir Erweiterungen dieser Art
auch in den passenden Abschnitten behandeln.
Andere Funktionalitäten werden je nach Hersteller als eigene Dienstprogramme zur Verfügung gestellt
oder aber dem SQL-Sprachschatz hinzugefügt.
So werden bei ORACLE Daten aus dem UNIX-Filesystem mit eigenen Tools in die DB geladen oder
aus ihr entladen (SQLLOADER, EXPORT, IMPORT), bei INFORMIX hingegen existieren neben
dem Tool DBEXPORT auch die beiden im SQL-Interpreter verwendbaren Anweisungen LTNLOAD
bzw. LOAD. Auf derartige Spezialitäten kön-nen wir nicht eingehen.
Im folgenden werden die obigen Befehlsgruppen noch ein wenig detaillierter aufgelöst. Bestimmte
Erweiterungen oder Anweisungen für spezielle Anwendungen, die nicht in das Dreierschema passen,
erhalten einen eigenen Abschnitt. Zuvor ist jedoch eine Erläuterung der Begriffe, die bei der Arbeit
mit SQL-Anweisungen auftreten, sinnvoll.
(Datenbanken und SQL – Rechenzentrum Niedersachsen. 79f)
3. Wichtige Befehle und Zusammenhänge
SQL (Abk. für engl. structured query language): Weit verbreitete Sprache zur Definition und
Manipulation rela tionaler Datenbanken. SQL wurde in den 1970er-Jahren unter dem Namen SEQUEL
von der Firma IBM entwickelt. Eine Prototyp-Implementierung gelang etwa 1975. Anfang der 1980erJahre wurde SEQUEL dann zu SQL weiterentwickelt und ist heute als herstellerunabhängiger
Standard weitgehend akzeptiert.
Aus SQL-Sicht ist eine Relation eine mit einem Bezeichner versehene 2-dimensionale Tabelle mit
folgenden Eigenschaften:
- Jede Spalte (Attribut) besitzt einen eindeutigen Bezeichner (Attribut-name) und einen
Wertebereich.
- Alle Eintragungen in die Tabelle sind atomar, d. h., die Wertebereiche sind elementar (z.
B. t integer, boolean) und nicht weiter zerlegbar.
- Die Reihenfolge der Spalten ist irrelevant (R ist eine Menge).
- Alle Zeilen (Tupel) sind paarweise verschieden.
Eine relationale Datenbank ist dann eine Kollektion von (unterschiedlich benannten) Relationen.
Beispiel:
Definiert wird eine Datenbank über Tennisspieler, Turniere und Spielpläne (Abb. 1).
Hier kommen zwar gleiche Attributnamen vor, dies widerspricht jedoch nicht der obigen Regel, da sie
zu unterschiedlichen Relationen gehören. Ist eine Unterscheidung zwischen gleichen Attributnamen
unterschiedlicher Relationen notwendig, so fügt man in SQL den Relationennamen durch einen Punkt
getrennt hinzu, wie z. B.
Spieler.Name und Turnier.Name
zeigen.
Die Sprache SQL stellt für die Manipulation von relationalen Datenbanken Sprachelemente unter
anderem für folgende Operationen zur Verfügung:
- Definieren von Relationenschemata durch Angabe von Relationen, Attributnamen und
Wertebereichen der Attribute (CREATE TABLE ...),
- Einfügen von Tupeln in eine Rela tion (INSERT INTO...j,
- Löschen von Tupeln (DELETE FROM ... WHERE ...),
- Änderung von Attributwerten (update),
- Suchanfragen (queries).
Beispiel: Löschen aller Einträge des Spielers Becker aus der Spieler-Relation:
DELETE FROM Spieler WHERE Name='Becker'
Suchanfragen (querie.s): Die einfachste Form lautet:
SELECT (Ausdruck>,...
FROM (Relationenname>,...
WHERE (Bedingung>
Ein Ausdruck ist hie rbei zunächst entweder ein einzelner Attributname, ein arithmetischer Ausdruck
über Attributnamen, Konstanten und Grundfunktionen wie +, -, *, / usw. oder das Zeichen *. Mithilfe
des Sterns werden alle Attribute der Tupel angezeigt, die die Bedingung erfüllen.
Beispiele:
1. Gesucht: Die Nationalitäten aller Spieler
SELECT Nat FROM Spieler
Hier gibt das SQL-System die Nationalitäten aller Spieler aus, wobei Nationalitäten, denen mehrere
Spieler angehören, auch mehrmals ausgegeben werden (z. B. USA).
In die sen Fällen verwendet man besser die Anfrage
SELECT Dmit der SQL angewiesen wird, nur die überhaupt vorkommenden verschiedenen
Nationalitäten auszugeben.
2. Gesucht: Alle Informationen über die Spieler:
SELECT' FROM Spieler
Auswahl von Tupeln mit Bedingungen:
Mittels der WHERE-Klausel kann man Tupel auswählen, die bestimmte Bedingungen erfüllen.
Beispiel:
Gesucht: Alle Spieler aus Schweden und den USA:
SELECT Name,Nat FROM Spieler WHERE Nat='USA' OR Nat='S'
Verknüpfung von Relationen (Kreuzprodukt):
Häufig müssen bei einer Suchanfrage die Daten mehrerer Rela tionen miteinander gekoppelt werden.
Beispiel:
Gesucht: Zeiten, zu denen Mayotte spielt:
SELECT Turnier FROM Spielplan WHERE Name='Mayotte'
Die Ausgabe Wimbledon verwendet man nun als Parameter einer zweiten Anfrage:
SELECT Zeit FROM Turnier WHERE Name='Wimbledon'
Ausgabe: Juni.
Besser löst man dieses Problem durch Koppelung der beiden Relationen Spieler und Turnier:
SELECT Zeit
FROM Turnier, Spielplan WHERE Spielplan.Name= 'Mayotte'
AND Spielplan.Turnier= Turnier.Name
Hier sind zur Unterscheidung der beiden Attribute Name und Turnier in den Relationen Spielplan und
Turnier die vollen Namen mit Punktnotation zu verwenden.
Teilanfragen (engl. subqueries):
Als Bedingung innerhalb der WHERE-Klausel einer SELECT-Anfrage sind Bezüge auf die
Ergebnisse weiterer untergeordneter SELECT-Anfragen möglich. Die Ergebnisse der Teilanfragen
werden dann als implizite Relationen aufgefasst, die mit anderen Relationen verknüpft werden können
oder an die weitere Anfragen gerichtet werden können. Auf diese Weise lassen sich relativ
komplizierte Anfragen mit Querbezügen formulieren.
Beispiele:
1. Gesucht: Alle Spieler, die in Wimbledon spielen, und deren Nationalitäten:
SELECT Name,Nat FROM Spieler WHERE Name IN
(SELECT Name FROM Spielplan WHERE Turnier= 'Wimbledon')
Hier symbolisiert der IN-Operator das Elementsymbol E auf Mengen. Die Teilanfrage in Klammern
liefert also eine Menge von Namen, die als Parameter in die Hauptanfrage ein gehen.
2. Gesucht: Namen der Spieler, die die meisten Punkte besitzen:
SELECT Name,Punkte FROM Spieler
WHERE Punkte >= ALL (SELECT Punkte FROM Spieler)
Der Operator ALL symbolisiert den ∀ Quantor ("Für alle"-Quantor). Die WHERE-Bedingung ist also
erfüllt, wenn die Punktzahl des gesuchten Spielers größer oder gleich aller Punktezahlen ist, die die
Teilanfrage liefert.
(Duden der Informatik. 484 ff)
Herunterladen