Visninger
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;
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.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
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
Visninger
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;
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.
Takk for tilbakemeldingene dine!