Viste
Nel capitolo precedente, abbiamo menzionato un oggetto chiamato vista durante la discussione sui privilegi utente. Ora consideriamo questo oggetto in modo più dettagliato.
Una vista in SQL è una tabella virtuale basata sul risultato di una query SQL. Contiene righe e colonne proprio come una tabella reale, e i campi di una vista sono campi provenienti da una o più tabelle reali nel database.
Le viste vengono utilizzate per diversi motivi, tra cui semplificare query complesse, aumentare la sicurezza limitando l'accesso a dati specifici e presentare i dati in un formato specifico.
Caratteristiche principali delle viste
- Tabella virtuale: una vista non memorizza fisicamente i dati. I dati derivano dalle tabelle su cui si basa (dette tabelle di base);
- Semplificazione di query complesse: le viste possono semplificare query SQL complesse racchiudendole in una singola vista. Questo rende più semplice lavorare con join e aggregazioni complessi;
- Sicurezza: le viste possono limitare l'accesso a specifiche righe o colonne di dati, aumentando la sicurezza. Gli utenti possono ricevere l'accesso alla vista senza avere accesso alle tabelle di base sottostanti;
- Coerenza: le viste possono presentare un'interfaccia coerente e invariata anche quando lo schema del database sottostante cambia.
Implementazione
Creeremo una vista chiamata account_activity_view
basata sulle nostre tabelle BankAccounts
e UserLogs
che mostra il numero di conto, il nome dell'intestatario, il saldo e l'azione più recente effettuata sul conto.
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;
Ora puoi utilizzare questa vista in altre query senza dover ricreare la query complessa con join, semplicemente usando la vista creata come una normale tabella.
Nota
Sebbene possiamo usare la vista come una tabella regolare, non è in realtà una tabella fisica! I dati nella vista non sono memorizzati su disco. Invece, ogni volta che utilizziamo la vista, la sua query viene eseguita e i dati risultanti vengono utilizzati nella query principale.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 4.35
Viste
Scorri per mostrare il menu
Nel capitolo precedente, abbiamo menzionato un oggetto chiamato vista durante la discussione sui privilegi utente. Ora consideriamo questo oggetto in modo più dettagliato.
Una vista in SQL è una tabella virtuale basata sul risultato di una query SQL. Contiene righe e colonne proprio come una tabella reale, e i campi di una vista sono campi provenienti da una o più tabelle reali nel database.
Le viste vengono utilizzate per diversi motivi, tra cui semplificare query complesse, aumentare la sicurezza limitando l'accesso a dati specifici e presentare i dati in un formato specifico.
Caratteristiche principali delle viste
- Tabella virtuale: una vista non memorizza fisicamente i dati. I dati derivano dalle tabelle su cui si basa (dette tabelle di base);
- Semplificazione di query complesse: le viste possono semplificare query SQL complesse racchiudendole in una singola vista. Questo rende più semplice lavorare con join e aggregazioni complessi;
- Sicurezza: le viste possono limitare l'accesso a specifiche righe o colonne di dati, aumentando la sicurezza. Gli utenti possono ricevere l'accesso alla vista senza avere accesso alle tabelle di base sottostanti;
- Coerenza: le viste possono presentare un'interfaccia coerente e invariata anche quando lo schema del database sottostante cambia.
Implementazione
Creeremo una vista chiamata account_activity_view
basata sulle nostre tabelle BankAccounts
e UserLogs
che mostra il numero di conto, il nome dell'intestatario, il saldo e l'azione più recente effettuata sul conto.
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;
Ora puoi utilizzare questa vista in altre query senza dover ricreare la query complessa con join, semplicemente usando la vista creata come una normale tabella.
Nota
Sebbene possiamo usare la vista come una tabella regolare, non è in realtà una tabella fisica! I dati nella vista non sono memorizzati su disco. Invece, ogni volta che utilizziamo la vista, la sua query viene eseguita e i dati risultanti vengono utilizzati nella query principale.
Grazie per i tuoi commenti!