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 er felter fra en 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 og 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 øge 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 opretter et view kaldet account_activity_view baseret på vores BankAccounts og UserLogs tabeller, som viser kontonummer, kontohavers navn, saldo og den seneste handling 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;
CREATE VIEW account_activity_view AS
Denne erklæring opretter et view med navnet account_activity_view, som kombinerer information fra tabellen bankaccounts med den seneste aktivitet fra tabellen userlogs. Det giver et overblik over kontohavere, deres aktuelle saldo og deres seneste handling.
-
Hoved-
SELECT-sætning:ba.accountnumber:Vælger kontonummeret fra tabellenbankaccounts.ba.accountholder:Vælger kontohaverens navn fra tabellenbankaccounts.ba.balance:Vælger saldoen fra tabellenbankaccounts.ul.action AS latest_action:Vælger den seneste handling fra tabellenuserlogsog giver den aliasetlatest_action.ul.timestamp AS latest_action_time:Vælger tidsstemplet for den seneste handling og giver det aliasetlatest_action_time.
-
FROM-sætning:bankaccounts ba:Hovedtabellen erbankaccounts, og den får aliasetba.
-
LEFT JOIN-sætning:- Underforespørgslen henter den seneste handling for hver konto.
SELECT DISTINCT ON (accountnumber):Sikrer unikke kontonumre og vælger kun den seneste post pr. konto.ORDER BY accountnumber, timestamp DESC:Sorterer posterne efter kontonummer og derefter efter tidsstempel i faldende rækkefølge for at få den seneste handling.
-
Join-betingelse:
ul ON ba.accountnumber = ul.accountnumber:Sammenkæder resultatet af underforespørgslen med tabellenbankaccountsbaseret på kontonummeret.
Nu kan dette view anvendes 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.
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
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 er felter fra en 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 og 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 øge 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 opretter et view kaldet account_activity_view baseret på vores BankAccounts og UserLogs tabeller, som viser kontonummer, kontohavers navn, saldo og den seneste handling 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;
CREATE VIEW account_activity_view AS
Denne erklæring opretter et view med navnet account_activity_view, som kombinerer information fra tabellen bankaccounts med den seneste aktivitet fra tabellen userlogs. Det giver et overblik over kontohavere, deres aktuelle saldo og deres seneste handling.
-
Hoved-
SELECT-sætning:ba.accountnumber:Vælger kontonummeret fra tabellenbankaccounts.ba.accountholder:Vælger kontohaverens navn fra tabellenbankaccounts.ba.balance:Vælger saldoen fra tabellenbankaccounts.ul.action AS latest_action:Vælger den seneste handling fra tabellenuserlogsog giver den aliasetlatest_action.ul.timestamp AS latest_action_time:Vælger tidsstemplet for den seneste handling og giver det aliasetlatest_action_time.
-
FROM-sætning:bankaccounts ba:Hovedtabellen erbankaccounts, og den får aliasetba.
-
LEFT JOIN-sætning:- Underforespørgslen henter den seneste handling for hver konto.
SELECT DISTINCT ON (accountnumber):Sikrer unikke kontonumre og vælger kun den seneste post pr. konto.ORDER BY accountnumber, timestamp DESC:Sorterer posterne efter kontonummer og derefter efter tidsstempel i faldende rækkefølge for at få den seneste handling.
-
Join-betingelse:
ul ON ba.accountnumber = ul.accountnumber:Sammenkæder resultatet af underforespørgslen med tabellenbankaccountsbaseret på kontonummeret.
Nu kan dette view anvendes 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.
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!