Jointures externes
OBDC prend en charge la syntaxe de jointure externe SQL-92 gauche, droite et entière. La séquence d’échappement pour les jointures externes est la suivante :
{oj outer-join}
où outer-join est
table-reference {LEFT | RIGHT | FULL} OUTER JOIN {table-reference | outer-join} ON search-condition
table-reference spécifie un nom de table et search-condition spécifie la condition de jointure entre les table-references.
Une demande de jointure externe doit apparaître après le mot clé FROM et avant la clause WHERE (le cas échéant). Pour obtenir des informations de syntaxe complètes, consultez Séquence d’échappement de jointure externe dans l’annexe C : Grammaire SQL.
Par exemple, les instructions SQL suivantes créent le même jeu de résultats qui répertorie tous les clients et affiche les commandes en cours. La première instruction utilise la syntaxe de la séquence d'échappement. La deuxième instruction utilise la syntaxe native d’Oracle. Cette dernière n’est pas interopérable.
SELECT Customers.CustID, Customers.Name, Orders.OrderID, Orders.Status
FROM {oj Customers LEFT OUTER JOIN Orders ON Customers.CustID=Orders.CustID}
WHERE Orders.Status='OPEN'
SELECT Customers.CustID, Customers.Name, Orders.OrderID, Orders.Status
FROM Customers, Orders
WHERE (Orders.Status='OPEN') AND (Customers.CustID= Orders.CustID(+))
Pour déterminer les types de jointures externes qu’une source de données et un pilote prennent en charge, une application appelle SQLGetInfo avec l’indicateur SQL_OJ_CAPABILITIES. Les types de jointures externes qui peuvent être prises en charge sont des jointures externes gauche, droite, entières ou imbriquées ; les jointures externes dans lesquelles les noms de colonnes de la clause ON n’ont pas la même commande que leurs noms de table respectifs dans la clause OUTER JOIN ; les jointures internes en conjonction avec jointures externes ; les jointures externes utilisant un opérateur de comparaison ODBC. Si le type d’informations SQL_OJ_CAPABILITIES retourne 0, aucune clause de jointure externe n’est prise en charge.