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
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
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!