Vous êtes sur la page 1sur 38

BASES DE DONNEES AVANCEES

Lotfi NAJDI
Année Universitaire 2020 / 2021
Licence Professionnelle Génie Informatique
Faculté Polydisciplinaire de Taroudant
Concept de jointure

Les jointures permettent :


• Combiner les lignes de plusieurs tableaux en spécifiant les critères de correspondance
• Associer plusieurs tables dans une même requête
• Exploiter la puissance des bases de données relationnelles

Jointure

Table 1 Table 2
Obtenir des données à partir de plusieurs tables

Jointure
Obtenir des données à partir de plusieurs tables

Résultat obtenu en faisant correspondre la clé étrangère employees. department_id à la


clé primaire departments.department_id
syntaxe des jointures

Jointures compatibles avec la norme SQL:1999 :


 Naturelles :

 NATURAL JOIN

 USING

 ON

• Externes :

 LEFT OUTER JOIN

 RIGHT OUTER JOIN

 FULL OUTER JOIN

• Croisées :

 CROSS
Joindre des tables à l'aide de la syntaxe SQL:1999

Utilisez une jointure pour effectuer une interrogation de données à 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];
Créer des jointures naturelles avec la clause NATURAL JOIN

« NATURAL JOIN est une opération de jointure qui crée pour vous une clause de jointure

implicite basée sur les colonnes communes des deux tables. Les colonnes communes sont des

colonnes qui portent le même nom dans les deux tables. Peut consister à une INNER JOIN

(option par défaut), une LEFT OUTER JOIN, ou une RIGHT OUTER JOIN. » Oracle
jointures naturelles avec la clause NATURAL JOIN

SELECT table1.column, table2.column

FROM table1

[NATURAL JOIN table2]

Lorsque la requête de jointure est exécutée, Oracle commence à faire correspondre les

données de la table table1 à celles de la table table2 . S'il y a une correspondance

pour une donnée de la table table1 dans la table table2, la valeur est renvoyée.
Jointures naturelles
une seule colonne identique entre les deux tables
Jointures naturelles
une seule colonne identique entre les deux tables
SELECT department_id, department_name, location_id, city
FROM departments
NATURAL JOIN locations ;
Jointures à l'aide de la clause USING

SELECT table1.column, table2.column


FROM table1
JOIN table2 USING (column_name)

• USING est équivalente à NATURAL JOIN avec possibilité de préciser les colonnes de
jointures.

• Si plusieurs colonnes portent le même nom, mais présentent des types de données
différents, 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.


Extraire des enregistrements avec la clause USING

SELECT department_id, department_name, location_id, city


FROM departments
JOIN locations USING (location_id) ;
Jointures naturelles
Plus d'une colonne commune entre les deux tables
Extraire des enregistrements avec la clause USING

SELECT employee_id, last_name, location_id, department_id


FROM employees JOIN departments USING (department_id) ;
Qualifier les noms de colonnes ambigus

• Utilisez des préfixes de tables pour qualifier le nom des colonnes qui se trouvent dans

plusieurs tables.

• Utiliser des alias de tables pour rendre la lecture (et l’écriture) plus aisées

• Les alias de tables permettent d'attribuer des noms plus courts aux tables pour créer

du code plus compact consommant moins de mémoire (et plus lisible)

• Utilisez des alias de colonnes pour distinguer les colonnes portant des noms identiques,

mais résidant dans des tables différentes ou résultant de calculs.


Créer des jointures avec la clause ON

SELECT table1.column, table2.column


FROM table1
[JOIN table2 ON (table1.column_name = table2.column_name)];

• Avec JOIN ON la condition de jointure doit être explicitement spécifiée.

• Si les colonnes de jointure portent le même nom, elles doivent être qualifiées.

• Dans le cas de NATURAL JOIN, la condition de jointure consiste à une équijointure

des colonnes qui portent le même nom.


Créer des jointures avec la clause ON

• La clause ON permet d’indiquer des conditions arbitraires (ou les colonnes à joindre)

pour réaliser la jointure. Sans cette clause, l’ensemble des colonnes dont le nom est

identique sont utilisées pour effectuer la jointure.

