Quelqu'un peut-il me dire si les deux requêtes ci-dessous sont un exemple de jointure externe gauche ou de jointure externe droite ?
Table Part:
Name Null? Type
PART_ID NOT NULL VARCHAR2(4)
SUPPLIER_ID VARCHAR2(4)
PART_ID SUPPLIER_ID
P1 S1
P2 S2
P3
P4
Table Supplier:
Name Null? Type
SUPPLIER_ID NOT NULL VARCHAR2(4)
SUPPLIER_NAME NOT NULL VARCHAR2(20)
SUPPLIER_ID SUPPLIER_NAME
S1 Supplier#1
S2 Supplier#2
S3 Supplier#3
Affichez toutes les pièces, qu'elles soient fournies par un fournisseur ou non :
SELECT P.Part\_Id, S.Supplier\_Name
FROM Part P, Supplier S
WHERE P.Supplier\_Id = S.Supplier\_Id (+)
SELECT P.Part\_Id, S.Supplier\_Name
FROM Part P, Supplier S
WHERE S.Supplier\_Id (+) = P.Supplier\_Id
29 votes
Vous devez éviter d'utiliser la notation '(+)' et mettre à jour les requêtes pour utiliser des jointures explicites.
3 votes
@JonathanLeffler 100% d'accord. Le problème est que je travaille avec des personnes qui ne veulent pas passer à la notation standard. J'écris de nouvelles requêtes avec la notation standard, mais je serai prêt à tirer dans une minute si une ancienne requête est modifiée.
3 votes
@JonathanLeffler Je suis d'accord, sauf si vous utilisez Oracle. Oracle, tel qu'il est actuellement, ne gère pas la syntaxe ansi aussi bien que l'opérateur (+) en interne. Bien qu'ils recommandent d'utiliser la syntaxe ansi :) docs.oracle.com/cd/B28359_01/server.111/b28286/queries006.htm
7 votes
@Amyth Désolé pour ce commentaire un peu dépassé, mais je suis arrivé à cette question en faisant une recherche. Pour ma part, je comprends les recommandations d'Oracle de manière exactement inverse. D'après votre lien : " Oracle vous recommande d'utiliser la syntaxe FROM clause OUTER JOIN plutôt que l'opérateur de jointure d'Oracle. Les requêtes de jointure externe qui utilisent l'opérateur de jointure Oracle (+) sont soumises aux règles et restrictions suivantes, qui ne s'appliquent pas à la syntaxe FROM clause OUTER JOIN ..."
0 votes
Désolé pour cette réponse dépassée :), mais ce que dit Oracle et la façon dont ses statistiques fonctionnent pour optimiser les requêtes sont deux choses différentes, et il se peut qu'Oracle ait changé de position avec les progrès de ses optimiseurs internes.