Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Views | Enkele Aanvullende Onderwerpen
SQL-Optimalisatie en Queryfuncties

Views

Veeg om het menu te tonen

In het vorige hoofdstuk noemden we een object genaamd view bij het bespreken van gebruikersrechten. Laten we dit object nu in meer detail bekijken.

Een view in SQL is een virtuele tabel die is gebaseerd op het resultaat van een SQL-query. Het bevat rijen en kolommen, net als een echte tabel, en de velden in een view zijn velden uit één of meer echte tabellen in de database.
Views worden om verschillende redenen gebruikt, waaronder het vereenvoudigen van complexe queries, het verhogen van de beveiliging door de toegang tot specifieke gegevens te beperken, en het presenteren van gegevens in een specifiek formaat.

Belangrijkste kenmerken van views

  • Virtuele tabel: een view slaat geen gegevens fysiek op. De gegevens worden afgeleid van de tabellen waarop de view is gebaseerd (de zogenaamde basistabellen);
  • Vereenvoudigen van complexe queries: views kunnen complexe SQL-queries vereenvoudigen door ze te kapselen in één enkele view. Dit maakt het eenvoudiger om te werken met complexe joins en aggregaties;
  • Beveiliging: views kunnen de toegang tot specifieke rijen of kolommen van gegevens beperken, wat de beveiliging verhoogt. Gebruikers kunnen toegang krijgen tot de view zonder toegang te krijgen tot de onderliggende basistabellen;
  • Consistentie: views kunnen een consistent, onveranderd interface presenteren, zelfs wanneer het onderliggende databaseschema verandert.

Implementatie

We zullen een view maken genaamd account_activity_view op basis van onze BankAccounts en UserLogs tabellen die het rekeningnummer, de naam van de rekeninghouder, het saldo en de meest recente actie op de rekening toont.

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

Deze instructie maakt een view met de naam account_activity_view die informatie uit de tabel bankaccounts combineert met de laatste activiteit uit de tabel userlogs. Het biedt een overzicht van rekeninghouders, hun huidige saldo en hun laatste actie.

  1. Hoofd-SELECT-clausule:

    • ba.accountnumber: Selecteert het rekeningnummer uit de tabel bankaccounts.
    • ba.accountholder: Selecteert de naam van de rekeninghouder uit de tabel bankaccounts.
    • ba.balance: Selecteert het saldo uit de tabel bankaccounts.
    • ul.action AS latest_action: Selecteert de laatste actie uit de tabel userlogs en geeft deze de alias latest_action.
    • ul.timestamp AS latest_action_time: Selecteert het tijdstip van de laatste actie en geeft deze de alias latest_action_time.
  2. FROM-clausule:

    • bankaccounts ba: De hoofdtafel is bankaccounts, met het alias ba.
  3. LEFT JOIN-clausule:

    • De subquery haalt de meest recente actie voor elke rekening op.
    • SELECT DISTINCT ON (accountnumber): Zorgt voor unieke rekeningnummers, waarbij alleen de meest recente invoer per rekening wordt geselecteerd.
    • ORDER BY accountnumber, timestamp DESC: Sorteert de invoeren op rekeningnummer en vervolgens op tijdstip in aflopende volgorde om de laatste actie te verkrijgen.
  4. Join-voorwaarde:

    • ul ON ba.accountnumber = ul.accountnumber: Voegt het resultaat van de subquery samen met de tabel bankaccounts op basis van het rekeningnummer.

Deze view kan nu in andere queries worden gebruikt zonder de complexe query met joins opnieuw te hoeven schrijven, door simpelweg de aangemaakte view als een gewone tabel te gebruiken.

Note
Opmerking

Hoewel we de view kunnen gebruiken als een reguliere tabel, is het eigenlijk geen fysieke tabel! De gegevens in de view worden niet op de schijf opgeslagen. In plaats daarvan wordt de query van de view uitgevoerd telkens wanneer we de view gebruiken, en de resulterende gegevens worden gebruikt in de hoofdquery.

question mark

Welke van de volgende uitspraken beschrijft het beveiligingsaspect van views het beste?

Selecteer het correcte antwoord

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 6

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Sectie 3. Hoofdstuk 6
some-alt