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

bookViews

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 deze samen te voegen 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 bieden, 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;
copy

Nu kun je deze view in andere queries gebruiken zonder de complexe query met joins opnieuw te moeten maken, door simpelweg de aangemaakte view als een gewone tabel te gebruiken.

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, telkens wanneer we de view gebruiken, de bijbehorende query uitgevoerd en worden de resulterende gegevens gebruikt in de hoofdquery.

question mark

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

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 7

Vraag AI

expand

Vraag AI

ChatGPT

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

Suggested prompts:

What are some practical use cases for views in real-world applications?

Can you explain the difference between a view and a table in more detail?

How can I update or modify an existing view?

Awesome!

Completion rate improved to 4.35

bookViews

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 deze samen te voegen 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 bieden, 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;
copy

Nu kun je deze view in andere queries gebruiken zonder de complexe query met joins opnieuw te moeten maken, door simpelweg de aangemaakte view als een gewone tabel te gebruiken.

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, telkens wanneer we de view gebruiken, de bijbehorende query uitgevoerd en worden de resulterende gegevens gebruikt in de hoofdquery.

question mark

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

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 7
some-alt