Kursinhalt
Fortgeschrittene Techniken in SQL
Fortgeschrittene Techniken in SQL
Ansichten
Im vorherigen Kapitel haben wir ein Objekt namens View erwähnt, als wir über Benutzerrechte sprachen. Betrachten wir dieses Objekt nun genauer.
Eine View in SQL ist eine virtuelle Tabelle, die auf dem Ergebnis einer SQL-Abfrage basiert. Sie enthält Zeilen und Spalten wie eine echte Tabelle, und die Felder in einer View sind Felder aus einer oder mehreren echten Tabellen in der Datenbank.
Views werden aus mehreren Gründen verwendet, einschließlich der Vereinfachung komplexer Abfragen, der Erhöhung der Sicherheit durch Einschränkung des Zugriffs auf bestimmte Daten und der Darstellung von Daten in einem bestimmten Format.
Hauptmerkmale von Views
- Virtuelle Tabelle: Eine View speichert Daten nicht physisch. Sie leitet ihre Daten von den Tabellen ab, auf denen sie basiert (sogenannte Basistabellen);
- Vereinfachung komplexer Abfragen: Views können komplexe SQL-Abfragen vereinfachen, indem sie in eine einzelne View gekapselt werden. Dies erleichtert die Arbeit mit komplexen Joins und Aggregationen;
- Sicherheit: Views können den Zugriff auf bestimmte Zeilen oder Spalten von Daten einschränken und so die Sicherheit erhöhen. Benutzern kann Zugriff auf die View gewährt werden, ohne ihnen Zugriff auf die zugrunde liegenden Basistabellen zu gewähren;
- Konsistenz: Views können eine konsistente, unveränderte Schnittstelle präsentieren, selbst wenn sich das zugrunde liegende Datenbankschema ändert.
Implementierung
Wir werden eine View namens account_activity_view
basierend auf unseren BankAccounts
- und UserLogs
-Tabellen erstellen, die die Kontonummer, den Namen des Kontoinhabers, den Kontostand und die zuletzt durchgeführte Aktion auf dem Konto anzeigt.
-- Create a view that shows account details along with their latest action CREATE OR REPLACE VIEW account_activity_view AS SELECT ba.account_number, -- Select the account number from the bankaccounts table ba.account_holder, -- Select the account holder's name from the bankaccounts table ba.balance, -- Select the balance from the bankaccounts table ul.action AS latest_action, -- Select the latest action from the userlogs table (alias as latest_action) ul.timestamp AS latest_action_time -- Select the timestamp of the latest action (alias as latest_action_time) FROM BankAccounts ba -- Main table: bankaccounts LEFT JOIN ( -- Subquery to get the most recent action for each account SELECT DISTINCT ON (account_number) account_number, -- Select the account number action, -- Select the action timestamp -- Select the timestamp FROM UserLogs ORDER BY account_number, -- Order by account number timestamp DESC -- Order by timestamp in descending order to get the latest action ) ul ON ba.account_number = ul.account_number; -- Join the subquery result with bankaccounts on account number -- Get data from the view SELECT * FROM account_activity_view;
Jetzt können Sie diese Ansicht in anderen Abfragen verwenden, ohne die komplexe Abfrage mit Joins neu zu erstellen, indem Sie einfach die erstellte Ansicht wie eine gewöhnliche Tabelle verwenden.
Hinweis
Obwohl wir die Ansicht wie eine reguläre Tabelle verwenden können, ist sie eigentlich keine physische Tabelle! Die Daten in der Ansicht werden nicht auf der Festplatte gespeichert. Stattdessen wird, wann immer wir die Ansicht verwenden, ihre Abfrage ausgeführt und die resultierenden Daten in der Hauptabfrage verwendet.
Danke für Ihr Feedback!