Visninger
I det forrige kapitel nævnte vi et objekt kaldet view i forbindelse med brugerrettigheder. Lad os nu se nærmere på dette objekt.
Et view i SQL er en virtuel tabel, der er baseret på resultatet af en SQL-forespørgsel. Den indeholder rækker og kolonner ligesom en rigtig tabel, og felterne i et view stammer fra én eller flere rigtige tabeller i databasen.
Views anvendes af flere grunde, herunder forenkling af komplekse forespørgsler, forbedring af sikkerhed ved at begrænse adgangen til specifikke data samt præsentation af data i et bestemt format.
Nøglefunktioner ved Views
- Virtuel tabel: Et view gemmer ikke data fysisk. Det henter sine data fra de tabeller, det er baseret på (kaldet basistabeller);
- Forenkling af komplekse forespørgsler: Views kan forenkle komplekse SQL-forespørgsler ved at indkapsle dem i et enkelt view. Dette gør det lettere at arbejde med komplekse joins og aggregeringer;
- Sikkerhed: Views kan begrænse adgangen til specifikke rækker eller kolonner af data og dermed forbedre sikkerheden. Brugere kan få adgang til viewet uden at få adgang til de underliggende basistabeller;
- Konsistens: Views kan præsentere et konsistent, uændret interface, selv når den underliggende databasestruktur ændres.
Implementering
Vi vil oprette et view kaldet account_activity_view
baseret på vores BankAccounts
og UserLogs
tabeller, som viser kontonummer, kontohavers navn, saldo og den seneste handling foretaget 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;
Nu kan du anvende dette view i andre forespørgsler uden at skulle genskabe den komplekse forespørgsel med joins, blot ved at bruge det oprettede view som en almindelig tabel.
Note
Selvom vi kan bruge viewet som en almindelig tabel, er det faktisk ikke en fysisk tabel! Dataene i viewet gemmes ikke på disken. I stedet bliver viewets forespørgsel udført, hver gang vi bruger viewet, og de resulterende data anvendes i hovedforespørgslen.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 4.35
Visninger
Stryg for at vise menuen
I det forrige kapitel nævnte vi et objekt kaldet view i forbindelse med brugerrettigheder. Lad os nu se nærmere på dette objekt.
Et view i SQL er en virtuel tabel, der er baseret på resultatet af en SQL-forespørgsel. Den indeholder rækker og kolonner ligesom en rigtig tabel, og felterne i et view stammer fra én eller flere rigtige tabeller i databasen.
Views anvendes af flere grunde, herunder forenkling af komplekse forespørgsler, forbedring af sikkerhed ved at begrænse adgangen til specifikke data samt præsentation af data i et bestemt format.
Nøglefunktioner ved Views
- Virtuel tabel: Et view gemmer ikke data fysisk. Det henter sine data fra de tabeller, det er baseret på (kaldet basistabeller);
- Forenkling af komplekse forespørgsler: Views kan forenkle komplekse SQL-forespørgsler ved at indkapsle dem i et enkelt view. Dette gør det lettere at arbejde med komplekse joins og aggregeringer;
- Sikkerhed: Views kan begrænse adgangen til specifikke rækker eller kolonner af data og dermed forbedre sikkerheden. Brugere kan få adgang til viewet uden at få adgang til de underliggende basistabeller;
- Konsistens: Views kan præsentere et konsistent, uændret interface, selv når den underliggende databasestruktur ændres.
Implementering
Vi vil oprette et view kaldet account_activity_view
baseret på vores BankAccounts
og UserLogs
tabeller, som viser kontonummer, kontohavers navn, saldo og den seneste handling foretaget 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;
Nu kan du anvende dette view i andre forespørgsler uden at skulle genskabe den komplekse forespørgsel med joins, blot ved at bruge det oprettede view som en almindelig tabel.
Note
Selvom vi kan bruge viewet som en almindelig tabel, er det faktisk ikke en fysisk tabel! Dataene i viewet gemmes ikke på disken. I stedet bliver viewets forespørgsel udført, hver gang vi bruger viewet, og de resulterende data anvendes i hovedforespørgslen.
Tak for dine kommentarer!