Daten über Views abfragen und ändern
In diesem Schritt lernen Sie, wie Sie Daten über Views (Views) in PostgreSQL abfragen und ändern. Während Views hauptsächlich zum Abfragen von Daten verwendet werden, können sie in einigen Fällen auch verwendet werden, um die zugrunde liegenden Daten in den Basistabellen (base tables) zu ändern.
Daten über Views abfragen
Wie im vorherigen Schritt gezeigt, ist das Abfragen von Daten über eine View unkompliziert. Sie können eine SELECT
-Anweisung verwenden, um Daten aus der View abzurufen, als wäre es eine reguläre Tabelle.
Um beispielsweise alle Daten aus der View employee_info
abzurufen:
SELECT * FROM employee_info;
Sie können auch WHERE
-Klauseln und andere SQL-Konstrukte verwenden, um die Daten zu filtern und zu sortieren:
SELECT * FROM employee_info WHERE department = 'Sales';
Diese Abfrage gibt nur die Mitarbeiter in der Vertriebsabteilung (Sales department) zurück.
Daten über Views ändern
Das Ändern von Daten über eine View ist unter bestimmten Bedingungen möglich. Die View muss einfach genug sein, damit PostgreSQL bestimmen kann, welche Basistabelle und Spalten aktualisiert werden sollen. Im Allgemeinen ist eine View änderbar, wenn sie die folgenden Kriterien erfüllt:
- Sie wählt nur aus einer Tabelle aus.
- Sie enthält keine Aggregatfunktionen (aggregate functions) (z. B.
SUM
, AVG
, COUNT
).
- Sie enthält keine
GROUP BY
-, HAVING
- oder DISTINCT
-Klauseln.
Erstellen wir eine weitere View, die die employee_id
enthält, um einfachere Aktualisierungen zu ermöglichen:
CREATE VIEW employee_details AS
SELECT employee_id, first_name, last_name, department, salary
FROM employees;
Versuchen wir nun, das Gehalt eines Mitarbeiters über die View employee_details
zu aktualisieren:
UPDATE employee_details
SET salary = 65000.00
WHERE employee_id = 1;
Diese Anweisung aktualisiert das Gehalt des Mitarbeiters mit employee_id
1 auf 65000.00.
Sie können die Aktualisierung überprüfen, indem Sie die Tabelle employees
direkt abfragen:
SELECT * FROM employees WHERE employee_id = 1;
Sie sollten sehen, dass das Gehalt für employee_id
1 aktualisiert wurde.
Daten über Views einfügen
Sie können auch Daten über eine View einfügen, vorausgesetzt, die View enthält alle Nicht-Null-Spalten (non-nullable columns) der Basistabelle. Da unsere View employee_details
alle Spalten der Tabelle employees
enthält, können wir einen neuen Mitarbeiter einfügen:
INSERT INTO employee_details (first_name, last_name, department, salary)
VALUES ('David', 'Lee', 'IT', 90000.00);
Beachten Sie, dass wir die employee_id
nicht angeben, da es sich um eine Serial-Spalte handelt und sie automatisch generiert wird.
Überprüfen Sie die Einfügung:
SELECT * FROM employees WHERE first_name = 'David' AND last_name = 'Lee';
Daten über Views löschen
Ebenso können Sie Daten über eine änderbare View löschen:
DELETE FROM employee_details WHERE first_name = 'David' AND last_name = 'Lee';
Überprüfen Sie die Löschung:
SELECT * FROM employees WHERE first_name = 'David' AND last_name = 'Lee';
Wichtige Überlegungen
- Nicht alle Views sind änderbar. Komplexe Views mit Joins, Aggregationen oder anderen komplexen Operationen sind in der Regel schreibgeschützt (read-only).
- Das Ändern von Daten über Views kann Auswirkungen auf die Leistung haben. PostgreSQL muss die View-Operationen in Operationen auf den zugrunde liegenden Basistabellen übersetzen.
- Seien Sie vorsichtig beim Ändern von Daten über Views, da Änderungen die Basistabellen direkt beeinflussen.