DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / Editeurs / Editeur de requêtes / SQL
  • Présentation
  • Jointures internes
  • Définition
  • Format d'utilisation
  • Exemple :
  • Jointures externes
  • Définition
  • Les différents types de jointures externes
  • Format d'utilisation
  • Exemple 1 :
  • Exemple 2 :
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Présentation
Pour sélectionner des enregistrements provenant de plusieurs fichiers de données, il est nécessaire d'utiliser des jointures dans la requête SQL.
Deux types de jointures peuvent être utilisés dans des requêtes en code SQL :
  • les jointures internes.
  • les jointures externes.
Remarque : Ces jointures sont utilisables :
  • dans le code SQL des requêtes créées sous l'éditeur de requêtes et exécutées par la fonction HExécuteRequête.
  • dans le code SQL des requêtes exécutées avec la fonction du WLangage HExécuteRequêteSQL.
Il est impossible d'effectuer des imbrications de jointures.
Pour plus de détails sur les instructions SQL, consultez une documentation spécifique au langage SQL.
Pour connaître toutes les commandes SQL (fonctions, clauses, opérateurs, ...) utilisables dans une requête SQL gérée par HFSQL, consultez Commandes utilisables dans une requête SQL gérée par HFSQL.
Jointures internes

Définition

Une jointure interne permet de sélectionner les enregistrements ayant des correspondances entre deux fichiers joints.
Par exemple, pour lister les clients ayant déjà passé des commandes, il est nécessaire de lier les fichiers "Client" et "Commande" grâce à une jointure interne. La requête sélectionnera uniquement les clients liés à au moins un numéro de commande. Les clients n'ayant jamais passé de commande ne seront pas listés.

Format d'utilisation

Différentes syntaxes sont possibles :
  • Syntaxe 1 : Correspondance sur des rubriques identiques présentes dans des fichiers différents (utilisation du WHERE).
    SELECT ...
    FROM Fichier1, Fichier2, Fichier3
    WHERE Fichier1.NomRubrique1 = Fichier2.NomRubrique1
    Fichier2.NomRubrique2 = Fichier3.NomRubrique2
  • Syntaxe 2 : Correspondance sur des rubriques identiques présentes dans des fichiers différents (utilisation de INNER JOIN) : syntaxe compatible avec la majorité des bases de données : SQL Server, Access, MySQL et Oracle (sauf versions très anciennes de Oracle).
    SELECT ...
    FROM (Fichier1 INNER JOIN Fichier2
    ON Fichier1.NomRubrique1 = Fichier2.NomRubrique1)
    INNER JOIN Fichier3
    ON Fichier2.NomRubrique2 = Fichier3.NomRubrique2
Il est également possible de réaliser des liaisons entre plusieurs fichiers sur des rubriques différentes.

Exemple :

SELECT CLIENT.NomClient,
COMMANDE.NumCde
FROM CLIENT, COMMANDE
WHERE CLIENT.NumClient = COMMANDE.NumClient
équivalent à :
SELECT CLIENT.NomClient,
COMMANDE.NumCde
FROM (CLIENT INNER JOIN COMMANDE
ON CLIENT.NumClient = COMMANDE.NumClient)
Jointures externes

Définition

Une jointure externe permet de sélectionner à la fois :
  • les enregistrements ayant des correspondances entre les deux fichiers joints.
  • les enregistrements n'ayant pas de correspondance dans le premier, le second ou dans tous les fichiers joints.
Par exemple, pour connaître le montant total dépensé par chaque client :
  • En utilisant une jointure interne, seuls les clients ayant déjà passé une commande (dont le montant dépensé sera différent de 0) seront sélectionnés.
  • En utilisant une jointure externe, tous les clients seront sélectionnés, même ceux n'ayant jamais passé de commande.

Les différents types de jointures externes

