Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Visninger | Noen Tilleggs­emner
Avanserte Teknikker i SQL

bookVisninger

I forrige kapittel nevnte vi et objekt kalt view i forbindelse med brukerrettigheter. Nå skal vi se nærmere på dette objektet.

En view i SQL er en virtuell tabell som er basert på resultatsettet fra en SQL-spørring. Den inneholder rader og kolonner akkurat som en ekte tabell, og feltene i en view er felter fra én eller flere ekte tabeller i databasen.
Views brukes av flere grunner, blant annet for å forenkle komplekse spørringer, øke sikkerheten ved å begrense tilgang til spesifikke data, og for å presentere data i et spesifikt format.

Viktige egenskaper ved views

  • Virtuell tabell: En view lagrer ikke data fysisk. Den henter dataene sine fra tabellene den er basert på (kalt basistabeller);
  • Forenkler komplekse spørringer: Views kan forenkle komplekse SQL-spørringer ved å kapsle dem inn i én enkelt view. Dette gjør det enklere å arbeide med komplekse joins og aggregeringer;
  • Sikkerhet: Views kan begrense tilgang til spesifikke rader eller kolonner med data, noe som øker sikkerheten. Brukere kan få tilgang til viewen uten å få tilgang til de underliggende basistabellene;
  • Konsistens: Views kan presentere et konsistent, uendret grensesnitt selv om det underliggende databaseskjemaet endres.

Implementering

Vi skal opprette en view kalt account_activity_view basert på våre BankAccounts og UserLogs tabeller som viser kontonummer, kontoinnehaverens navn, saldo og den siste handlingen som er utført på kontoen.

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

Nå kan du bruke denne visningen i andre spørringer uten å måtte gjenskape den komplekse spørringen med join, ved ganske enkelt å bruke den opprettede visningen som en vanlig tabell.

Merk

Selv om vi kan bruke visningen som en vanlig tabell, er det faktisk ikke en fysisk tabell! Dataene i visningen lagres ikke på disken. I stedet kjøres spørringen til visningen hver gang vi bruker den, og de resulterende dataene brukes i hovedspørringen.

question mark

Hvilket av følgende utsagn beskriver best sikkerhetsaspektet ved visninger?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 7

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

Can you explain how to update or modify an existing view?

What are some limitations or drawbacks of using views in SQL?

Can you show an example of querying this view with specific conditions?

Awesome!

Completion rate improved to 4.35

bookVisninger

Sveip for å vise menyen

I forrige kapittel nevnte vi et objekt kalt view i forbindelse med brukerrettigheter. Nå skal vi se nærmere på dette objektet.

En view i SQL er en virtuell tabell som er basert på resultatsettet fra en SQL-spørring. Den inneholder rader og kolonner akkurat som en ekte tabell, og feltene i en view er felter fra én eller flere ekte tabeller i databasen.
Views brukes av flere grunner, blant annet for å forenkle komplekse spørringer, øke sikkerheten ved å begrense tilgang til spesifikke data, og for å presentere data i et spesifikt format.

Viktige egenskaper ved views

  • Virtuell tabell: En view lagrer ikke data fysisk. Den henter dataene sine fra tabellene den er basert på (kalt basistabeller);
  • Forenkler komplekse spørringer: Views kan forenkle komplekse SQL-spørringer ved å kapsle dem inn i én enkelt view. Dette gjør det enklere å arbeide med komplekse joins og aggregeringer;
  • Sikkerhet: Views kan begrense tilgang til spesifikke rader eller kolonner med data, noe som øker sikkerheten. Brukere kan få tilgang til viewen uten å få tilgang til de underliggende basistabellene;
  • Konsistens: Views kan presentere et konsistent, uendret grensesnitt selv om det underliggende databaseskjemaet endres.

Implementering

Vi skal opprette en view kalt account_activity_view basert på våre BankAccounts og UserLogs tabeller som viser kontonummer, kontoinnehaverens navn, saldo og den siste handlingen som er utført på kontoen.

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

Nå kan du bruke denne visningen i andre spørringer uten å måtte gjenskape den komplekse spørringen med join, ved ganske enkelt å bruke den opprettede visningen som en vanlig tabell.

Merk

Selv om vi kan bruke visningen som en vanlig tabell, er det faktisk ikke en fysisk tabell! Dataene i visningen lagres ikke på disken. I stedet kjøres spørringen til visningen hver gang vi bruker den, og de resulterende dataene brukes i hovedspørringen.

question mark

Hvilket av følgende utsagn beskriver best sikkerhetsaspektet ved visninger?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 7
some-alt