Académique Documents
Professionnel Documents
Culture Documents
04 AffichDonnPlusTabl
04 AffichDonnPlusTabl
Hanoune
4
Afficher des Données
Issues de Plusieurs Tables
M.Hanoune
Objectifs
A la fin de ce chapitre, vous saurez :
• Ecrire des ordres SELECT pour accéder
aux données de plusieurs tables en
utilisant des équijointures et des non-
équijointures
• Visualiser des données ne répondant
pas aux conditions de jointure, en
utilisant les jointures externes
• Relier une table à elle-même
4-2
Objectifs
Au cours de ce chapitre, vous allez étudier les différentes façons d'obtenir des données de plusieurs tables.
4-3
4-4
Produit Cartésien
• On obtient un produit cartésien lorsque :
– Une condition de jointure est omise
– Une condition de jointure est incorrecte
• Toutes les lignes de la première table sont
jointes à toutes les lignes de la seconde
• Pour éviter un produit cartésien, toujours
insérer une condition de jointure correcte
dans la clause WHERE.
4-5
Produit Cartésien
Lorsqu'une condition de jointure est incorrecte ou tout simplement omise, on obtient un produit cartésien
dans lequel sont affichées toutes les combinaisons de lignes. Toutes les lignes de la première table sont jointes
à toutes les lignes de la seconde.
Un produit cartésien fournit en général un nombre important de lignes, donnant un résultat rarement
exploitable. C'est pourquoi il faut toujours inclure une condition de jointure correcte dans une clause
WHERE, à moins que vous n'ayez réellement besoin de combiner toutes les lignes de toutes les tables.
ENAME DNAME
------ ----------
KING ACCOUNTING
"Produit BLAKE ACCOUNTING
cartésien : ...
KING RESEARCH
14*4=56 lignes" BLAKE RESEARCH
...
56 rows selected.
4-6
Produit Cartésien
L'omission d'une condition de jointure génère un produit cartésien. L'exemple de la diapositive affiche le nom
d'employé et le nom de département des tables EMP et DEPT. Comme aucune clause WHERE n'a été
spécifiée, toutes les lignes (14) de la table EMP ont été jointes à l'ensemble des lignes (4) de la table DEPT,
donnant ainsi un résultat de 56 lignes.
ENAME DNAME
---------- --------------
KING ACCOUNTING
BLAKE ACCOUNTING
...
KING RESEARCH
BLAKE RESEARCH
...
56 rows selected.
Types de Jointures
Equijointure Non-équijointure
4-7
Types de Jointures
Il existe deux principaux types de conditions de jointure :
• Les équijointures
• Les non-équijointures
Les autres méthodes de jointures sont les suivantes :
• Jointures externes
• Autojointures
• Les opérateurs ensemblistes
Remarque : les opérateurs ensemblistes seront étudiés dans un chapitre ultérieur
Equijointures
Pour déterminer le département auquel appartient un employé, vous devez comparer les valeurs de la colonne
DEPTNO de la table EMP avec les valeurs de la colonne DEPTNO de la table DEPT. La relation établie
entre les tables EMP et DEPT est une équijointure : les valeurs de la colonne DEPTNO appartenant aux deux
tables doivent être identiques. Ce type de relation fait souvent appel aux clés primaires et étrangères.
Remarque : les équijointures sont aussi appelées jointures simples ou jointures internes.
Extraction d'Enregistrements
avec les Equijointures
SQL> SELECT emp.empno, emp.ename, emp.deptno,
2 dept.deptno, dept.loc
3 FROM emp, dept
4 WHERE emp.deptno=dept.deptno;
4-9
Différencier les
Noms de Colonne Ambigus
• Préfixer avec le nom de la table pour
différencier les noms de colonnes
appartenant à plusieurs tables.
• Ces préfixes de table améliorent les
performances.
• Différencier des colonnes de même nom
appartenant à plusieurs tables en utilisant
des alias de colonne.
4-10
4-11
4-12
Alias de Table
La qualification des noms de colonne à l'aide des noms de table peut prendre beaucoup de
temps, en particulier si les noms de table sont longs. Vous pouvez substituer des alias de table
aux noms de table. De la même manière qu'un alias de colonne renomme une colonne, un alias
de table donne un nouveau nom à une table. Les alias de table permettent ainsi de réduire le
volume du code SQL et donc, de gagner de la place en mémoire.
Notez la manière dont les alias de table sont identifiés dans la clause FROM de l'exemple. Le
nom de la table spécifié en entier est suivi d'un espace puis de l'alias de table. E est l'alias de la
table EMP, et D l'alias de la table DEPT.
Conseils
• Bien qu'un alias de table puisse compter jusqu'à 30 caractères, il est préférable qu'il soit le
plus court possible.
• Lorsqu'un alias de table est substitué à un nom de table dans la clause FROM, cette
substitution doit s'opérer dans la totalité de l'ordre SELECT.
• Choisissez de préférence des alias "parlants".
• Un alias de table ne s'applique que dans l'ordre SELECT courant.
4-13
Non-Equijointures
EMP SALGRADE
EMPNO ENAME SAL GRADE LOSAL HISAL
------ ------- ------ ----- ----- ------
7839 KING 5000 1 700 1200
7698 BLAKE 2850 2 1201 1400
7782 CLARK 2450 3 1401 2000
7566 JONES 2975 4 2001 3000
7654 MARTIN 1250 5 3001 9999
7499 ALLEN 1600
7844 TURNER 1500
7900 JAMES 950
... "Les salaires (SAL) de la table
14 rows selected. EMP sont compris entre le
salaire minimum (LOSAL) et le
salaire maximum (HISAL) de la
table SALGRADE"
4-14
Non-Equijointures
La relation entre la table EMP et la table SALGRADE est une non-équijointure car aucune
colonne de la table EMP ne correspond directement à une colonne de la table SALGRADE. La
relation existant entre les deux tables est la suivante: les valeurs de la colonne SAL de la table
EMP sont comprises entre celles des colonnes LOSAL et HISAL de la table SALGRADE. Il
faut donc utiliser un autre opérateur que le signe égal (=) pour effectuer une jointure.
Extraction d'Enregistrements
avec les Non-Equijointures
SQL> SELECT e.ename, e.sal, s.grade
2 FROM emp e, salgrade s
3 WHERE e.sal
4 BETWEEN s.losal AND s.hisal;
4-15
Non-Equijointures (suite)
L'exemple ci-dessus crée une non-équijointure pour évaluer l'échelon de salaire d'un employé. Le salaire est
obligatoirement compris entre deux valeurs délimitant une tranche salariale.
Il est important de noter que tous les employés n'apparaissent qu'une seule fois dans la liste lorsque la requête
est exécutée, et ce pour deux raisons :
• Aucune ligne de la table des échelons de salaire ne déborde sur une autre. Autrement dit, le salaire d'un
employé se situe nécessairement entre la valeur minimale et la valeur maximale d'une des lignes de la
table.
• Tous les salaires des employés entrent dans les limites prévues par la table des échelons de salaire.
Aucun employé ne peut gagner moins que le salaire minimal de la colonne LOSAL ni plus que le
salaire maximal de la colonne HISAL.
Remarque : il serait possible d'utiliser d'autres opérateurs tels que <= et >= , mais BETWEEN est le plus
simple. Avec BETWEEN, n'oubliez pas de spécifier d'abord la valeur la plus basse puis la valeur la plus
haute. Dans l'exemple, des alias de table ont été spécifiés pour améliorer les performances et non à cause
d'une possible ambiguïté.
Jointures Externes
EMP DEPT
ENAME DEPTNO DEPTNO DNAME
----- ------ ------ ----------
KING 10 10 ACCOUNTING
BLAKE 30 30 SALES
CLARK 10 10 ACCOUNTING
JONES 20 20 RESEARCH
... ...
40 OPERATIONS
4-16
Jointures Externes
• Les jointures externes permettent de
visualiser des lignes qui ne répondent pas
à la condition de jointure.
• L'opérateur de jointure externe est le signe (+).
SELECT table.column, table.column
FROM table1, table2
WHERE table1.column(+) = table2.column;
4-17
4-18
Autojointures
EMP (WORKER) EMP (MANAGER)
EMPNO ENAME MGR EMPNO ENAME
----- ------ ---- ----- --------
7839 KING
7698 BLAKE 7839 7839 KING
7782 CLARK 7839 7839 KING
7566 JONES 7839 7839 KING
7654 MARTIN 7698 7698 BLAKE
7499 ALLEN 7698 7698 BLAKE
4-19
WORKER.ENAME||'WORKSFOR'||MANAG
-------------------------------
BLAKE works for KING
CLARK works for KING
JONES works for KING
MARTIN works for BLAKE
...
13 rows selected.
4-20
Résumé
SELECT table.column, table.column
FROM table1, table2
WHERE table1.column1 = table2.column2;
Non-équijointure Autojointure
4-21
Résumé
Il existe de nombreuses manières de lier des tables. Cependant, toutes sont fondées sur une condition spécifiée
dans la clause WHERE. La méthode que vous choisirez dépend du résultat souhaité et des structures de
données que vous utilisez.
SELECT table.column, table.column
FROM table1, table2
WHERE table1.column1 = table2.column2;
Types de Jointures
• Equijointure
• Non-équijointure
• Jointure externe
• Autojointure
Produits Cartésiens
L'omission de la condition de jointure dans la clause WHERE génère un produit cartésien dans lequel
toutes les combinaisons de lignes sont affichées.
Alias de Table
• Les alias de table accélèrent l'accès aux données.
• Les alias de table permettent de réduire le volume du code et donc, de gagner de la place en mémoire.
4-22
JOB LOC
--------- -------------
CLERK CHICAGO
MANAGER CHICAGO
SALESMAN CHICAGO
3. Ecrivez une requête pour afficher le nom, le nom du département et la localisation de tous
les employés qui touchent une commission.
4. Affichez le nom et le nom du département pour tous les employés dont le nom
contient la lettre A. Enregistrez votre ordre SQL dans un fichier que vous nommerez
p4q4.sql.
ENAME DNAME
------- ------------
CLARK ACCOUNTING
ADAMS RESEARCH
ALLEN SALES
WARD SALES
JAMES SALES
MARTIN SALES
BLAKE SALES
7 rows selected.
5. Ecrivez une requête pour afficher le nom, le poste, le numéro de département et le nom
du département de tous les employés basés à DALLAS.
7. Modifiez le fichier p4q6.sql pour afficher tous les employés, y compris King, n'ayant pas de
manager. Enregistrez à nouveau dans un fichier p4q7.sql.Exécutez p4q7.sql.
9. Affichez la structure de la table SALGRADE. Créez une requête pour afficher le nom, le
poste, le département, le salaire et l'échelon de tous les employés.
Si vous souhaitez aller plus loin dans la difficulté, faites les exercices suivants :
10. Créez une requête pour afficher le nom et la date d'embauche de tous les employés arrivés
avant l'employé Blake. Trier les lignes sur la date d’embauche.
ENAME HIREDATE
------- ---------
SMITH 17-DEC-80
ALLEN 20-FEB-81
WARD 22-FEB-81
JONES 02-APR-81
11. Affichez les noms et date d'embauche des employés et de leur manager, pour tous les
employés ayant été embauchés avant leur manager. Nommez les colonnes Employee, Emp
Hiredate, Manager et Mgr Hiredate, respectivement.