0% ont trouvé ce document utile (0 vote)
34 vues6 pages

Tp6 SQL Jointure

Transféré par

rachabdel10
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
34 vues6 pages

Tp6 SQL Jointure

Transféré par

rachabdel10
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Notes de cours & TP 6

6.Affichage de données à partir de


plusieurs tables - Jointure

Objectifs
Au terme de ce chapitre, l’étudiant saura :
➢ Extraire des informations à partir de plusieurs tables.
➢ Distinguer entre les différents types de jointure.

Durée estimative : 4,5h

6.1 NOTES DE COURS

6.1.1 TYPES DE JOINTURE

Pour sélectionner des lignes provenant de plusieurs tables, il est nécessaire d'utiliser des
jointures dans la requête SQL. Il existe trois types de jointures :
• Jointures internes : utilisent les clauses NATURAL JOIN, USING et ON.
• Jointures externes : utilisent les clauses LEFT OUTER JOIN, RIGHT OUTER JOIN et FULL
OUTER JOIN.
• Jointure croisée : utilise la clause CROSS JOIN.

La syntaxe générale est :


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]

2022/2023 - Ons BEN ROMDHANE & Adel DAHMANE 34


Notes de cours & TP 6 : Affichage de données à partir de plusieurs tables - Jointure

6.1.2 JOINTURE INTERNE

• NATURAL JOIN
La clause NATURAL JOIN est basée sur toutes les colonnes des deux tables ayant le
même nom et le même type.

SELECT department_id, department_name, location_id, city


FROM departments NATURAL JOIN locations

• JOIN…USING
La clause JOIN…USING permet de spécifier explicitement une ou plusieurs colonnes
d’équi-jointure entre parenthèses après le mot-clé USING. Cette colonne doit avoir le
même nom dans les deux tables.

SELECT employee_id, last_name, location_id, department_id


FROM employees JOIN departments USING (department_id)

• JOIN ... ON
La clause JOIN ... ON permet de spécifier explicitement des colonnes de jointure,
indépendamment de leurs noms. C’est la jointure la plus générale et la plus utilisée.

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)

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

-- Au lieu de la clause WHERE on peut écrire : AND e.manager_id = 149

• JOINTURES MULTIPLES
Il n'y a aucune restriction sur le nombre de tables qui peuvent être liées à l'aide des
jointures.

SELECT employee_id, city, department_name


FROM employees e

2022/2023 - Ons BEN ROMDHANE & Adel DAHMANE 35


Notes de cours & TP 6 : Affichage de données à partir de plusieurs tables - Jointure

JOIN departments d ON d.department_id = e.department_id


JOIN locations l ON d.location_id = l.location_id

• AUTO-JOINTURE
C’est la jointure d’une table avec elle-même comme si c’était une autre table. Ce type
de requête n’est pas si commun mais très pratique dans le cas où on veut joindre des
enregistrements d'une table à d'autres enregistrements de cette même table. Pour ce
faire, il faut utiliser des alias.

SELECT e.last_name emp, m.last_name mgr


FROM employees e JOIN employees m
ON (e.manager_id = m.employee_id)

• NON EQUI-JOINTURE
Contrairement à l'équi-jointure qui consiste à opérer une jointure avec une condition
d'égalité, la non équi-jointure utilise n'importe quelle condition de jointure entre deux
tables, exceptée la stricte égalité.

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.1.3 JOINTURE EXTERNE

Une jointure externe permet de sélectionner les lignes ayant des correspondances entre les
deux tables jointes ainsi que les lignes n'ayant pas de correspondance dans la table à droite,
ou dans la table à gauche ou dans les deux tables jointes.

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


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

Cette requête retourne 106 lignes. C’est le nombre d’employés affectés aux différents
départements.

• LEFT OUTER JOIN

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


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

2022/2023 - Ons BEN ROMDHANE & Adel DAHMANE 36


Notes de cours & TP 6 : Affichage de données à partir de plusieurs tables - Jointure

Cette requête retourne 107 lignes. C’est le nombre de tous les employés même ceux qui ne
sont pas affectés aux départements.

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

Cette requête retourne 122 lignes. C’est le nombre de tous les départements même ceux qui
ne correspondent pas à des employés.

• FULL OUTER JOINS

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)

Cette requête retourne 123 lignes. Elles contiennent les employés affectés aux départements
et ceux non affectés ainsi que les départements qui ne correspondent pas à des employés.

6.1.4 JOINTURE CROISEE

La jointure croisée génère un produit cartésien entre les tables. Pour éviter le produit
cartésien, il faut que le nombre de conditions de jointure soit supérieur ou égal à N, avec N
est le nombre de tables jointes.

SELECT count(*) FROM employees


Retourne 107 lignes.

SELECT count(*) FROM departments


Retourne 27 lignes.

SELECT count(*) FROM employees CROSS JOIN departments


Retourne 2889 lignes (107*27).

2022/2023 - Ons BEN ROMDHANE & Adel DAHMANE 37


Notes de cours & TP 6 : Affichage de données à partir de plusieurs tables - Jointure

6.2 REQUETES

Dans chaque cas, on demande d’écrire une requête SQL pour l’opération considérée :

a) Afficher les noms des pays qui appartiennent à la région nommée Americas.

b) Afficher les noms des directeurs ainsi que les noms de leurs départements comme suit :

c) Afficher le résultat suivant pour les employés ayant un salaire >12000.

2022/2023 - Ons BEN ROMDHANE & Adel DAHMANE 38


Notes de cours & TP 6 : Affichage de données à partir de plusieurs tables - Jointure

d) Afficher le numéro, le nom et le numéro du département de chaque employé des


départements 10 ou 20 ou 30 avec le nom de son directeur. Trier le résultat par ordre
croissant selon le numéro du département.

e) Afficher les numéros des départements avec leurs localisations (location_id) et leurs villes
(city). On affiche aussi les localisations qui ne contiennent pas des départements.

2022/2023 - Ons BEN ROMDHANE & Adel DAHMANE 39

Vous aimerez peut-être aussi