Datenbankanfragen mit SQL - FST

Werbung
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
Herunterladen