VIEW)Dans la leçon précédente, nous avons parlé des tables temporaires, qui aident à conserver des résultats intermédiaires pendant une session. Examinons maintenant un autre outil important de SQL : les vues. Elles aussi simplifient le travail avec des requêtes complexes, mais d’une autre manière.
Une vue permet d’enregistrer une requête SELECT sous un nom distinct, puis de la réutiliser ensuite. C’est particulièrement utile dans les rapports, l’analyse de données et les scénarios où le même jeu de résultats doit être consulté plusieurs fois.
Une vue (VIEW) est un objet de base de données qui stocke non pas les données elles-mêmes, mais la requête SQL servant à les obtenir.
Autrement dit, on peut considérer une vue comme une « table virtuelle » :
SELECT ;Lorsque vous interrogez une vue, le SGBD exécute généralement la requête enregistrée et renvoie le résultat actuel à partir des tables sources.
Une vue se crée avec CREATE VIEW :
CREATE VIEW view_name AS
SELECT column1, column2, column3
FROM table_name
WHERE condition;
Ensuite, vous pouvez interroger la vue presque comme une table :
SELECT *
FROM view_name;
Il est important de comprendre qu’une vue classique stocke la logique de la requête, et non une copie distincte du résultat.
Supposons que nous voulions souvent obtenir la liste des clients avec le montant total de leurs paiements. Au lieu d’écrire la même requête à chaque fois, nous pouvons créer une vue :
CREATE VIEW customer_payment_summary AS
SELECT c.customer_id,
c.first_name,
c.last_name,
SUM(p.amount) AS total_amount,
COUNT(p.payment_id) AS payment_count
FROM customer c
JOIN payment p ON c.customer_id = p.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name;
Cette logique devient alors beaucoup plus simple à réutiliser :
SELECT customer_id, first_name, last_name, total_amount
FROM customer_payment_summary
ORDER BY total_amount DESC;
SELECT AVG(total_amount) AS avg_customer_revenue
FROM customer_payment_summary;
Résultat : l’agrégation complexe est définie une seule fois dans la vue, puis vous pouvez travailler avec elle comme avec un jeu de données classique dans plusieurs requêtes distinctes.
Même si une vue ressemble souvent à une table, il existe entre elles des différences importantes.
INSERT, UPDATE ou DELETE.VIEW.Il est utile d’utiliser des vues si :
JOIN, filtres et agrégations complexes derrière un nom plus simple ;Par exemple, vous pouvez créer une vue contenant uniquement les films coûteux :
CREATE VIEW expensive_films AS
SELECT film_id, title, rental_rate, rating
FROM film
WHERE rental_rate >= 4.00;
SELECT title, rental_rate
FROM expensive_films
ORDER BY rental_rate DESC, title;
Résultat : la logique principale de filtrage est enregistrée à un seul endroit, et dans les requêtes suivantes il n’est plus nécessaire de répéter à chaque fois la condition WHERE rental_rate >= 4.00.
Les vues et les tables temporaires peuvent résoudre des besoins similaires, mais il existe entre elles des différences importantes.
Si vous avez besoin d’un résultat intermédiaire qui doit exister séparément et éventuellement être retraité ensuite, une table temporaire est souvent plus adaptée. Si vous devez simplement définir une représentation pratique au-dessus de données existantes, VIEW est généralement un meilleur choix.
Dans de nombreux SGBD, les vues simples peuvent servir non seulement à lire, mais aussi à modifier des données. Par exemple, cela peut être possible si la vue repose sur une seule table et ne contient ni agrégats complexes, ni GROUP BY, ni DISTINCT, ni jointures entre plusieurs tables.
Par exemple, une vue simple peut ressembler à ceci :
CREATE VIEW active_customers_basic AS
SELECT customer_id, first_name, last_name, active
FROM customer
WHERE active = 1;
Dans certains SGBD, il est possible d’exécuter UPDATE via une telle vue. Mais il ne faut pas considérer cela comme une règle universelle : plus la logique de la vue est complexe, moins elle a de chances d’être modifiable.
En pratique, les vues sont plus souvent utilisées pour la lecture et la simplification des requêtes.
Lors du travail avec des vues, il est utile de garder plusieurs règles à l’esprit :
INSERT, UPDATE ou DELETE ;SELECT, un CTE ou une table temporaire ne serait pas plus simple ;CREATE OR REPLACE VIEW ou les règles de mise à jour des vues.Une vue bien conçue rend le SQL plus court, plus clair et plus facile à réutiliser.
Imaginons que les analystes aient régulièrement besoin d’une liste de films avec le nom de leur catégorie. Au lieu d’écrire les mêmes JOIN à chaque fois, vous pouvez créer une vue :
CREATE VIEW film_category_details AS
SELECT f.film_id,
f.title,
f.rental_rate,
c.name AS category_name
FROM film f
JOIN film_category fc ON f.film_id = fc.film_id
JOIN category c ON fc.category_id = c.category_id;
Après cela, chaque requête devient plus simple :
SELECT title, category_name, rental_rate
FROM film_category_details
WHERE category_name = 'Comedy'
ORDER BY rental_rate DESC, title;
SELECT category_name, COUNT(*) AS film_count
FROM film_category_details
GROUP BY category_name
ORDER BY film_count DESC;
Cette approche est pratique, car la relation complexe entre les tables est définie une seule fois. Ensuite, les analystes, les rapports et les applications peuvent utiliser une couche logique prête à l’emploi sans répéter en permanence la même logique de JOIN.
Points clés de cette leçon :
VIEW) stocke une requête SQL plutôt qu’une copie distincte des données.JOIN et filtres complexes.Dans la prochaine leçon, nous verrons les vues matérialisées et comprendrons en quoi elles diffèrent des vues classiques.