Recherche sur le blog

mardi 13 septembre 2016

[SQL] L'opérateur (+) d'Oracle

Je pensais avoir vu beaucoup de choses mais n'ayant pas beaucoup travaillé avec Oracle ces dernières années (en fait, pour être honnête : pas du tout), je n'avais jamais rencontré cette syntaxe qui peut paraitre étrange la toute première fois... Que fait cet opérateur plus dans les conditions des jointures ? Perturbant... Cela implique de se renseigner un peu.

Après quelques recherches sur internet j'apprends qu'il s'agit en fait d'un opérateur (+) pour indiquer le type de la jointure externe : gauche, ou droite. Les anciennes versions du SGBD (antérieures à la 9i) ne supportant pas la syntaxe de la norme ANSI, la solution était donc d'utiliser ce fameux signe (+). Celui-ci doit être spécifié dans la clause WHERE, de la manière suivante.
SELECT *
FROM A, B
WHERE A.column = B.column(+)
On récupère donc les enregistrements de A qui correspondent à B par rapport à la condition de la jointure, ainsi que les records qui n'ont pas de correspondance dans la table B. C'est donc une jointure externe gauche que nous avons là (LEFT OUTER JOIN). Cela équivaut à écrire
SELECT *
FROM A LEFT OUTER JOIN B ON A.column = B.column
Vous l'aurez compris, si on place l'opérateur au niveau de la colonne de A dans la condition, cela devient une jointure externe droite (RIGHT OUTER JOIN).

Notez qu'Oracle déconseille fortement l'utilisation de cet opérateur. En effet il est conservé pour des questions de compatibilité. Il est toutefois loin d'être pratique, surtout du point de vue de la lisibilité. De plus comme la syntaxe prévue par la norme est désormais supportée, il n'y a plus aucune raison de ne employer celle-ci.

Et si vous avez oublié comment fonctionnent les jointures, voici une piqure de rappel.

Aucun commentaire: