2.2 · Éditeur de requêtes & SQL

Niveau 2 · Intermédiaire : données, requêtes & états

2.2Éditeur de requêtes & SQL

Objectif : Créer des requêtes avec l'éditeur visuel (sélection, jointures, calculs) et écrire du SQL pour interroger efficacement les données.
Temps estimé : 11 min · lecture autonome · Si vous n'avez que 5 min : lisez « L'essentiel en 30s » + le schéma.

L'essentiel en 30 secondes

  • Une requête est une interrogation de la base ; WinDev offre deux approches complémentaires : l'éditeur de requêtes visuel (qui génère le SQL) et le SQL direct pour les cas complexes.
  • Les briques SQL essentielles : SELECT (quoi), FROM (où), WHERE (filtrer), ORDER BY (trier), JOIN (combiner des fichiers liés), GROUP BY + agrégats (SUM, COUNT, AVG, MIN/MAX).
  • Deux bonnes pratiques majeures : rendre la requête paramétrée (réutilisable) et filtrer côté base avec WHERE plutôt que tout ramener puis trier en WLangage.

Mini-cas filé — Yacine interroge les ventes de son négoce

Yacine, développeur WinDev dans une PME de négoce de matériel électrique à Oran, doit afficher, à côté de chaque commande, le nom du client et non son seul code. Il ouvre l'éditeur de requêtes visuel, choisit les fichiers Commande et Client, coche les rubriques utiles et pose une jointure sur le code client : WinDev génère le SQL, sans risque d'erreur de syntaxe. Pour le tableau de bord du patron, il ajoute un GROUP BY avec SUM afin d'obtenir le chiffre d'affaires par client. Il réalise ensuite que la requête est écrite en dur sur une période : il la rend paramétrée ({pDateDebut, pDateFin}) pour la réutiliser d'un mois sur l'autre, et veille à laisser le filtrage côté base (WHERE) plutôt que de ramener toutes les lignes et de trier en WLangage.

Cas autonome de cette section : il revient dans le cours, le schéma, le script et le défi 48h de la section 2.2.

1. Deux façons d'écrire une requête

Une requête est une interrogation de la base : « donne-moi les commandes de plus de 1000 € avec le nom du client ». WinDev offre (1) l'éditeur de requêtes : un outil visuel où l'on choisit les fichiers, coche les rubriques, définit conditions, tris et regroupements — WinDev génère le SQL correspondant, idéal pour démarrer sans erreur de syntaxe ; (2) le SQL direct (SELECT, FROM, WHERE, ORDER BY…), pour les cas complexes ou quand on maîtrise le langage. HFSQL supportant le SQL, les deux cohabitent.

2. Les briques SQL et la jointure

Les notions essentielles : SELECT (quelles rubriques), FROM (quels fichiers), WHERE (filtrer les lignes), ORDER BY (trier). La jointure (JOIN) combine plusieurs fichiers liés — indispensable pour afficher le nom du client à côté de sa commande. GROUP BY avec les agrégats (SUM, COUNT, AVG, MIN/MAX) produit les statistiques et totaux par catégorie.

3. Réutiliser et filtrer côté base

Une requête est réutilisable partout : source d'un champ Table, source d'un état, ou parcourue en WLangage. Deux bonnes pratiques : les paramètres (la ville ou la période devient une variable au lieu d'être écrite en dur — une requête réutilisable au lieu de dix) et le filtrage côté base (laisser le moteur filtrer avec WHERE plutôt que tout ramener et trier en WLangage : infiniment plus rapide).

Erreur d'interprétation fréquente : « Ramener toutes les données puis trier en WLangage, c'est équivalent ; écrire du SQL direct est obligatoire ; et une requête ne sert qu'à une seule chose ». Non, triple erreur. Tout ramener sature le réseau et la mémoire pour finalement jeter la majorité des lignes : le filtrage côté base (WHERE) laisse le moteur utiliser ses index et ne transmettre que l'utile — l'erreur de performance la plus courante. L'éditeur visuel suffit pour la plupart des cas et génère le SQL. Et une requête est réutilisable comme source de table, d'état ou en WLangage. Yacine paramètre donc ses requêtes et filtre côté base.
De la question SQL au résultat filtré L'éditeur visuel ou le SQL direct expriment la même interrogation ; le moteur filtre, joint et regroupe côté base. Éditeur visuel On cochefichiers & rubriquesSQL généré SELECT / FROM/ WHERE / JOINGROUP BY + agrégats SUM,COUNT, AVGRésultat filtré Trié,paramétré, réutilisable
L'éditeur visuel ou le SQL direct expriment la même interrogation ; le moteur filtre, joint et regroupe côté base.
Version texte du schéma (SEO / lecteurs d'écran / traduction) : 1) Yacine, développeur WinDev dans une PME de négoce de matériel électrique à Oran, apprend qu'une requête est une interrogation de la base, à écrire soit avec l'éditeur de requêtes visuel (qui génère le SQL), soit en SQL direct (SELECT/FROM/WHERE/ORDER BY). 2) Il retient les briques essentielles : SELECT (quoi), FROM (où), WHERE (filtrer), ORDER BY (trier), JOIN (combiner des fichiers liés) et GROUP BY + agrégats (SUM, COUNT, AVG, MIN/MAX) pour les statistiques. 3) Pour son application, il joint Client et Commande pour afficher le nom du client, calcule le chiffre d'affaires par client, rend la requête paramétrée sur la période et laisse le filtrage côté base. Leçon : une requête est réutilisable comme source de table, d'état ou en WLangage, et le filtrage côté base est infiniment plus rapide.

🔎 Exemple concret — 🔎 Exemple concret — Jointure & paramètres

Afficher le nom du client et calculer le CA par client : Yacine écrit le SQL correspondant.

SELECT C.NomClient, SUM(L.MontantLigne) AS ChiffreAffaires
FROM   Client C
JOIN   Commande CD      ON CD.CodeClient = C.CodeClient
JOIN   LigneCommande L  ON L.NumCommande = CD.NumCommande
WHERE  CD.DateCommande >= {pDateDebut}   // parametre, pas en dur
GROUP  BY C.NomClient
ORDER  BY ChiffreAffaires DESC

Lecture   : JOIN affiche le nom du client ; GROUP BY + SUM donnent le CA
Reflexe   : filtrer C0TE BASE (WHERE) et parametrer la periode

Lecture : JOIN combine les fichiers liés pour afficher le nom du client ; GROUP BY + SUM totalisent le chiffre d'affaires par client.

Leçon : le paramètre {pDateDebut} rend la requête réutilisable, et WHERE laisse le moteur filtrer côté base — bien plus rapide.

Vocabulaire de la section

Requête
Une interrogation de la base : sélectionner, filtrer, trier, regrouper des données ; réutilisable comme source de table, d'état ou en WLangage.

Exemple simple : Yacine écrit une requête « chiffre d'affaires par client ».

Ce que ce n'est pas : un simple affichage de fichier sans condition ni tri.

Réflexe : interroger les données → une requête.

Éditeur de requêtes
L'outil visuel de WinDev : on choisit les fichiers, coche les rubriques, définit conditions, tris et regroupements ; WinDev génère le SQL.

Exemple simple : Yacine joint Client et Commande sans écrire une ligne de SQL.

Ce que ce n'est pas : taper la requête à la main en SQL direct.

Réflexe : créer visuellement et sans erreur de syntaxe → l'éditeur de requêtes.

WHERE (filtrage)
La condition qui ne garde que certaines lignes ; posée côté base, elle laisse le moteur utiliser ses index et ne transmettre que l'utile.

Exemple simple : Yacine n'affiche que les commandes de la période voulue.

Ce que ce n'est pas : tout charger puis filtrer en WLangage après coup.

Réflexe : réduire le volume transmis → filtrer côté base avec WHERE.

Jointure (JOIN)
Combiner plusieurs fichiers liés dans une même requête — indispensable pour afficher le nom du client à côté de sa commande.

Exemple simple : Yacine joint Commande et Client sur le code client.

Ce que ce n'est pas : afficher le seul identifiant du client, sans son nom.

Réflexe : croiser des informations de plusieurs fichiers → une jointure.

GROUP BY + agrégats
Regrouper pour calculer des statistiques : SUM (somme), COUNT (nombre), AVG (moyenne), MIN/MAX.

Exemple simple : Yacine totalise le chiffre d'affaires par client.

Ce que ce n'est pas : lister chaque commande ligne à ligne sans total.

Réflexe : totaux par catégorie → GROUP BY avec agrégats.

En pratique — En pratique — Créer et exploiter une requête

  1. Créez une requête avec l'éditeur visuel : choisissez les fichiers, cochez les rubriques utiles, ajoutez les conditions de sélection et le tri, comme Yacine.
  2. Ajoutez une jointure si vous avez besoin d'informations de plusieurs fichiers liés (afficher le nom du client sur la ligne de commande).
  3. Pour des statistiques, utilisez GROUP BY avec les agrégats (SUM, COUNT, AVG) — par exemple le chiffre d'affaires par client ou par commercial.
  4. Rendez la requête paramétrée (la ville, la période deviennent des paramètres) pour la réutiliser, et laissez le filtrage se faire côté base (WHERE).
Vous savez interroger vos données visuellement ou en SQL, joindre plusieurs fichiers, calculer des statistiques et réutiliser vos requêtes comme source de tables et d'états.

Script pas-à-pas — écrire la requête de Yacine (5 min)

1) Ouvrez l'éditeur de requêtes, ajoutez les fichiers Client, Commande et LigneCommande. 2) Cochez NomClient et posez une jointure sur le code client. 3) Ajoutez un GROUP BY sur NomClient avec SUM(MontantLigne) pour le chiffre d'affaires. 4) Déclarez un paramètre {pDateDebut} au lieu d'écrire la période en dur. 5) Laissez le filtrage côté base (WHERE) et testez le résultat.

