Datenbankanfragen mit SQL Dipl.-Ing. D. Gerst Frühjahr 2005 SQL 1 KOMPONENTEN DER SPRACHE 2 1.1 1.1.1 1.1.2 1.1.3 1.2 1.3 1.4 1.5 2 2 2 2 2 3 3 3 GRUNDELEMENTE ZEICHEN LITERALE SCHLÜSSELWORTE DATENTYPEN PRÄDIKATE AGGREGATFUNKTIONEN ARITHMETISCHE UND BOOL’SCHE OPERATOREN 2 DATENDEFINITION (DDL) 4 2.1 ERZEUGEN LOGISCHER OBJEKTE 2.1.1 ERZEUGEN VON TABELLEN 2.1.2 ERZEUGEN VON SICHTEN 2.2 ÄNDERN VON LOGISCHEN OBJEKTEN 2.3 LÖSCHEN LOGISCHER OBJEKTE 4 4 4 5 5 3 DATENMANIPULATION (DML) 6 3.1 3.2 3.3 3.4 3.4.1 3.4.2 3.4.3 3.4.4 3.5 3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.6 3.6.1 3.6.2 3.6.3 3.7 DIE INSERT-ANWEISUNG DIE UPDATE-ANWEISUNG DIE DELETE-ANWEISUNG DIE EINFACHE SELECT-ANWEISUNG GRUNDFORM WHERE-KLAUSEL GROUP BY ... HAVING - KLAUSEL ORDER BY-KLAUSEL DIE KOMPLEXE SELECT-ANWEISUNG KARTESISCHES PRODUKT NATÜRLICHER VERBUND GLEICHHEITSVERBUND ALIAS UND UMBENENNUNG ÄUßERE VERKNÜPFUNGEN KOMBINATION UNABHÄNGIGER ABFRAGEN VEREINIGUNG (UNION) DURCHSCHNITT (INTERSECT) DIFFERENZ (EXCEPT) VERSCHACHTELTE ABFRAGEN 6 6 6 7 7 7 8 8 8 8 8 9 9 9 10 10 10 10 10 4 DATENKONTROLLE (DCL) 11 4.1 4.2 4.3 11 11 11 DIE GRANT-ANWEISUNG DIE REVOKE-ANWEISUNG WEITERE ANWEISUNGEN 1 SQL 1 Komponenten der Sprache 1.1 Grundelemente Als Grundelemente einer nichtprozeduralen Sprache bezeichnet man im allgemeinen: 1.1.1 Zeichen Zeichen sind die einfachsten Elemente einer Sprache. Zum Zeichensatz von SQL gehören ♦ ♦ ♦ ♦ Großbuchstaben Kleinbuchstaben Ziffern Sonderzeichen (incl. Leerzeichen) A, B, ..., Z a, b, ..., z 0, 1, ..., 9 %_,()<>.:=+-∗ 1.1.2 Literale Literale umfassen alphanumerische Konstanten (Zeichenketten) und numerische Konstanten (Ganz-, Festpunkt-, und Gleitkommazahlen mit oder ohne Vorzeichen). Zeichenketten stehen immer zwischen zwei Apostrophen. 1.1.3 Schlüsselworte Schlüsselworte sind reservierte Begriffe, die eine fest vorgegebene Bedeutung haben und deshalb nicht als Namen verwendet werden dürfen. Der SQL-Standard definiert folgende Schlüsselworte: ALL AND ANY AS ASC AUTHORIZATION AVG BEGIN BETWEEN BY CHAR CHARACTER CHECK CLOSE COBOL COMMIT CONTINUE COUNT CRATE CURRENT CURSOR DEC DECIMAL DECLARE DELETE DESC DISTINCT DOUBLE END ESCAPE EXED EXISTS FETCH FLOAT FOR FORTRAN FOUND FROM GO GOTO GRANT GROUP HAVING IN INDICATOR INSERT INT INTEGER INTO IS LANGUAGE LIKE MAX MIN MODULE NOT NULL NUMERIC OF ON OPEN OPTION OR ORDER PASCAL PLI PRECISION PRIVILEGES PROCEDURE PUBLIC REAL ROLLBACK SCHEMA SECTION SELECT SET SMALLINT SOME SQL SQLCODE SQLERROR SUM TABLE TO UNION UNIQUE UPDATE USER VALUES VIEW WHENEVER WHERE WITH WORK Die meisten DBMS bieten systemspezifische Erweiterungen dieser Liste an. 1.2 Datentypen Jede Spalte einer Tabelle muß einen Datentyp haben. Die in SQL standardisierten Datentypen können weiter klassifiziert werden in: ♦ Numerische Datentypen INTEGER oder INT SMALLINT DECIMAL (m, [n]) NUMERIC (m, [n]) FLOAT (n) REAL DOUBLE PRECISION - (231 – 1) <= x <= 231 - (215 – 1) <= x <= 215 mindestens m Stellen, davon n nach dem Komma exakt m Stellen, davon n nach dem Komma Fließkomma mit n Stellen = FLOAT mit systemabhängigem n = REAL mit größerem n 2 SQL ♦ Alphanumerische Datentypen CHARACTER (n) oder CHAR (n) CHARACTER VARYING (n) oder CHAR VARYING (n) oder VARCHAR (n) Zeichenketten mit fester Länge n Zeichenketten mit variabler Länge bis maximal n Zeichen ♦ Zeit- und Datumsangaben DATE Datum TIME Uhrzeit TIMESTAMP Datum und Zeit INTERVALL Zeitintervalle Zeit- und Datumsdatentypen sind erst mit SQL2 standardisiert worden, so daß viele Systeme noch ihre eigenen Formate benutzen. Mit SQL2 besteht zudem die Möglichkeit, eigene Datentypen als DOMAIN‘s zu definieren und zu benutzen. Dadurch können Standarddatentypen mit Voreinstellungen und Bedingungen verknüpft werden. 1.3 Prädikate Prädikate sind logische Bedingungen, die als Ergebnis TRUE, FALSE und UNKNOWN liefern können. Zu den Prädikaten zählen alle Vergleichsoperatoren sowie die andere Operatoren (BETWEEN, IN, LIKE, NULL...) auf die im Kapitel 3 ausführlicher eingegangen werden soll. 1.4 Aggregatfunktionen Aggregatfunktionen werden auf ausgewählte Daten einer Spalte angewendet. Die folgenden fünf Funktionen werden immer unterstützt: ♦ ♦ ♦ ♦ ♦ AVG MAX MIN SUM COUNT Mittelwert (Average) Maximum Minimum Summe Anzahl 1.5 Arithmetische und Bool’sche Operatoren Unäre arithmetische Operatoren sind + und – als Vorzeichen. Binäre arithmetische Operatoren sind +, -, ∗ und / als Addition, Subtraktion, Multiplikation und Division. Meist wird auch der Operator II zur Verkettung von Zeichenketten unterstützt. Als Bool’sche Operatoren können AND, OR und NOT für Konjunktion, Disjunktion und Negation verwendet werden. Die Wahrheitstabellen unter Einbeziehung des Ergebnisses UNKNOWN sollen hier noch einmal dargestellt werden: AND T U F T T U F U U U F F F F F OR T U F T R R R U R U U F R U F NOT T U F F U T 3 SQL 2 Datendefinition (DDL) Die meisten Systeme erlauben es, direkt den physikalischen Speicherbereich in Form von Partitionen, Clustern o.ä. zu beeinflussen. Darauf soll hier jedoch nicht weiter eingegangen werden, da diese Manipulationen nicht von unerfahrenen Anwendern vorgenommen werden sollten. Alle aufgeführten Anweisungen beschränken sich deshalb auf die Definition von logischen DB-Objekten. Zur Datendefinition zählen das Erzeugen, Verändern und Löschen von Objekten. 2.1 Erzeugen logischer Objekte Logische Objekte sind Datenbanken, Kataloge und Schemata sowie Tabellen und Sichten (Views) mit Spalten und Zeilen. Die Begriffe Katalog und Schema sind erst mit SQL2 eingeführt worden und gewinnen mit zunehmender Nutzung von physisch und logisch verteilten Datenbanken durch unterschiedliche Nutzergruppen an Bedeutung. Der Schwerpunkt soll deshalb auf Tabellen und Views liegen. An dieser Stelle muß auch der Begriff der Persistenz (Dauerhaftigkeit) von Objekten erwähnt werden, der in engem Zusammenhang mit dem Begriff der Session (Sitzung) steht. Die eigentlichen Daten werden nur in den sogenannten persistenten Basistabellen gespeichert. Aus diesen können abgeleitete Tabellen erzeugt werden, z.B. als Ergebnis einer Abfrage. In der Regel sind diese temporär, gehen also am Ende einer Session verloren. Views sind ebenfalls abgeleitete Tabellen, mit der Besonderheit, daß ihre Ableitungsvorschrift persistent in der Datenbank gespeichert wird. 2.1.1 Erzeugen von Tabellen Die SQL-Anweisung zum Erzeugen von Tabellen lautet: CREATE TABLE tabelle ( spaltenname Datentyp [NOT NULL], ... ) Für jede Spalte sind Bezeichnung und Typ anzugeben, zusätzlich kann mit NOT NULL festgelegt werden, daß die Spalte keine unbestimmten NULL-Werte beinhalten darf, was z.B. bei Schlüsselspalten erforderlich ist. 2.1.2 Erzeugen von Sichten Die SQL-Anweisung zum Erzeugen von Sichten lautet: CREATE VIEW Sicht [(Spaltenname, ...)] AS Select-Anweisung [WITH CHECK OPTION] Die Angabe der Spaltenbezeichnungen ist optimal. Fehlt diese, werden die Bezeichnungen aus den ausgewählten Tabellen übernommen. Die optimale Angabe von WITH CHECK OPTION hat nur bei veränderbaren Sichten Auswirkungen und überprüft, ob die vorzunehmende Änderung noch im „Sichtbereich“liegt. 4 SQL 2.2 Ändern von logischen Objekten Das Verändern von logischen Objekten ist im wesentlichen nur für Tabellen möglich. Deshalb soll hier auch nur die entsprechende SQL-Anweisung aufgeführt werden: ALTER TABLE tabelle ADD COLUMN spaltendefinition | ALTER COLUMN spaltenname SET DEFAULT ... | DROP DEFAULT | DROP COLUMN spaltenname Mögliche Veränderungen bestehen also darin, Spalten hinzuzufügen, deren Standardeinstellungen zu ändern oder Spalten ganz zu löschen. 2.3 Löschen logischer Objekte Logische Objekte können vollständig (d.h. sowohl die Beschreibung als auch die beinhalteten Daten!) aus einer Datenbank gelöscht werden. Für Tabellen und Sichten lauten die SQLAnweisungen: DROP TABLE tabelle DROP VIEW sicht bzw. Beim Löschen von Sichten werden keine Daten gelöscht, da es sich ja nur um abgeleitete (virtuelle) Tabellen handelt. 5 SQL 3 Datenmanipulation (DML) Die dem SQL-Sprachanteil Data Manipulation Language (DML) zugehörigen Anweisungen sind die am häufigsten verwendeten Anweisungen. Sie ermöglichen die Beeinflussung aller gespeicherten Daten. Grundlegende Operationen sind dabei Erzeugen, Verändern, Auswählen und Löschen. 3.1 Die INSERT-Anweisung Mit der INSERT-Anweisung können Daten in Tabellen eingetragen werden. Dabei können sowohl komplette Zeilen als auch nur Teile von Zeilen mit Werten belegt werden. Die einfache Form der INSERT-Anweisung lautet: INSERT INTO Tabelle [(Spaltenliste)] VALUES (Werteliste); Mit dieser Anweisung kann eine Zeile ganz oder teilweise mit Werten gefüllt werden. Die Datentypen der Werte in der Werteliste müssen mit denjenigen der zugehörigen Spalte übereinstimmen. Eine weitere Form der INSERT-Anweisung lautet: INSERT INTO Tabelle [(Spaltenliste)] SELECT-Anweisung; Die Angabe von VALUES wird hier durch das Ergebnis einer Auswahlabfrage ersetzt, so daß mit einer Anweisung mehrere Zeilen mit Werten gefüllt werden können. Voraussetzung ist natürlich, daß bereits Tabellen existieren, aus denen selektiert werden kann. Aus Gründen der Redundanzminderung sollten so auch nur temporäre Tabellen aufgebaut werden. 3.2 Die UPDATE-Anweisung Mittels der UPDATE-Anweisung können vorhandene Daten in Tabellen modifiziert werden. Die allgemeine Form lautet: UPDATE Tabelle SET Spalte=Ausdruck,[Spalte2=Ausdruck2,..] [WHERE Bedingung]; In den durch die Bedingung ausgewählten Zeilen werden die Werte in den angegeben Spalten aufgrund der Ausdrücke neu berechnet bzw. zugewiesen und eingetragen. Es kann nur eine Tabelle geändert werden. 3.3 Die DELETE-Anweisung Mit der DELETE-Anweisung werden Zeilen aus einer Tabelle gelöscht. Die allgemeine Form lautet: DELETE FROM Tabelle [WHERE Bedingung]; Die Bedingung gibt an, welche Zeilen aus der Tabelle gelöscht werden. Fehlt diese Bedingung, werden alle Zeilen einer Tabelle gelöscht! 6 SQL 3.4 Die einfache SELECT-Anweisung Die wohl wichtigste SQL-Anweisung ist die SELECT-Anweisung. Mit ihrer Hilfe können aus einer vorhandene Tabelle Datenwerte neu zusammengestellt werden. Das Ergebnis ist wiederum eine Tabelle. Es sollen zunächst einfache Abfragen betrachtet werden, die sich auf die Auswahl von Daten aus einer Tabelle beschränken. 3.4.1 Grundform Die allgemeine Form der SELECT-Anweisung lautet: SELECT [ALL | DISTINCT] Auswahlliste | ∗ FROM Tabelle [WHERE Bedingung] [GROUP BY Spaltenliste [HAVINGBedingung]] [ORDER BY Spaltenliste [ASC | DESC]]; Die einfachste, jedoch selten gebräuchliche SELECT-Anweisung lautet also: SELECT * FROM Tabelle; Das Ergebnis ist ein Duplikat der Tabelle. Wird DISTINCT angegeben, werden nur die Datensätze ausgewählt, die nicht doppelt bzw. mehrfach vorkommen. Interessant werden Auswahlabfragen durch die Fülle an Klauseln, die mit ihnen eingesetzt werden können. Auf diese einzelnen Klauseln soll nachfolgend etwas detaillierter eingegangen werden 3.4.2 WHERE-Klausel Mit Hilfe der in der WHERE-Klausel anzugebenden Bedingungen können die auszuwählenden Zeilen bestimmt werden. Zur Formulierung von Bedingungen können wiederum verschiedene Operatoren, die sg. Prädikate(*1.3), eingesetzt werden. Zu den wichtigsten Prädikaten zählen: • alle Vergleichsoperatoren = gleich <> ungleich > größer als < kleiner als >= größer gleich <= kleiner gleich Besonderheit: Vergleich mit unbestimmten (NULL-)Werten immer mit Schlüsselwort IS, also IS NULL oder IS NOT NULL • alle logischen Operatoren (*1.5) AND Konjunktion OR Disjunktion NOT Negation • IN und BETWEEN zur Festlegung von Wertebereichen IN (Werteliste) BETWEEN Anfang AND Ende • LIKE zur Mustersuche in Zeichenketten mit den Sonderzeichen % beliebige Zeichenfolge _ beliebiges Einzelzeichen Im SQL2-Standard werden noch eine Reihe weiterer Prädikate definiert, die in der Praxis jedoch durch Kombinationen der oben angegebenen ersetzt werden können oder selten gebraucht werden. 7 SQL 3.4.3 GROUP BY ... HAVING - Klausel Die GROUP BY-Klausel dient dem Zusammenfassen von ausgewählten Datensätzen. Die bereits in einer WHERE-Klausel angegebene Bedingung kann durch den Einsatz von HAVING nochmals spezialisiert werden. Sehr sinnvoll ist der Einsatz der GROUP BY-Klausel im Zusammenhang mit dem Gebrauch von Aggregatfunktionen (*1.4), da diese dann auf die gebildeten Gruppen operieren. 3.4.4 ORDER BY-Klausel Die ORDER BY-Klausel dient zum Sortieren ausgewählter Datensätze. Das Sortieren kann aufsteigend (ASC) oder absteigend (DESC) erfolgen. Sortiert werden kann nach den Einträgen in mehreren Spalten, die durch ihren Namen oder ihre Position in der Spaltenliste identifiziert werden können. 3.5 Die komplexe SELECT-Anweisung Als komplexe SELECT-Anweisung wird hier eine Auswahlabfrage bezeichnet, die Daten aus mehreren Tabellen zusammenstellt. Die Verknüpfungen von Tabellen werden allgemein als JOIN bezeichnet, wobei mehrere Arten unterschieden werden. Die allgemeine Form einer komplexen SELECT-Anweisung entspricht der einer einfachen, nur daß die Tabelle durch eine Tabellenliste bzw. den Verbund (join) von Tabellen ersetzt wird: SELECT [ALL | DISTINCT] Auswahlliste | ∗ FROM Tabellenliste | Tabellenverbund [WHERE Bedingung] [GROUP BY Spaltenliste [HAVINGBedingung]] [ORDER BY Spaltenliste [ASC | DESC]]; Die einfachste Form einer komplexen Abfrage lautet somit: SELECT * FROM Tabelle1, Tabelle2; Das Ergebnis dieser Abfrage ist das kartesische Produkt der beiden Tabellen, welches mit natürlichem Verbund und allen sogenannten Theta-Joins zu den inneren Verknüpfungen (INNER JOIN) von Tabellen gehören. 3.5.1 Kartesisches Produkt Eine andere Möglichkeit, das kartesische Produkt oder auch den CROSS JOIN zweier Tabellen zu erzeugen, ist die Anweisung: SELECT * FROM Tabelle1 CROSS JOIN Tabelle2; Durch die Angabe der Schlüsselworte CROSS JOIN wird das Ergebnis betont, ansonsten sind die Anweisungen äquivalent. Das Ergebnis ist eine Tabelle die alle Spalten beider Tabellen aufweist und in der jede Zeile von Tabelle1 mit jeder Zeile von Tabelle2 kombiniert worden ist. Das kartesische Produkt ist somit die Abfrage, die es erlaubt, beliebige Informationen in einer Datenbank zueinander in Beziehung zu setzen. 3.5.2 Natürlicher Verbund Beim kartesischen Produkt werden Spalten mit gleichen Bezeichnungen in beiden Tabellen auch doppelt in die Ergebnistabelle übernommen. Meist handelt es sich hier jedoch um Spalten, die z.B. in Tabelle1 als Primärschlüssel und in Tabelle2 als Fremdschlüssel für Einträge aus Tabelle1 angelegt worden sind. Diese Art des Verbundes wird als natürlicher Verbund oder NATURAL JOIN bezeichnet. Spalten mit gleichem Namen werden auf Gleichheit überprüft und nur einmal ausgegeben. Die Formulierung lautet: SELECT * | Spaltenliste FROM Tabelle1 NATURAL JOIN Tabelle2; 8 SQL 3.5.3 Gleichheitsverbund Eine alternative Formulierung, die die Verbundbedingung in der WHERE-Klausel berücksichtigt, lautet: SELECT * | Spaltenliste FROM Tabelle1, Tabelle2 WHERE Tabelle1.Spalte = Tabelle2.Spalte; Im Unterschied zum NATURAL JOIN werden hier jedoch die eigentlich gleichen Spalten doppelt ausgegeben, falls dies in der Spaltenliste nicht unterbunden wird. Der Vorteil ist, daß Beziehungen für Spalten mit unterschiedlichen Namen angegeben werden können. Ist die Beziehung wie hier gezeigt die Gleichheit der Spalten, spricht man auch von einem EQUI JOIN, wird allgemein ein Vergleichsoperator verwendet, spricht man von einem THETA JOIN. 3.5.4 Alias und Umbenennung In der gezeigten EQUI JOIN Anweisung werden die Spalten einer Tabelle durch den Ausdruck Tabelle.Spalte identifiziert. Dies ist in jeder Anweisung zulässig oder sogar erforderlich. Innerhalb einer Anweisung können auch Aliasnamen für Tabellen vergeben, sowie die Spalten der Ergebnistabelle benannt werden. Eine solche Anweisung lautet z.B.: SELECT t.spalte1 AS neuspalte1, ... FROM Tabelle1 [AS] t, Tabelle2 [AS] s WHERE t.spalte1 <= s.spalte3 ; Aliasnamen für Tabellen (z.B. als Abkürzung) werden also in der FROM-Klausel vergeben und müssen dann in allen anderen Klauseln der Anweisung benutzt werden. Das Schlüsselwort AS kann dabei optional benutzt werden. Eine Umbenennung von ausgewählten Spalten erfolgt immer durch Angabe des Schlüsselwortes AS und des neuen Namens in der Spaltenliste. 3.5.5 Äußere Verknüpfungen Bei den äußeren Verknüpfungen handelt es sich um den Verbund von Tabellen, wobei Zeilen aus Tabellen in das Ergebnis übernommen werden, die nicht den Verbundbedingungen genügen. Allgemein spricht man von OUTER JOIN, wobei noch zwischen vollständigem (FULL), linkem (LEFT) und rechtem (RIGHT) OUTER JOIN unterschieden wird. Die Anweisung lautet: SELECT * | Spaltenliste FROM Tabelle1 [FULL | RIGHT | LEFT] OUTER JOIN Tabelle2 WHERE ... Ein vollständiger äußerer Verbund besteht aus dem inneren Verbund und den übrig gebliebenen Zeilen aus beiden Tabellen, die dann jeweils mit NULL-Werten kombiniert werden. Bei einem linken äußeren Verbund werden nur die Restzeilen von Tabelle1 berücksichtigt, bei einem rechten die Restzeilen von Tabelle2. 9 SQL 3.6 Kombination unabhängiger Abfragen Die Ergebnisse von mehreren Auswahlabfragen könne durch Mengenoperationen zu einem Ergebnis zusammengefaßt werden. Auf zwei Mengen können die Operationen Vereinigung, Durchschnitt und Differenz angewendet werden, die ihre Widerspiegelung in den SQLSchlüsselworten UNION, INTERSECT und EXCEPT finden. Voraussetzung ist immer, daß die Spaltenanzahl in beiden Auswahlabfragen gleich ist und die Datentypen der korrespondierenden Spalten übereinstimmen. Falls die Ausgabe sortiert erfolgen soll, muß die ORDER BY-Klausel in Auswahlabfrage2 angegeben werden. 3.6.1 Vereinigung (UNION) Die allgemeine Formulierung zur Vereinigung von zwei Datenmangen lautet: Auswahlabfrage1 UNION [ALL] Auswahlabfrage2; Die optionale Angabe von ALL führt dazu, daß mehrfach vorhandene Zeilen auch mehrfach ausgegeben werden. 3.6.2 Durchschnitt (INTERSECT) Die Anweisung, um den Durchschnitt zweier Datenmengen zu ermitteln, lautet: Auswahlabfrage1 INTERSECT Auswahlabfrage2; Das Ergebnis ist eine Auswahl von Zeilen, die in beiden Abfragen vorhanden sind. 3.6.3 Differenz (EXCEPT) Die Anweisung für den Durchschnitt zweier Datenmengen lautet: Auswahlabfrage1 EXCEPT Auswahlabfrage2; Als Ergebnis entsteht die Menge aller Zeilen aus Abfrage1, ausgenommen diejenigen, die auch in Abfrage2 enthalten sind. Im Gegensatz zu Vereinigung und Durchschnitt sind hier die beiden Abfragen nicht mehr vertauschbar. In manchen DBMS wird auch das Schlüsselwort MINUS verwendet. 3.7 Verschachtelte Abfragen Auswahlabfragen können im Prinzip in beliebiger Tiefe verschachtelt werden, wobei wieder alle Prädikate und Mengenoperationen angewendet werden können. Die Formulierung solcher SUBQUERIES erfordert jedoch viel Erfahrung und Überblick über die jeweilige Datenbankstruktur und soll somit auch nicht mehr Gegenstand dieses Scriptes sein, welches ja als Einführung in die Thematik gedacht ist. Um eine Vorstellung zu vermitteln, hier ein einfaches Beispiel: SELECT Spaltenliste FROM Tabelle1 WHERE Ausdruck Operator ( SELECT Aggregatfunktion(Spalte) FROM Tabelle2 WHERE Bedingung ) UNION SELECT Spaltenliste FROM Tabelle3 WHERE Bedindung ORDER BY Spalte DESC; 10 SQL 4 Datenkontrolle (DCL) Die dritte große Gruppe von SQL-Anweisungen dienen im wesentlichen zur Verwaltung der Benutzerrechte eines DBMS. Im Vordergrund stehen dabei die Aspekte Datenschutz (Zugriffsrechte) und Datensicherheit (Konsistenz). Mit SQL2 ist der Vorrat dieser Anweisungen erweitert worden, was sicher auch im Zusammenhang mit der zunehmenden Bedeutung von Datenbanken und deren Einsatz in großen Unternehmen mit der daraus resultierenden Anzahl und Struktur von Benutzern steht. Im Rahmen dieses Scriptes soll auf die Problematik aber nur am Rande eingegangen werden, indem die wichtigsten Anweisungen zusammengefaßt werden. 4.1 Die GRANT-Anweisung Mit Hilfe der GRANT-Anweisung können an Benutzer eines DBMS globale Rechte vergeben werden. Die anweisung lautet: GRANT Rechte ON Datenbankobjekt TO Benutzer WITH GRANT OPTION Mögliche globale Rechte sind z.B. CONNECT, RESOURCE und DBA, lokale Rechte sind SELECT, DELETE, INSERT und UPDATE. Wird WITH GRANT OPTION angegeben, darf der Benutzer seine Rechte an andere Benutzer weitergeben. 4.2 Die REVOKE-Anweisung Die REVOKE-Anweisung entzieht den Benutzern die vergebenen Rechte. Allgemein lautet sie: REVOKE [GRANT OPTION FOR] Rechte ON Datenbankobjekt FROM Benutzer RESTRICT | CASCADE; Wird CASCADE angegeben, werden die Rechte auch allen Benutzern entzogen, die diese vom angegebenen Benutzer erhalten hatten. 4.3 Weitere Anweisungen Auf weitere Anweisungen, etwa zur Transaktionskontrolle und dem Sperren von Objekten, soll hier nicht mehr eingegangen werden. 11 SQL 5 Literaturverzeichnis [1] Marsch J., Fritze J.: SQL: Eine praxisorientierte Einführung Vieweg 1993, 3. verb. Auflage 1995 [2] Melton J., Simon A.R.: Understanding the new SQL: a complete guide Morgan Kaufmann Publishers, Inc. 1993 [3] Petkovic D.: SQL – die Datenbanksprache McGraw-Hill 1990 [4] Viescas, J.: SQL: Die relationale Datenbanksprache Vieweg 1989 [5] Date C.J.: A Guide to the SQL Standard Addison-Wesley 1989 12