0% ont trouvé ce document utile (0 vote)
66 vues30 pages

Jointures SQL : Guide Complet et Pratique

Transféré par

fatmaa.zaibi
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)
66 vues30 pages

Jointures SQL : Guide Complet et Pratique

Transféré par

fatmaa.zaibi
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

Afficher des données de plusieurs tables

Objectifs

A la fin de ce TP, vous pourrez :


• écrire des instructions SELECT afin d'accéder aux
données de plusieurs tables à l'aide d'équijointures
et de non-équijointures
• joindre une table à elle-même à l'aide d'une auto-
jointure
• afficher des données qui ne satisfont généralement
pas à une condition de jointure, à l'aide de jointures
externes
• générer un produit cartésien de toutes les lignes de
plusieurs tables
Obtenir des données de plusieurs tables

EMPLOYEES DEPARTMENTS


Types de jointure

Les jointures conformes à la norme SQL:1999 sont :

• Jointures naturelles Natural Join


• Clause USING Join … Using
• Clause ON Join … On
• Auto-jointures
• Non équijointures
• Jointures externes (gauche ; droite ; complète )
• Jointures croisées
Joindre des tables à l'aide de la syntaxe
SQL : 1999

Utilisez une jointure pour interroger des données


provenant de plusieurs tables :
SELECT [Link], [Link]
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

• La clause NATURAL JOIN est basée sur toutes les


colonnes des deux tables portant le même nom.

• Elle sélectionne les lignes des deux tables dont


les valeurs sont identiques dans toutes les
colonnes qui correspondent.

• Si les colonnes portant le même nom présentent


des types de données différents, une erreur est
renvoyée.
Extraire des enregistrements à l'aide de
jointures naturelles

SELECT department_id, department_name,


location_id, city
FROM departments
NATURAL JOIN locations ;
Créer des jointures avec la clause USING

• Si plusieurs colonnes portent le même nom, et on


veut privilégier une colonne particulière pour la
jointure, la clause NATURAL JOIN est replacée par la
clause USING, laquelle permet de désigner la colonne
qui doit être utilisée pour la jointure.
• Utilisez donc la clause USING pour n'indiquer qu'une
seule colonne lorsque plusieurs colonnes
correspondent.
• N'utilisez pas de nom ou alias de table dans les
colonnes référencées.
• Les clauses NATURAL JOIN et USING sont
mutuellement exclusives.
Joindre des noms de colonne

EMPLOYEES DEPARTMENTS

… …
Clé étrangère Clé primaire
Extraire des enregistrements avec la clause USING

SELECT employee_id, last_name, location_id,


department_id
FROM employees JOIN departments
USING (department_id) ;


Différencier les noms de colonne

• Utilisez des préfixes qui précisent le nom de la table


pour différencier les noms de colonne présents dans
plusieurs tables.
• L'utilisation de préfixes désignant la table améliore
les performances.
• Utilisez des alias de colonne pour distinguer les
colonnes qui présentent des noms identiques, mais
qui résident dans des tables différentes.
• N'utilisez pas d'alias sur les colonnes identifiées
dans la clause USING et indiquées ailleurs dans
l'instruction SQL.
Différencier les noms de colonne

SELECT employees.employee_id, employees.last_name,


departments.location_id, department_id
FROM employees JOIN departments
USING (department_id) ;


Utiliser des alias de table

• Utilisez des alias de table pour simplifier les


interrogations.
• Utilisez des alias de table pour améliorer les
performances.
SELECT e.employee_id, e.last_name,
d.location_id, department_id
FROM employees e JOIN departments d
USING (department_id) ;
Créer des jointures avec la clause ON

• La condition de la jointure naturelle est une


équijointure de toutes les colonnes portant le
même nom.
• Utilisez la clause ON pour indiquer des conditions
arbitraires ou pour désigner les colonnes à joindre.
• La condition de jointure est distincte 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);


Auto-jointures avec la clause ON

EMPLOYEES (WORKER) EMPLOYEES (MANAGER)

… …

MANAGER_ID dans la table WORKER est égal à


EMPLOYEE_ID dans la table MANAGER.
Auto-jointures avec la clause ON

SELECT e.last_name emp, m.last_name mgr


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


Appliquer des conditions supplémentaires
à une jointure

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 ;
Créer des jointures à trois liens avec la
clause ON

SELECT employee_id, city, department_name


FROM employees e
JOIN departments d
ON d.department_id = e.department_id
JOIN locations l
ON d.location_id = l.location_id;


Non-équijointures

EMPLOYEES JOB_GRADES

Le salaire de la table EMPLOYEES


doit être compris entre le salaire
… le plus faible et le salaire le plus
élevé de la table JOB_GRADES.
Extraire des enregistrements à l'aide de
non-équijointures

SELECT e.last_name, [Link], j.grade_level


FROM employees e JOIN job_grades j
ON [Link]
BETWEEN j.lowest_sal AND j.highest_sal;


Jointures externes

DEPARTMENTS EMPLOYEES


Le département 190 ne compte
aucun employé.
Comparaison des jointures INNER et OUTER

• Dans la syntaxe SQL : 1999, la jointure de deux


tables qui renvoie uniquement les lignes qui
correspondent est une jointure interne.
• Une jointure entre deux tables qui renvoie les
résultats de la jointure interne, ainsi que les
lignes de la table de gauche (ou droite) qui ne
correspondent pas, est une jointure externe
gauche (ou droite).
• Une jointure entre deux tables qui renvoie les
résultats d'une jointure interne, ainsi que les
résultats d'une jointure gauche et droite, est une
jointure externe complète.
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, e.department_id, d.department_name


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


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


Produits cartésiens

• Un produit cartésien est généré dans les cas suivants :


– Une condition de jointure est omise
– Une condition de jointure n'est pas valide
– Toutes les lignes de la première table sont jointes à
toutes les lignes de la seconde
• Pour éviter un produit cartésien, incluez toujours une
condition de jointure valide.
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 génère le produit cartésien


de deux tables.

SELECT last_name, department_name


FROM employees
CROSS JOIN departments ;


Synthèse

Dans ce TP, vous avez appris à utiliser des jointures pour


afficher des données de plusieurs tables avec des :

• jointures naturelles
• auto-jointures
• non-équijointures
• jointures externes (gauche ; droite ; complète)
• jointures croisées

Vous aimerez peut-être aussi