Cette requête servira de source à un champ Table (2.4) et à un état (2.3) : écrivez-la une fois, réutilisez-la partout.

Modèle copier-coller — ma requête paramétrée

SELECT C.NomClient, SUM(L.MontantLigne) AS CA
FROM   Client C JOIN Commande CD ON CD.CodeClient = C.CodeClient
                 JOIN LigneCommande L ON L.NumCommande = CD.NumCommande
WHERE  CD.DateCommande >= {pDateDebut}
GROUP  BY C.NomClient   ORDER BY CA DESC
Regles : (1) requete parametree = reutilisable
         (2) filtrage COTE BASE (WHERE) > tout ramener et trier en WLangage

Sélection simple

Yacine liste les produits dont le stock est inférieur au seuil, avec un simple WHERE, sans jointure.

Jointure client

Yacine affiche le nom du client à côté de chaque commande en joignant Commande et Client.

Statistiques par commercial

Yacine regroupe avec GROUP BY et SUM pour le chiffre d'affaires par commercial.

Requête paramétrée

Yacine remplace la période écrite en dur par {pDateDebut, pDateFin} : la requête sert chaque mois.

Prudence : Rappel de prudence : une requête peut être lourde pour la base comme pour le réseau. Gardez le réflexe de filtrer côté base (WHERE) plutôt que de tout ramener puis trier en WLangage, vérifiez que les rubriques filtrées et jointes sont indexées, et éviter d'exécuter une requête non bornée (sans condition) sur un gros fichier de production. Enfin, ne travaillez pas directement sur les données réelles pour vos essais : dupliquez ou utilisez un jeu de test pour ne pas altérer les données du négoce.

✓ Bonnes pratiques

  • Commencer par l'éditeur visuel : il génère le SQL sans erreur de syntaxe.
  • Utiliser une jointure pour afficher les informations liées (nom du client).
  • Paramétrer la requête et filtrer côté base (WHERE).

✗ Pièges fréquents

  • Tout ramener puis trier en WLangage (saturation réseau/mémoire).
  • Écrire les critères en dur au lieu de paramétrer la requête.
  • Oublier la jointure et n'afficher que le code client.

Points clés à retenir

  • Deux approches complémentaires : éditeur de requêtes visuel (génère le SQL) et SQL direct.
  • Notions clés : SELECT, FROM, WHERE, ORDER BY, JOIN, GROUP BY + agrégats (SUM, COUNT, AVG, MIN/MAX).
  • Une requête est réutilisable comme source de table, d'état ou parcourue en WLangage.
  • Bonnes pratiques : requêtes paramétrées et filtrage côté base (WHERE).

Défi 48h — appliquez demain

Comme Yacine, créez une requête qui joint deux fichiers liés (par exemple Commandes et Clients) pour afficher le nom du client, puis ajoutez un GROUP BY avec SUM pour un total par client. Transformez enfin la période en paramètre {pDateDebut} et expliquez en une phrase pourquoi filtrer côté base est plus rapide que de tout ramener et trier en WLangage.

Checklist sortie de section
  • Je crée une requête avec l'éditeur visuel et je lis le SQL généré.
  • Je sais utiliser une jointure et des agrégats (GROUP BY, SUM).
  • Je paramètre mes requêtes et filtre côté base.
Auto-évaluation 1-5 : est-ce que je sais quand utiliser l'éditeur visuel ou le SQL direct ?Auto-évaluation 1-5 : sais-je joindre des fichiers et filtrer côté base plutôt qu'en WLangage ?

Questions fréquentes

Pourquoi faut-il filtrer côté base plutôt que ramener toutes les données ?

Parce que le moteur utilise ses index et ne transmet que les lignes utiles, alors que tout ramener sature le réseau et la mémoire pour finalement jeter la majorité des données — l'erreur de performance la plus courante. Mettez les conditions dans la requête (WHERE), faites trier par la base (ORDER BY) et déléguez les agrégats.

L'éditeur de requêtes suffit-il, ou faut-il écrire du SQL direct ?

L'éditeur visuel suffit pour la grande majorité des besoins (sélection, filtres, tris, jointures, regroupements) et génère le SQL sans erreur de syntaxe. Le SQL direct sert aux cas complexes ou lorsque vous voulez un contrôle fin ; les deux approches cohabitent puisque HFSQL supporte le SQL.

Vérifiez votre compréhension

Pourquoi faut-il filtrer côté base plutôt que ramener toutes les données ?

Ressources supplémentaires (optionnel, pour aller plus loin)

Examen du niveau 2Questions inédites et durcies pour valider vos acquis