| Accueil | Forums | Bureautique | Développement | SGBD |
  Entité / Relation
 
  Le langage SQL DML
 
  Langage SQL DDL
 
  SELECT (5) Jointures 1
 

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;

 
2005 Copyright Ephicom