Définition d'une jointure
Parfois, il est nécessaire de combiner deux sources de données SQL en un seul ensemble de résultats, constitué de colonnes des deux sources de données. C'est ce qu'on appelle une jointure.

Par exemple, lors de la lecture des liaisons aériennes, il peut être nécessaire de lire également les détails sur le transporteur aérien.
Les lignes de l'ensemble de résultats sont déterminées par le type de jointure et par les conditions de jointure entre les colonnes des sources de données. Les conditions de jointure commencent par le mot-clé ON et définissent les relations entre les colonnes des sources de données.
Le type de jointure est défini par le mot-clé correspondant. Dans ABAP SQL, les types de jointure pris en charge sont INNER JOIN, LEFT OUTER JOIN et RIGHT OUTER JOIN.
Nous aborderons bientôt les différents résultats de ces types de jointure. Examinons d'abord la syntaxe ABAP SQL des jointures.

L'exemple combine les données du transporteur (ID du transporteur et nom du transporteur) et les données de connexion (ID de connexion, aéroport de départ et aéroport de destination) dans un ensemble de résultats. La source de données de gauche est la table de base de données /DMO/CARRIER alors que la table de base de données /DMO/CONNECTION sert de source de données de droite. Le mot-clé INNER JOIN entre les deux noms de source de données indique le type de jointure.
La condition de jointure après ON demande que le contenu de la zone CARRIER_ID de la table de base de données /DMO/CARRIER soit égal au contenu de la zone CARRIER_ID de la table de base de données /DMO/CONNECTION.
Dans les conditions de jointure ainsi que dans la liste de zones, la clause WHERE, etc., les colonnes des sources de données sont entièrement identifiées par le nom de la source de données et le nom de la colonne, séparés par le signe tilde ( ~ ).
Remarque

Il est possible d'adresser les noms de colonnes sans le nom de la source de données. La condition préalable est que le nom de la colonne existe uniquement dans l'une des sources de données.
Dans l'exemple, seule la table de base de données /DMO/CARRIER contient les colonnes NAME et CURRENCY_CODE, tandis que les colonnes CONNECTION_ID, AIRPORT_FROM_ID et AIRPORT_TO_ID existent uniquement dans la table de base de données /DMO/CONNECTION. Par conséquent, ces noms de colonnes sont uniques sans prédécesseur/DMO/CARRIER~ ou /DMO/CONNECTION~.
D'autre part, les deux tables contiennent une colonne CARRIER_ID. Par conséquent, pour cette zone /DMO/CARRIER~ ou /DMO/CONNECTION~ est obligatoire.

Il est recommandé d'utiliser des alias pour les noms de sources de données afin de raccourcir l'instruction et d'améliorer la lisibilité. Pour ce faire, utilisez l'option AS après le nom de la source de données. Dans l'exemple, l'alias A est utilisé pour la table de base de données /DMO/CARRIER et l'alias C pour la table de base de données /DMO/CONNECTION.
Si une source de données a un alias, il est obligatoire d'utiliser l'alias à la place du nom de la source de données d'origine.Alias requis dans les auto-jointures
Dans certains cas, les alias des sources de données sont plus qu'une simple alternative syntaxique. Elles deviennent indispensables dans les instructions qui contiennent plusieurs fois la même source de données.

Prenons un exemple. Considérons que nous avons une table avec des liaisons aériennes (/DMO/CONNECTION). Nous sommes intéressés par les destinations que nous pouvons atteindre à partir de l'aéroport international de Francfort (FRA). Mais au lieu de vols directs, nous recherchons des vols avec un seul transfert.
La solution est une jointure de la table /DMO/CONNECTION avec elle-même. La première condition d'adhésion demande que la deuxième liaison (2e étape) commence à partir de l'aéroport où la première liaison (première étape) se termine. La deuxième condition de jointure, liée à la première avec l'opérateur AND, exclut les combinaisons où la deuxième liaison est un vol retour direct vers l'aéroport de départ d'origine.
Il est évident qu'une telle auto-jointure ne fonctionnerait pas sans les noms d'alias a pour l'utilisation gauche de /DMO/CONNECTION et b pour l'utilisation correcte de /DMO/CONNECTION. Sans les différents alias, il ne serait pas possible de faire la distinction entre la première connexion et la deuxième connexion - ni dans la condition de jointure, ni dans la liste de zones ou dans la clause WHERE.
Remarque



