Créer des vues

Les vues sont des requêtes nommées stockées dans le catalogue de la base de données. Pour créer une nouvelle vue, vous utilisez l’instruction CREATE VIEW. Cette instruction crée une vue basée sur la requête spécifiée. Par exemple, pour créer une vue appelée customerPayments basée sur une requête qui renvoie des données à partir de deux tables customers et payments en utilisant une jointure interne, vous pouvez utiliser l’instruction suivante:

CREATE VIEW customerPayments AS
SELECT customerName, checkNumber, paymentDate, amount
FROM customers
INNER JOIN payments USING (customerNumber);
Entity-Relationship Diagram

Une fois que vous avez exécuté l’instruction CREATE VIEW, MySQL crée la vue et la stocke dans la base de données. Vous pouvez maintenant référencer la vue comme une table dans les instructions SQL. Par exemple, vous pouvez interroger les données à partir de la vue customerPayments en utilisant l’instruction SELECT:

SELECT * FROM customerPayments;

Comme vous pouvez le voir, la syntaxe est beaucoup plus simple. Notez qu’une vue ne stocke pas physiquement les données. Lorsque vous émettez l’instruction SELECT contre la vue, MySQL exécute la requête sous-jacente spécifiée dans la définition de la vue et renvoie l’ensemble des résultats. Pour cette raison, parfois, une vue est appelée une table virtuelle.

MySQL vous permet de créer une vue basée sur une instruction SELECT qui récupère des données à partir d’une ou plusieurs tables. Cette image illustre une vue basée sur les colonnes de plusieurs tables:

En outre, MySQL permet même de créer une vue qui ne fait pas référence à une table. Mais vous trouverez rarement ce type de vue en pratique. Par exemple, vous pouvez créer une vue appelée daysofweek qui renvoie les 7 jours d’une semaine en exécutant la requête suivante:

CREATE VIEW daysofweek (day) AS
SELECT 'Mon'
UNION SELECT 'Tue'
UNION SELECT 'Web'
UNION SELECT 'Thu'
UNION SELECT 'Fri'
UNION SELECT 'Sat'
UNION SELECT 'Sun';

Et vous pouvez interroger les données à partir de la vue daysofweek comme suit:

SELECT * FROM daysofweek;

Les avantages des vues MySQL sont les suivants:

  1. Simplifier les requêtes complexes: Les vues aident à simplifier les requêtes complexes. Si vous avez une requête complexe fréquemment utilisée, vous pouvez créer une vue basée dessus afin que vous puissiez faire référence à la vue en utilisant une simple instruction SELECT au lieu de taper la requête à nouveau.
  2. Masquer certaines données à certains utilisateurs: Les vues peuvent être utilisées pour masquer certaines données à certains utilisateurs. Par exemple, vous pouvez créer une vue qui ne renvoie que les colonnes d’une table auxquelles un utilisateur spécifique a accès. En SQL, les protections d’une vue ne sont pas forcément les mêmes que celles des tables sous-jacentes.

  3. Réduire les erreurs de codage: En utilisant des vues, vous pouvez réduire les erreurs de codage en éliminant la nécessité de taper des requêtes complexes à plusieurs reprises.

Exemple de requête complexe simplifiée avec une vue

Supposons que vous ayez une base de données de gestion des commandes avec les tables ordersorderDetailsproducts et customers. Vous souhaitez créer un rapport qui affiche les informations suivantes pour chaque commande: numéro de commande, date de commande, nom du client, nombre total d’articles commandés et montant total de la commande.

Sans utiliser de vue, vous devriez écrire une requête complexe qui joint les quatre tables et utilise des fonctions d’agrégation pour calculer le nombre total d’articles et le montant total de la commande. La requête ressemblerait à ceci:

SELECT o.orderNumber, o.orderDate, c.customerName,
       SUM(od.quantityOrdered) AS totalQuantity,
       SUM(od.quantityOrdered * od.priceEach) AS totalPrice
FROM orders o
INNER JOIN customers c ON o.customerNumber = c.customerNumber
INNER JOIN orderDetails od ON o.orderNumber = od.orderNumber
INNER JOIN products p ON od.productCode = p.productCode
GROUP BY o.orderNumber;
Entity-Relationship Diagram

Comme vous pouvez le voir, cette requête est assez complexe et peut être difficile à comprendre pour quelqu’un qui n’est pas familier avec la structure de la base de données.

Cependant, vous pouvez simplifier cette requête en créant une vue appelée orderSummary basée sur cette requête:

CREATE VIEW orderSummary AS
SELECT o.orderNumber, o.orderDate, c.customerName,
       SUM(od.quantityOrdered) AS totalQuantity,
       SUM(od.quantityOrdered * od.priceEach) AS totalPrice
FROM orders o
INNER JOIN customers c ON o.customerNumber = c.customerNumber
INNER JOIN orderDetails od ON o.orderNumber = od.orderNumber
INNER JOIN products p ON od.productCode = p.productCode
GROUP BY o.orderNumber;

Entity-Relationship Diagram

Une fois que vous avez créé la vue orderSummary, vous pouvez interroger les données à partir de cette vue en utilisant une simple instruction SELECT:

SELECT * FROM orderSummary;

Comme vous pouvez le voir, l’utilisation d’une vue simplifie grandement la requête et la rend beaucoup plus facile à comprendre.

Plus d'infos sur les vues 

https://apprendre-php.com/tutoriels/tutoriel-28-mysql-5-0-les-vues.html

 

 

Modifié le: jeudi 26 octobre 2023, 05:57