|
Objectif
La jointure permet de combiner les information provenant de plusieurs tables (jusqu'à 126),
il convient de préciser le nom des tables dans la zone FROM de la requete.
Attention : Si on ne précise pas de condition de selection dans la clause Where
(champ commun aux 2 tables), le resultat sera le produit cartesien c'est à dire que chaque enregistrement de
la première table sera affecté à chaque enregistrement de la seconde, résultat n'ayant aucun
intérêt, seuls les résultats ayant une valeur identique pour un argument de chaque table.
Par exemple, le rapprochement de chaque ligne de la table EMP (employé) avec la ligne de la
table DEPT (département) ayant le même NODEPT (numéro de département) permet
d'obtenir la liste des employés avec la localité dans laquelle ils travaillent.
Equijointure
Le critère 'naturel' de sélection des lignes significatives parmi toutes celles composant
produit cartésien est exprimé dans la condition WHERE, par une égalité.
Il n'existe pas d'association implicite entre Relations en SQL.
Les associations entre Relations sont définies dynamiquement lors des interrogations.
- grande souplesse de l'outil SQL
- rend possible toute association, même si pas prévue lors de la conception
exemple : SELECT ENAME,LOC
FROM EMP ,DEPT
WHERE EMP .DEPTNO= DEPT .DEPTNO;
on est obligé de préfixer par le nom de la table, car les attributs ont le même nom.
Il est de toute façon plus performant de préfixer les noms de colonne avec le nom de
leur table, dans tous les cas (la recherche par le SGBD est plus rapide).
Jointure externe (demi-jointure)
Quand une ligne d'une table n'a pas de correspondant dans les autres tables, elle ne satisfait
pas au critère d'équi-jointure.
On risque donc de ne pas visualiser des informations importantes. On peut faire figurer
également les lignes n'ayant pas de correspondant.
On ajoute (+) à la colonne dans laquelle manquent des éléments.
exemple : SELECT ENAME,LOC
FROM EMP,DEPT
WHERE EMP.DEPTNO(+)=DEPT.DEPTNO;
provoque l'ajout virtuel d'une ligne fictive dont tous les champs sont à NULL, et qui réalise la
correspondance avec les lignes sans correspondant réel, dans l'autre table.
Dans cet exemple, on visualisera également le fait qu'il y a une localité, BOSTON sans
employé
exemple - Départements sans employé :
SELECT DEPT.DEPTNO,DNAME
FROM EMP,DEPT
WHERE DEPT.DEPTNO=EMP.DEPTNO(+) AND EMPNO IS NULL;
|