Sie sind auf Seite 1von 36

6

Afficher des donnes provenant


de plusieurs tables

Copyright 2007, Oracle. Tous droits rservs.

Objectifs
A la fin de ce chapitre, vous pourrez :
crire des instructions SELECT pour accder
aux donnes de plusieurs tables l'aide d'quijointures
et de non-quijointures
joindre une table elle-mme l'aide d'une auto-jointure
afficher les donnes qui ne rpondent gnralement
pas une condition de jointure l'aide de jointures externes
gnrer le produit cartsien de toutes les lignes de plusieurs
tables

6-2

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre
Types de jointure et syntaxe
Jointure naturelle :
Clause USING
Clause ON

Auto-jointure
Non-quijointure
Jointure externe (OUTER) :
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN

Produit cartsien
Jointure croise

6-3

Copyright 2007, Oracle. Tous droits rservs.

Obtenir des donnes partir de plusieurs tables

EMPLOYEES

DEPARTMENTS

6-4

Copyright 2007, Oracle. Tous droits rservs.

Types de jointure
Jointures compatibles avec la norme SQL:1999 :
Jointures naturelles :
Clause NATURAL JOIN
Clause USING
Clause ON

Jointures externes :
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN

Jointures croises

6-5

Copyright 2007, Oracle. Tous droits rservs.

Joindre des tables l'aide de la syntaxe


SQL:1999
Utilisez une jointure pour effectuer une interrogation
de donnes partir de plusieurs tables :
SELECT
table1.column, table2.column
FROM
table1
[NATURAL JOIN table2] |
[JOIN table2 USING (column_name)] |
[JOIN table2
ON (table1.column_name = table2.column_name)]|
[LEFT|RIGHT|FULL OUTER JOIN table2
ON (table1.column_name = table2.column_name)]|
[CROSS JOIN table2];

6-6

Copyright 2007, Oracle. Tous droits rservs.

Qualifier les noms de colonne ambigus


Utilisez des prfixes de table pour qualifier
le nom des colonnes qui se trouvent dans plusieurs tables.
Utilisez des prfixes de table pour amliorer les
performances.
Au lieu d'utiliser des prfixes pour dfinir des noms de table
complets, vous pouvez utiliser des alias de table.
Les alias de table permettent d'attribuer des noms plus
courts aux tables :
Code SQL plus compact, utilisation de moins de mmoire

Utilisez des alias de colonne pour distinguer les colonnes


portant des noms identiques mais rsidant dans des tables
diffrentes.

6-7

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre
Types de jointure et syntaxe
Jointure naturelle :
Clause USING
Clause ON

Auto-jointure
Non-quijointure
Jointure externe (OUTER) :
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN

Produit cartsien
Jointure croise

6-8

Copyright 2007, Oracle. Tous droits rservs.

Crer des jointures naturelles


La clause NATURAL JOIN est base sur toutes les colonnes
des deux tables qui portent le mme nom.
Elle slectionne les lignes des deux tables qui prsentent des
valeurs identiques dans les colonnes de mme nom.
Si les colonnes portant le mme nom prsentent des types
de donnes diffrents, une erreur est renvoye.

6-9

Copyright 2007, Oracle. Tous droits rservs.

Extraire des enregistrements


avec des jointures naturelles
SELECT department_id, department_name,
location_id, city
FROM
departments
NATURAL JOIN locations ;

6 - 10

Copyright 2007, Oracle. Tous droits rservs.

Crer des jointures l'aide de la clause USING


Si plusieurs colonnes portent le mme nom mais prsentent
des types de donnes diffrents, utilisez la clause USING
pour indiquer les colonnes utiliser pour une quijointure.
Indiquez la clause USING pour mettre en correspondance
une seule colonne lorsque la correspondance concerne
plusieurs colonnes.
Les clauses NATURAL JOIN et USING sont mutuellement
exclusives.

6 - 11

Copyright 2007, Oracle. Tous droits rservs.

Joindre des noms de colonne


EMPLOYEES

DEPARTMENTS

Cl primaire

Cl trangre
6 - 12

Copyright 2007, Oracle. Tous droits rservs.

Extraire des enregistrements


avec la clause USING
SELECT employee_id, last_name,
location_id, department_id
FROM
employees JOIN departments
USING (department_id) ;

6 - 13

Copyright 2007, Oracle. Tous droits rservs.

Utiliser des alias de table avec la clause USING


Ne qualifiez pas une colonne utilise dans la clause USING.
Si la mme colonne est utilise ailleurs dans l'instruction
SQL, ne lui attribuez pas d'alias.
SELECT l.city, d.department_name
FROM
locations l JOIN departments d
USING (location_id)
WHERE d.location_id = 1400;

6 - 14

Copyright 2007, Oracle. Tous droits rservs.

Crer des jointures avec la clause ON


La condition de jointure d'une jointure naturelle est en fait
une quijointure de toutes les colonnes portant le mme
nom.
Utilisez la clause ON pour indiquer des conditions arbitraires
ou les colonnes joindre.
La condition de jointure est spare des autres conditions
de recherche.
La clause ON facilite la comprhension du code.

6 - 15

Copyright 2007, Oracle. Tous droits rservs.

Extraire des enregistrements avec la clause ON

SELECT e.employee_id, e.last_name, e.department_id,


d.department_id, d.location_id
FROM
employees e JOIN departments d
ON
(e.department_id = d.department_id);

6 - 16

Copyright 2007, Oracle. Tous droits rservs.

Crer des jointures trois liens avec la clause ON

SELECT
FROM
JOIN
ON
JOIN
ON

employee_id, city, department_name


employees e
departments d
d.department_id = e.department_id
locations l
d.location_id = l.location_id;

6 - 17

Copyright 2007, Oracle. Tous droits rservs.

Appliquer des conditions supplmentaires


une jointure
Utilisez la clause AND ou la clause WHERE pour appliquer
des conditions supplmentaires :
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM
employees e JOIN departments d
ON
(e.department_id = d.department_id)
AND
e.manager_id = 149 ;

Ou
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM
employees e JOIN departments d
ON
(e.department_id = d.department_id)
WHERE
e.manager_id = 149 ;

6 - 18

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre
Types de jointure et syntaxe
Jointure naturelle :
Clause USING
Clause ON

Auto-jointure
Non-quijointure
Jointure externe (OUTER) :
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN

Produit cartsien
Jointure croise

6 - 19

Copyright 2007, Oracle. Tous droits rservs.

Joindre une table elle-mme

EMPLOYEES (WORKER)

EMPLOYEES (MANAGER)

La colonne MANAGER_ID de la table WORKER est gale


la colonne EMPLOYEE_ID de la table MANAGER.

6 - 20

Copyright 2007, Oracle. Tous droits rservs.

Auto-jointures l'aide de la clause ON

SELECT worker.last_name emp, manager.last_name mgr


FROM
employees worker JOIN employees manager
ON
(worker.manager_id = manager.employee_id);

6 - 21

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre
Types de jointure et syntaxe
Jointure naturelle :
Clause USING
Clause ON

Auto-jointure
Non-quijointure
Jointure externe (OUTER) :
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN

Produit cartsien
Jointure croise

6 - 22

Copyright 2007, Oracle. Tous droits rservs.

Non-quijointures

EMPLOYEES

6 - 23

JOB_GRADES

La table JOB_GRADES dfinit la plage


de valeurs LOWEST_SAL et HIGHEST_SAL
pour chaque valeur GRADE_LEVEL.
La colonne GRADE_LEVEL peut donc tre
utilise pour attribuer un niveau chaque
employ.
Copyright 2007, Oracle. Tous droits rservs.

Extraire des enregistrements


l'aide de non-quijointures
SELECT e.last_name, e.salary, j.grade_level
FROM
employees e JOIN job_grades j
ON
e.salary
BETWEEN j.lowest_sal AND j.highest_sal;