• La condition de jointure est séparée des autres conditions de recherche.

• La clause ON facilite la compréhension du code.


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);
Créer des jointures à trois liens (trois tables ) avec la clause ON
Three-table join

SELECT table1.column, table2.column , table3.column


FROM table1

JOIN table2 ON table1.key1 = table2.key1

JOIN table3 ON table2.key2 = table3.key2;

table 1
Jointure
Résultat de la jointure
Jointure
de table1 et table2
Résultat final
table 2

table 3
Créer des jointures à trois liens avec la clause ON
SELECT employee_id, department_name, city, Country_Id
FROM employees e
JOIN departments d ON d.department_id = e.department_id
JOIN locations l ON d.location_id = l.location_id;
Appliquer des conditions supplémentaires à une jointure

Utilisez la clause AND ou la clause WHERE pour appliquer des conditions supplémentaires :

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 bien

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 ;
Joindre une table à elle-même (Self-join)
Appelée auto-jointure ou jointure réflexive

EMPLOYEES (WORKER) EMPLOYEES (MANAGER)

… …

La colonne MANAGER_ID de la table WORKER est égale


à la colonne EMPLOYEE_ID de la table MANAGER.
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);
Non-équijointures
Ces jointures utilisent d’autres opérateurs que le prédicat d’égalité

EMPLOYEES JOB_GRADES

• La table JOB_GRADES définit la plage de valeurs LOWEST_SAL et HIGHEST_SAL pour chaque


valeur GRADE_LEVEL.
• La colonne GRADE_LEVEL peut donc être utilisée pour attribuer un niveau à chaque employé.
Extraire des enregistrements à l'aide de non-équijointures
Extraire des enregistrements à l'aide de non-équijointures
SELECT e.last_name, e.salary, j.grade
FROM employees e JOIN job_grades j
ON e.salary BETWEEN j.lowest_sal AND j.highest_sal;
Comparaison entre les jointures INNER et OUTER

Dans la syntaxe SQL:1999, il existe différents types de jointures

• Interne INNER JOIN : renvoie les lignes mises en correspondance

• Externe gauche LEFT OUTER JOIN : renvoie les lignes mises en correspondances, plus celles de

la table de gauche (LEFT), pour lesquelles aucune correspondance n’est repérée.

• Externe droite RIGHT OUTER JOIN : renvoie les lignes mises en correspondances, plus celles de

la table droite pour lesquelles aucune correspondance n’est aperçue.

• Externe complète FULL OUTER JOIN : Renvoie les lignes mises en correspondance, ainsi que

les lignes pour lesquelles aucune correspondance n’est trouvée, qu’elle soit à gauche ou à droite.
INNER JOIN

R4ds relational-data
Outer join

R4ds relational-data
Outer join

R4ds relational-data
Renvoyer des enregistrements sans correspondance directe à
l'aide de jointures externes

DEPARTMENTS EMPLOYEES

Le département 190 ne comporte


aucun employé.
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) ;
RIGHT OUTER JOIN

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


FROM employees e RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id) ;
FULL OUTER JOIN ou Jointure externe bilatérale

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) ;


Produit cartésien

 Un produit cartésien est la conséquence d’un des éléments suivants


• Si la condition de jointure est omise.

• Si la condition de jointure n'est pas valide.

• Si toutes les lignes de la première table sont jointes à toutes les lignes de la deuxième.

 Pour éviter la formation d'un produit cartésien, incluez toujours une condition de
jointure valide.

 Peut être utile dans certain cas:


• Produire une "grille" qu’on souhaite remplir complètement, comme les informations sur la taille

et la couleur d'un vêtement particulier : SELECT size, color FROM sizes CROSS JOIN colors

• Générer des données pour les tests ..etc.


Générer un produit cartésien

EMPLOYEES (20 lignes) DEPARTMENTS (8 lignes)

Produit cartésien :
20 x 8 = 160 lignes


Créer des jointures croisées

La clause CROSS JOIN effectue une jointure croisée entre deux tables, équivalente à un produit
cartésien

SELECT last_name, department_name


FROM employees
CROSS JOIN departments ;

Vous aimerez peut-être aussi