|
|
|
|
|
- Présentation
- Requête SQL avec une jointure externe vers un fichier de données (éditeur de requêtes)
- Requête SQL avec une jointure externe en programmation
Comment créer une requête avec une jointure externe ?
En langage SQL, une jointure externe permet d'exclure ou d'inclure des enregistrements d'un fichier de données qui ont ou qui n'ont pas de correspondances dans des fichiers liés. Par défaut, lors de la création d'une requête entre 2 fichiers de données liés, seuls les enregistrements qui ont une correspondance entre les 2 fichiers sont traités. Pour traiter les enregistrements qui n'ont pas de correspondance, il est nécessaire d'ajouter une jointure externe. Nous allons voir comment effectuer une jointure externe en utilisant : Requête SQL avec une jointure externe vers un fichier de données (éditeur de requêtes) Cette requête permet de sélectionner les enregistrements d'un fichier de données (fichier principal) avec une correspondance (jointure) vers un autre fichier de données (fichier secondaire ou fichier lié), sachant que tous les enregistrements du fichier principal n'ont pas obligatoirement de correspondance dans le fichier secondaire. Dans cet exemple, nous réalisons la sélection des enregistrements du fichier CLIENT (fichier principal) avec la somme des commandes du fichier COMMANDE (fichier secondaire) de chaque client. Certains clients peuvent ne pas avoir de commandes. Il est donc nécessaire d'ajouter dans la requête une jointure externe pour traiter les clients qui n'ont pas de commandes. Les différentes étapes pour créer cette requête SQL avec une jointure externe sont les suivantes : - Cliquez sur parmi les boutons d'accès rapide.
- Dans la fenêtre qui s'affiche, cliquez sur "Requêtes".
- L'assistant de création d'une requête se lance.
- Choisissez de créer une requête de sélection (option "Sélection (SELECT)").
Passez à l'étape suivante de l'assistant. - La fenêtre de description de la requête s'affiche.
- Donnez un nom et un libellé à la requête :
- Dans la zone de gauche de la fenêtre de description, choisissez les rubriques du fichier de données à manipuler (dans notre exemple, le fichier CLIENT et les rubriques NomClient, Société et Ville puis le fichier COMMANDE et la rubrique TOTALHT).
- Double-cliquez sur les noms des rubriques pour les ajouter dans la liste des rubriques de la requête :
- Pour effectuer la somme des commandes, dans la partie droite de l'éditeur, cliquez sur le bouton "Somme". La fenêtre suivante apparaît sous l'éditeur :
- Validez. La fenêtre de description de la requête est mise à jour :
- Validez la fenêtre de description de la requête. La requête suivante apparaît sous l'éditeur :
- Pour ajouter la jointure externe, double-cliquez sur la zone "Jointure".
- La fenêtre de description de la jointure est affichée.
- Pour sélectionner le sens de la jointure externe, cochez la case "inclure..." correspondant au sens souhaité. Dans notre exemple, les enregistrements du fichier CLIENT qui n'ont pas de commandes sont inclus.
- Validez. La fenêtre de description de la requête est mise à jour.
- Enregistrez la requête (Ctrl + S).
- Visualisez le code SQL en appuyant sur la touche F2 :
- Testez la requête (GO dans les boutons d'accès rapide).
- La requête peut être exécutée dans le programme à l'aide de la fonction HExécuteRequête.
Requête SQL avec une jointure externe en programmation Les requêtes SQL peuvent être écrites directement par programmation dans le code WLangage. Pour cela, il faut : - Créer une variable de type Source de données pour représenter la requête en exécution.
- Créer une variable de type chaîne de caractères pour contenir le code SQL de la requête et écrire le code SQL dans cette variable.
- Exécuter la requête SQL à l'aide de la fonction HExécuteRequêteSQL.
- Parcourir le résultat à l'aide des fonctions HLitXXX.
Exemple de code Src1 est une Source de Données
sCodeSQL est une chaîne
sCodeSQL = [
SELECT
CLIENT.NomClient AS NomClient,
CLIENT.Societe AS Societe,
CLIENT.Ville AS Ville,
SUM(COMMANDE.TotalHT) AS la_somme_TotalHT
FROM
CLIENT
LEFT OUTER JOIN
COMMANDE
ON CLIENT.NumClient = COMMANDE.NumClient
GROUP BY
CLIENT.NomClient,
CLIENT.Societe,
CLIENT.Ville
]
HExécuteRequêteSQL(Src1, hRequêteDéfaut, sCodeSQL)
POUR TOUT Src1
Trace(Src1.NomClient, Src1.Societe, Src1.la_somme_TotalHT)
FIN
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|