6 - 24

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre
Types de jointure et syntaxe
Jointure naturelle :
Clause USING
Clause ON

Auto-jointure
Non-quijointure
Jointure externe (OUTER) :
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN

Produit cartsien
Jointure croise

6 - 25

Copyright 2007, Oracle. Tous droits rservs.

Renvoyer des enregistrements sans correspondance


directe l'aide de jointures externes
DEPARTMENTS

EMPLOYEES

Le dpartement 190 ne comporte


aucun employ.

6 - 26

Copyright 2007, Oracle. Tous droits rservs.

Comparaison entre les jointures


INNER et OUTER
Dans la syntaxe SQL:1999, la jointure de deux tables
qui ne renvoie que les lignes qui correspondent est appele
jointure interne.
Une jointure entre deux tables qui renvoie les rsultats
de la jointure interne, ainsi que les lignes sans
correspondance de la table de gauche (ou de droite)
est appele jointure externe gauche (ou droite).
Une jointure entre deux tables qui renvoie les rsultats
d'une jointure interne, ainsi que les rsultats d'une jointure
droite et d'une jointure gauche est une jointure externe
complte.

6 - 27

Copyright 2007, Oracle. Tous droits rservs.

LEFT OUTER JOIN

SELECT e.last_name, e.department_id, d.department_name


FROM
employees e LEFT OUTER JOIN departments d
ON
(e.department_id = d.department_id) ;

6 - 28

Copyright 2007, Oracle. Tous droits rservs.

RIGHT OUTER JOIN

SELECT e.last_name, e.department_id, d.department_name


FROM
employees e RIGHT OUTER JOIN departments d
ON
(e.department_id = d.department_id) ;

6 - 29

Copyright 2007, Oracle. Tous droits rservs.

FULL OUTER JOIN

SELECT e.last_name, d.department_id, d.department_name


FROM
employees e FULL OUTER JOIN departments d
ON
(e.department_id = d.department_id) ;

6 - 30

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre
Types de jointure et syntaxe
Jointure naturelle :
Clause USING
Clause ON

Auto-jointure
Non-quijointure
Jointure externe (OUTER) :
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN

Produit cartsien
Jointure croise

6 - 31

Copyright 2007, Oracle. Tous droits rservs.

Produit cartsien
Un produit cartsien est gnr dans les cas suivants :
La condition de jointure est omise.
La condition de jointure n'est pas valide.
Toutes les lignes de la premire table sont jointes
toutes les lignes de la deuxime.

Pour viter la formation d'un produit cartsien, incluez


toujours une condition de jointure valide.

6 - 32

Copyright 2007, Oracle. Tous droits rservs.

Gnrer un produit cartsien


EMPLOYEES (20 lignes)

DEPARTMENTS (8 lignes)

Produit cartsien :
20 x 8 = 160 lignes

6 - 33

Copyright 2007, Oracle. Tous droits rservs.

Crer des jointures croises


La clause CROSS JOIN effectue une jointure croise entre
deux tables.
Cela quivaut au produit cartsien des deux tables.
SELECT last_name, department_name
FROM
employees
CROSS JOIN departments ;

6 - 34

Copyright 2007, Oracle. Tous droits rservs.

Synthse
Ce chapitre vous a appris utiliser des jointures pour afficher
des donnes provenant de plusieurs tables :
Equijointures
Non-quijointures
Jointures externes
Auto-jointures
Jointures croises
Jointures naturelles
Jointures externes compltes (ou droite et gauche)

6 - 35

Copyright 2007, Oracle. Tous droits rservs.

Prsentation de l'exercice 6
Dans cet exercice, vous allez :
joindre des tables l'aide d'une quijointure
effectuer des jointures externes et des auto-jointures
ajouter des conditions

6 - 36

Copyright 2007, Oracle. Tous droits rservs.

Das könnte Ihnen auch gefallen