FULL OUTER JOINPermet de sélectionner :
  • les enregistrements satisfaisant à la jointure.
  • les enregistrements du premier fichier cité qui ne satisfont pas la jointure. Le nom du premier fichier cité est placé à gauche de la jointure OUTER JOIN.
  • les enregistrements du second fichier cité qui ne satisfont pas la jointure. Le nom du second fichier cité est placé à droite de la jointure OUTER JOIN.
LEFT OUTER JOINJointure la plus courante. Permet de sélectionner :
  • les enregistrements satisfaisant à la jointure.
  • les enregistrements du premier fichier cité qui ne satisfont pas la jointure. Le nom du premier fichier cité est placé à gauche de la jointure OUTER JOIN.
RIGHT OUTER JOINPermet de sélectionner :
  • les enregistrements satisfaisant à la jointure.
  • les enregistrements du second fichier cité qui ne satisfont pas la jointure. Le nom du second fichier cité est placé à droite de la jointure OUTER JOIN.

Format d'utilisation

Les syntaxes disponibles sont les suivantes :
  • Syntaxe 1 : Correspondance sur des rubriques identiques présentes dans des fichiers différents.
    SELECT ...
    FROM (Fichier1 LEFT/RIGHT/FULL JOIN Fichier2
    ON Fichier1.NomRubrique1 = Fichier2.NomRubrique1)
    LEFT/RIGHT/FULL JOIN Fichier3
    ON Fichier2.NomRubrique2 = Fichier3.NomRubrique2
  • Syntaxe 2 : Correspondance sur des rubriques identiques présentes dans des fichiers différents : syntaxe compatible avec SQL Server, Access, et MySQL.
    SELECT ...
    FROM Fichier1 LEFT/RIGHT/FULL JOIN Fichier2
    ON Fichier1.NomRubrique1 = Fichier2.NomRubrique1,

    LEFT/RIGHT/FULL JOIN Fichier3
    ON Fichier2.NomRubrique2 = Fichier3.NomRubrique2
Il est également possible de réaliser des liaisons entre plusieurs fichiers sur des rubriques différentes.

Exemple 1 :

SELECT CLIENT.NomClient,
SUM(COMMANDE.TotalTTC) AS TotalTTC
FROM CLIENT LEFT OUTER JOIN COMMANDE
ON (CLIENT.NumClient = COMMANDE.NumClient)
GROUP BY CLIENT.NomClient

Exemple 2 :

SELECT CLIENT.NumClient,
COUNT(DISTINCT PRODUIT.Reference) AS NbProduits
FROM CLIENT LEFT OUTER JOIN COMMANDE
ON CLIENT.NumClient = COMMANDE.NumClient,
COMMANDE JOIN LIGNECDE
ON COMMANDE.NumCde = LIGNECDE.NumCde,
LIGNECDE JOIN PRODUIT
ON LIGNECDE.Reference = PRODUIT.Reference
GROUP BY CLIENT.NumClient, PRODUIT.Reference
Équivalent à :
SELECT CLIENT.NomClient,
COUNT(DISTINCT PRODUIT.Reference) AS NbProduits
FROM CLIENT, COMMANDE, LIGNECDE, PRODUIT
WHERE CLIENT.NumClient = COMMANDE.NumClient(+)
AND COMMANDE.NumCde = LIGNECDE.NumCde
AND LIGNECDE.Reference = PRODUIT.Reference
GROUP BY CLIENT.NumClient, PRODUIT.Reference
Également équivalent à :
SELECT CLIENT.NumClient,
COUNT(DISTINCT PRODUIT.Reference) AS NbProduits
FROM ((CLIENT LEFT OUTER JOIN COMMANDE
ON CLIENT.NumClient = COMMANDE.NumClient)
JOIN LIGNECDE
ON COMMANDE.NumCde = LIGNECDE.NumCde)
JOIN PRODUIT
ON LIGNECDE.Reference = PRODUIT.Reference
GROUP BY CLIENT.NumClient, PRODUIT.Reference
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 25/05/2022

Signaler une erreur ou faire une suggestion | Aide en ligne locale