SQL, Quelle est la différence entre une vue et la Clause With ?
En SQL, les vues et la clause WITH sont des outils puissants permettant de manipuler et d’organiser les données de manière efficace. Bien que les deux facilitent l’accès à des résultats complexes sans affecter directement les tables sous-jacentes, elles diffèrent dans leur utilisation et leur fonctionnement.
La vue est une structure permanente dans la base de données qui permet de regrouper et d’abstraire des requêtes complexes, offrant ainsi une interface simplifiée pour les utilisateurs finaux. En revanche, la clause WITH, également appelée “table temporaire”, est une sous-requête définie dans une instruction SQL, souvent utilisée pour rendre une requête plus lisible et modulaire, sans la nécessité de créer une structure permanente.
Cet article explore les différences entre ces deux concepts, leurs avantages et inconvénients respectifs, et leurs applications dans des contextes différents, afin de vous aider à choisir la solution la plus adaptée selon vos besoins.
Définition générale
Vue
Une vue SQL (ou view en anglais) est une requête enregistrée dans une base de données, qui permet de visualiser les résultats d’une ou plusieurs tables sans modifier les données réelles. C’est essentiellement un accés ponctuel sur les données qui combine des informations provenant de différentes tables (ou autres vues), qui applique des filtres spécifiques, des agrégations, ou d’autres transformations particulières. Tout comme une table, une vue est un ensemble de colonnes nommées et de lignes de données. En d’autres termes, il s’agit d’une table virtuelle dont le contenu est défini par une requete.
Clause With
Il est important de préciser avant tout qu’une clause with peut être composante d’une vue définie ci-dessus. Cependant elle peut être utilisé indépendamment d’une vue dans le cadre d’une requete indépendante. La clause With de SQL est utilisée pour créer des tables temporaires. Il s’agit de sous requetes utilisées dans une requete principale. Cela correspond à une interrogation simple et définie dans l’étendue d’’exécution d’une instruction simple de type SELECT, INSERT, … Celle-ci permet, bien entendu, de donner un nom à la table temporaire (MaxDapdtdeb dans l’exemple ci-dessous).
Exemple de Clause With :
WITH MaxDapdtdeb AS (
SELECT
dosid, dacordre, MAX(dapdtdeb) AS MaxDapdtdeb
FROM
dosactpaiement
WHERE
dapdtfin IS NULL
GROUP BY
dosid, dacordre
)
Comparatif
Vue
Utilisation : Les vues sont utilisées pour simplifier des requêtes complexes, rendant les données plus accessibles aux utilisateurs non techniques.
Permanent : L’accés est permanent car la vue est sauvegardée en meme temps que la base de données. Les vues sont enregistrées en dur dans le schéma.
Canal d’appel : La vue est appelable depuis différents canaux (Logiciel, autre requete, sessions…)
Contrôle d’accés : Le contrôle d’accés est géré au travers des permissions que le user à sur la base de données
Contrôle de la liste de colonne : La vue est souvent utilisée pour masquer des colonnes sensibles ou interdite au sein d’une ou plusieurs tables (Exemple de donner à sécuriser : numéro de sécurité sociale présent dans une table d’identification du personnel avec le nom et prénom accessible)
Enregistrements : Il est possible de limité le nombre d’enregistrement visible dans la requete afin que la personne ou le système qui requete la vue ne voit qu’un nombre limité d’enregistrement (Echantillon des 100 premières lignes par exemple)
Jointure et compétences techniques : Nous l’avons précisé dans la partie utilisation, les vues permettent également la mise à disposition de données jointées pour des personnes non hautement qualifiées. Les vues permettent d’abstraire la complexité des requêtes complexes. L’utilisateur peut interroger la vue comme s’il s’agissait d’une simple table, sans avoir à se soucier des détails sous-jacents (qui restent aux soins des administrateurs de bases de données).
Indexation : Dans certains cas particuliers, ou des besoins de performances sont exigées notamment dans le cadre d’applications critiques ou stratégiques, il est possible de mettre en place une indexation sur la vue afin d’avoir des temps de réponse et mises à disposition des données très rapides.
Clause view
Table Temporaire : Une fois la clause with appelée, elle disparait dès la fin de l’execution de la requete
Canal d’appel : Une clause with est appelable uniquement dans une requete.
Exécution : L’appel est exécuté en premier dans la requete globale afin de pouvoir être appelée par la suite dans la requete principale par exemple.
Cascade et duplication : Cette fonction peut être appelée dans d’autres sous requetes en cascade ou dans la requete principale. Elle peut peut-être référencée plusieurs fois dans la requête principale, ce qui évite de devoir dupliquer du code.
Simplification de lecture : Elle permet de simplifier les cas de requetes difficiles à analyser (avec encapsulation en cascade de sous-requetes). Elle les rend plus faciles à lire visuellement et à comprendre, surtout lorsqu’elles contiennent plusieurs sous-requêtes complexes.
Modularité : Vous pouvez découper des requêtes complexes en plusieurs modules (ou sous requetes comparatives) bien définies. C’est ainsi que vous pourrez facilement faire des essais d’appel de différents modules (Voir meme d’afficher les résultats les uns après les autres – avec UNION). Cela peut s’avérer très utile lorsque vous êtes en phase d’écriture (particulièrement en début de projet) de votre requete globale d’appeler un module et\ou un autre afin de comparer rapidement les résultats.
Conclusion
Pour un travail ponctuel et non impacté par la performance, il est conseillé d’utiliser la Clause with notamment dans les phases de recherches en initiation de projet ou lors de migration de données par exemple.
La mise en place de vue est quant à elle recommandé dans le cadre de la limitation d’accés à certaines données sécurisées dans une table, d’appel depuis plusieurs canaux différents, de la mise à disposition de données préformatées à des collaborateurs qui n’ont pas d’expertise en administration de base de données ainsi que pour les projets nécessitants des performances en matière de temps de réponse.
NB : Cet article est rédigé concernant un cas général et non particulier. Il existe des exceptions qui ne sont pas abordés dans cet écrit.