Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Sichten | Einige Zusätzliche Themen
SQL-Optimierung und Abfragefunktionen

Sichten

Swipe um das Menü anzuzeigen

Im vorherigen Kapitel haben wir beim Thema Benutzerrechte ein Objekt namens View erwähnt. Nun betrachten wir dieses Objekt 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 stammen aus einer oder mehreren echten Tabellen in der Datenbank.
Views werden aus verschiedenen Gründen verwendet, unter anderem zur Vereinfachung komplexer Abfragen, zur Erhöhung der Sicherheit durch Einschränkung des Zugriffs auf bestimmte Daten und zur Darstellung von Daten in einem bestimmten Format.

Hauptmerkmale von Views

  • Virtuelle Tabelle: Eine View speichert keine Daten physisch. Sie bezieht ihre Daten aus den Tabellen, auf denen sie basiert (sogenannte Basistabellen);
  • Vereinfachung komplexer Abfragen: Views können komplexe SQL-Abfragen vereinfachen, indem sie diese in einer einzigen View kapseln. 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 geben;
  • Konsistenz: Views können eine konsistente, unveränderte Schnittstelle bereitstellen, selbst wenn sich das zugrunde liegende Datenbankschema ändert.

Implementierung

Wir erstellen eine View namens account_activity_view auf Basis unserer Tabellen BankAccounts und UserLogs, die die Kontonummer, den Namen des Kontoinhabers, den Kontostand und die zuletzt durchgeführte Aktion am Konto anzeigt.

1234567891011121314151617181920212223242526
-- 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;
Abfragebeschreibung
expand arrow
  1. CREATE VIEW account_activity_view AS

Diese Anweisung erstellt eine View mit dem Namen account_activity_view, die Informationen aus der Tabelle bankaccounts mit der letzten Aktivität aus der Tabelle userlogs kombiniert. Sie bietet einen Überblick über Kontoinhaber, aktuellen Kontostand und die letzte Aktion.

  1. Haupt-SELECT-Klausel:

    • ba.accountnumber: Auswahl der Kontonummer aus der Tabelle bankaccounts.
    • ba.accountholder: Auswahl des Namens des Kontoinhabers aus der Tabelle bankaccounts.
    • ba.balance: Auswahl des Kontostands aus der Tabelle bankaccounts.
    • ul.action AS latest_action: Auswahl der letzten Aktion aus der Tabelle userlogs und Alias als latest_action.
    • ul.timestamp AS latest_action_time: Auswahl des Zeitstempels der letzten Aktion und Alias als latest_action_time.
  2. FROM-Klausel:

    • bankaccounts ba: Die Haupttabelle ist bankaccounts, abgekürzt als ba.
  3. LEFT JOIN-Klausel:

    • Die Unterabfrage ermittelt die jeweils letzte Aktion für jedes Konto.
    • SELECT DISTINCT ON (accountnumber): Stellt sicher, dass nur eindeutige Kontonummern ausgewählt werden, jeweils mit dem aktuellsten Eintrag pro Konto.
    • ORDER BY accountnumber, timestamp DESC: Sortiert die Einträge nach Kontonummer und anschließend nach Zeitstempel absteigend, um die letzte Aktion zu erhalten.
  4. Join-Bedingung:

    • ul ON ba.accountnumber = ul.accountnumber: Verknüpft das Ergebnis der Unterabfrage mit der Tabelle bankaccounts anhand der Kontonummer.

Mit dieser View kann die komplexe Abfrage mit Joins in anderen Abfragen wiederverwendet werden, indem die erstellte View wie eine gewöhnliche Tabelle genutzt wird.

Note
Hinweis

Obwohl wir die View wie eine normale Tabelle verwenden können, ist sie keine physische Tabelle! Die Daten in der View werden nicht auf der Festplatte gespeichert. Stattdessen wird bei jeder Verwendung der View deren Abfrage ausgeführt und die resultierenden Daten in der Hauptabfrage verwendet.

question mark

Welche der folgenden Aussagen beschreibt den Sicherheitsaspekt von Views am besten?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 6

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 3. Kapitel 6
some-alt