Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Vues | Quelques Sujets Supplémentaires
Techniques Avancées en SQL

bookVues

Dans le chapitre précédent, nous avons mentionné un objet nommé vue lors de la discussion sur les privilèges utilisateur. Examinons maintenant cet objet plus en détail.

Une vue en SQL est une table virtuelle basée sur le résultat d'une requête SQL. Elle contient des lignes et des colonnes tout comme une table réelle, et les champs d'une vue proviennent d'une ou plusieurs tables réelles de la base de données.
Les vues sont utilisées pour plusieurs raisons, notamment simplifier les requêtes complexes, renforcer la sécurité en limitant l'accès à certaines données, et présenter les données dans un format spécifique.

Caractéristiques principales des vues

  • Table virtuelle : Une vue ne stocke pas physiquement les données. Elle tire ses données des tables sur lesquelles elle est basée (appelées tables de base) ;
  • Simplification des requêtes complexes : Les vues peuvent simplifier des requêtes SQL complexes en les encapsulant dans une seule vue. Cela facilite la gestion des jointures et des agrégations complexes ;
  • Sécurité : Les vues peuvent restreindre l'accès à certaines lignes ou colonnes de données, renforçant ainsi la sécurité. Les utilisateurs peuvent se voir accorder l'accès à la vue sans avoir accès aux tables de base sous-jacentes ;
  • Cohérence : Les vues peuvent présenter une interface cohérente et inchangée même lorsque le schéma de la base de données sous-jacente évolue.

Mise en œuvre

Nous allons créer une vue appelée account_activity_view basée sur nos tables BankAccounts et UserLogs qui affiche le numéro de compte, le nom du titulaire, le solde et la dernière action effectuée sur le compte.

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;
copy

Vous pouvez désormais utiliser cette vue dans d'autres requêtes sans avoir à recréer la requête complexe avec des jointures, simplement en utilisant la vue créée comme une table ordinaire.

Remarque

Bien que l'on puisse utiliser la vue comme une table classique, il ne s'agit pas réellement d'une table physique ! Les données de la vue ne sont pas stockées sur le disque. À la place, chaque fois que l'on utilise la vue, sa requête est exécutée et les données résultantes sont utilisées dans la requête principale.

question mark

Laquelle des affirmations suivantes décrit le mieux l'aspect sécurité des vues ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 7

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Suggested prompts:

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

bookVues

Glissez pour afficher le menu

Dans le chapitre précédent, nous avons mentionné un objet nommé vue lors de la discussion sur les privilèges utilisateur. Examinons maintenant cet objet plus en détail.

Une vue en SQL est une table virtuelle basée sur le résultat d'une requête SQL. Elle contient des lignes et des colonnes tout comme une table réelle, et les champs d'une vue proviennent d'une ou plusieurs tables réelles de la base de données.
Les vues sont utilisées pour plusieurs raisons, notamment simplifier les requêtes complexes, renforcer la sécurité en limitant l'accès à certaines données, et présenter les données dans un format spécifique.

Caractéristiques principales des vues

  • Table virtuelle : Une vue ne stocke pas physiquement les données. Elle tire ses données des tables sur lesquelles elle est basée (appelées tables de base) ;
  • Simplification des requêtes complexes : Les vues peuvent simplifier des requêtes SQL complexes en les encapsulant dans une seule vue. Cela facilite la gestion des jointures et des agrégations complexes ;
  • Sécurité : Les vues peuvent restreindre l'accès à certaines lignes ou colonnes de données, renforçant ainsi la sécurité. Les utilisateurs peuvent se voir accorder l'accès à la vue sans avoir accès aux tables de base sous-jacentes ;
  • Cohérence : Les vues peuvent présenter une interface cohérente et inchangée même lorsque le schéma de la base de données sous-jacente évolue.

Mise en œuvre

Nous allons créer une vue appelée account_activity_view basée sur nos tables BankAccounts et UserLogs qui affiche le numéro de compte, le nom du titulaire, le solde et la dernière action effectuée sur le compte.

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;
copy

Vous pouvez désormais utiliser cette vue dans d'autres requêtes sans avoir à recréer la requête complexe avec des jointures, simplement en utilisant la vue créée comme une table ordinaire.

Remarque

Bien que l'on puisse utiliser la vue comme une table classique, il ne s'agit pas réellement d'une table physique ! Les données de la vue ne sont pas stockées sur le disque. À la place, chaque fois que l'on utilise la vue, sa requête est exécutée et les données résultantes sont utilisées dans la requête principale.

question mark

Laquelle des affirmations suivantes décrit le mieux l'aspect sécurité des vues ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 7
some-alt