Beispiel - cig.ase.ro

Werbung
Unterabfragen (Subqueries)
Die kürzeste Formulierung ist folgende:
SELECT Felderliste FROM Tabelle1
WHERE Tabelle1.Feldname Operator
(SELECT Feldname
FROM Tabelle2
WHERE Bedingung);
wobei Tabelle1 und Tabelle2 ein
Beziehungsfeld (Feldname) haben.
Die Basisoperatoren sind:
• Vergleichsoperatoren :
>=, <, =, >, >=, <> (ungleich);
• IN
• NOT
• ANY
• SOME
• ALL
• EXISTS
Beispiel :
Man ermittelt Namen und Einwohnerzahl aller
Hauptstädte.
Bemerkung: Haupstadt ist ein Attribut der
Relation LAND und Einwohnerzahl ist ein
Attribut der Relation STADT. Man wird deshalb
die Abfrage in zwei Schritten lösen.
SELECT Name, Einwohner FROM Stadt
WHERE Name IN
( SELECT Hauptstadt FROM Land;);
Beispiel :
Ist in der Bibliothek mindestens ein Buch im
Bereich der Informatik vorhanden ?
SELECT * FROM Bücher
WHERE Bereich = ANY
(SELECT Bereich FROM Bücher
WHERE Bereich = „Informatik“);
ANY und SOME haben die selbe Rolle wie der
Operator IN; der Vergleich ist wahr, wenn er
für wenigstens einen einzigen Tupel bestätigt
werden kann.
Mit dem Operator ALL, ist der Vergleich
wahr, wenn er für alle Tupel bestätigt werden
kann.
Beispiel :
Man entziehe die Informationen, betreffend die
Nummer und das Datum des Dokumentes, die
Kode des Produktes und die MWSt für alle
Produkte, dessen MWSt grösser als die MWSt
des Produktes mit der Kode 1222 ist.
SELECT Nr, Datum, Kode, MWSt
FROM Rechnungen
WHERE MWSt > ALL
(SELECT MWSt FROM Rechnungen
WHERE Kode = 1222);
Beispiel:
Man entziehe die Liste der Bücher die
ausserhalb der Hauptstadt geliefert
werden.
SELECT * FROM Bücher
WHERE Ort <>ALL (SELECT Ort FROM
Bücher WHERE Ort =“Bukarest“);
Hier ist der Operator <> ALL derselbe wie
der Operator NOT IN.
Der Operator EXISTS benutzt die Unterabfragen als
Bedingung. Man analysiert die Ergebnisse der
Unterabfragen. Im Falle wo keine Tupel im Ergebnis
vorkommen, wird der Wert „False“ angezeigt.
Beispiel:
Gibt es in der Bibliothek Bücher die nach dem Jahr
1995 veröffentlicht wurden?
SELECT * FROM Bücher
WHERE EXISTS
(SELECT* FROM Bücher WHERE Jahr > 1995);
Vereinigung von Ergebnistabellen
Der Befehl ist:
SELECT Felderliste FROM Tabelle1
UNION SELECT Felderliste FROM Tabelle2
[GROUP BY Gruppierungsfeld]
[HAVING Gruppierungskriterium]
[UNION SELECT Felderliste FROM Tabelle3
[GROUP BY Gruppierungsfeld]
[HAVING Gruppierungskriterium]]
[UNION…]
[ORDER BY Sortierungskriterium];
Beispiel: Ermittelt die Namen aller Städte und Länder:
SELECT Name FROM Stadt
UNION
SELECT Name FROM Land;
Datenbank–Änderungen. Das Einbringen von Daten.
Die Daten können externe Daten oder Daten aus anderen
Relationen sein.
a) Einbringen von externen Daten.
Der Befehl ist :
INSERT INTO Tabellenname (Attributname1, …, Attributnamek)
VALUES (Wert1, …, Wertk);
Beispiel.
INSERT INTO Konto
VALUES („Frankfurter Str.“, 1234, „Meier“, 10000);
Diese Methode ist nur für kleinere Datenmengen geeignet.
b) Kopieren von Daten aus anderen Relationen.
Der Befehl ist:
INSERT INTO Tabelle(Feld1, …)
SELECT Felderliste
FROM Tabelle1 [, …Tabellek]
[WHERE Bedingung]
[ORDER BY …];
Beispiel:
INSERT INTO Konto
SELECT Filiale, Kredit, Kname, 200
FROM Kredit
WHERE Filiale = „Frankfurter Str.“;
Bemerkung. Dieser Befehl ist wichtig auch für die
Reorganisierung einer Tabelle. Bei der Reorganisation
werden die Daten physisch kopiert, um in eine andere
Struktur umgeformt zu werden. Eine Möglichkeit bietet
sich durch das Anlegen temporärer Relationen und
Umkopieren der Daten.
Schematisch sind dazu folgende Schritte
notwendig:
•
Eine temporäre Tabelle mit neuer Struktur anlegen
(mit dem Befehl CREATE TABLE).
•
Daten in die temporäre Tabelle einbringen :
INSERT INTO… SELECT…;
•
Relation mit der alter Struktur löschen: DROP
TABLE…
•
Die temporäre Tabelle umbenennen : RENAME…
Löschen von Daten. Die Löschoperationen in
SQL sind ähnlich strukturiert wie die Anfragen.
DELETE FROM Tabelle
[WHERE Bedingung];
Löschoperationen sind auf eine einzige Tabelle
bezogen. Obwohl bloß die Tupel aus einer
Tabelle gelöscht werden, können mehrere
Tabellen in der Selektionsformel erwähnt
werden. Die Bedingung kann beliebig komplex
sein. Eine fehlende WHERE Klausel wird als
TRUE interprätiert.
Beispiele :
a) Löschen aller Einträge:
DELETE FROM Kredit;
Alle Sätze der Tabelle Kredit wird gelöscht.
b)Löschen von einzelnen Sätzen:
DELETE FROM Konto
WHERE Kname = „Meier“;
Alle Konto-Information für Meier werden gelöscht.
c) Löschen mehrerer Sätze:
DELETE FROM Kredit
WHERE Kredit >1000 AND Kredit < 2000;
Alle Kredite mit Kreditnummer zwischen 1000 und 2000
werden gelöscht.
Die Sätze, die selektiert und gelöscht werden sollen,
können durch eine beliebige WHERE Klausel
identifiziert werden.
DELETE FROM Konto
WHERE Filiale IN (SELECT Filiale FROM Bank
WHERE Bstadt = „Darmstadt“);
Modifizieren von Daten.
Nicht alle Änderungen können als einfache
DELETE/INSERT Paare ausgedrückt werden.
Deshalb gibt es eine andere Möglichkeit : die
UPDATE Operation.
Wie alle Operationen in SQL erfolgt auch die
Änderung von Daten nur deskriptiv.
Die UPDATE Operation erlaubt dem Anwender
einzelne Feldwerte zu ändern, ohne den Rest
des Sätze zu beeinflussen.
Die allgemeine Form der UPDATE Operation ist
folgende:
UPDATE Tabelle
SET Feld1 = Wert1, Feld2 =Wert2, …
[WHERE Bedingung];
Die fehlende WHERE Klausel wird als wahre
Bedingung gewertet. Eine WHERE Klausel im
UPDATE hat das gleiche Format, wie die
WHERE Klausel beim SELECT.
a) Ändern aller Sätze: Erhöhe alle Kontostände um 8%.
UPDATE Konto
SET Saldo = Saldo *1.08;
b) Ändern einzelner Sätze: In Norwegen wird ein Mensch geboren:
UPDATE Land
SET Einwohner = Einwohner +1
WHERE Name = „Norwegen“;
c) Ändern mehrerer Sätze: Erhöhe alle Konten um den entsprechenden
Zinsbetrag. Für Konten mit mehr als 100 000 EUR und 12
Monaten Anlagezeit gibt es 7%, für kleinere Beträge oder kürzere
Anlagezeiten 4%.
UPDATE Konto
SET Saldo = Saldo *1.07
WHERE Saldo > 100000 AND Periode >=12;
UPDATE Konto
SET Saldo = Saldo * 1.04
WHERE Saldo <= 100000 OR Periode <12;
Datenschutz
Die Rolle. Nicht jedem Anwender ist es erlaubt,
auf alle Tabellen uneingeschränkt zuzugreifen.
Deshalb bietet SQL mittels des Befehls
GRANT Recht
ON Tabelle
TO Benutzer;
die Vergabe von Zugriffsrechten auf Tabellen an.
Als mögliche Rechten sind:
• ALTER - die Änderung der Definition der Tabelle
• DELETE – das Löschen der Daten aus der Tabelle
• INDEX – die Indizierung der Tabelle
• INSERT – die Eingabe der Daten
• SELECT – die Auswahl der Daten
• UPDATE – die Aktualisierung der Daten
• ALL – gibt dem Anwender alle Rechte
Wird das obige Konstrukt um die Formulierung WITH
GRANT OPTION erweitert, so darf der Benutzer dieses
erworbene Recht an andere weitergeben. Wird ihm das
Recht wieder entzogen, so verlieren auch diejenige das
Recht, die es von ihm erhalten haben.
Der Entzug von Rechten erfolgt analog zur Vergabe mit dem
Befehl:
REVOKE Recht
ON Tabelle
FROM Benutzer;
Beispiele.
GRANT INSERT, UPDATE
ON Land TO Prinz;
GRANT UPDATE(Einwohner)
ON Land TO Wolf;
GRANT SELECT
ON Stadt TO PUBLIC;
REVOKE SELECT ON Stadt FROM PUBLIC;
REVOKE INSERT ON Land FROM Prinz;
Transaktionsverwaltung
Für die Transaktionsverarbeitung gibt es drei
Befehle u. zwar:
• BEGIN TRANSACTION oder
DECLARE TRANSACTION
• ROLLBACK [Tabelle] oder COMMIT
• END TRANSACTION
Mit dieser Arbeitsweise, also mit der
Transaktionsvearbeitung, kann man die
Änderungen in Ruhe überprüfen und danach
entscheiden, ob man sie endgültig ausführt oder
wieder zurücksetzen will.
Es ist eine Möglichkeit, bestimmte Aktualisierungen an
Datensätzen oder Datenfeldern nicht sofort auszuführen,
sondern erst eine Protokolldatei zu speichern.
Die Protokolldatei existiert nur so lange, bis die Transaktion
abgeschlossen ist. Danach wird sie automatisch wieder
gelöscht.
Die obigen Befehle haben folgende Bedeutungen:
• BEGIN TRANSACTION - Transaktionsverarbeitung
einleiten;
• ROLLBACK - vorgenommene Aktualisierungen wieder
zurücksetzen;
• COMMIT – die Aktualisierungen werden durchgeführt;
• END TRANSACTION – Transaktion beenden.
Anschließend können keine Änderungen mehr
rückgängig gemacht werden.
Beispiel.
BEGIN TRANSACTION
INSERT INTO Land(Name, Hauptstadt)
VALUES („China“, „Pekin“);
INSERT INTO Stadt(Name)
VALUES(„Pekin“);
SELECT * FROM Stadt;
SELECT * FROM Land;
ROLLBACK
END TRANSACTION
Die anderen zulässigen Befehle sind
DELETE und UPDATE.
Herunterladen