Nothing Special   »   [go: up one dir, main page]

Jointures SQL Oracle

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 22

Base de données avec

Oracle
Apprendre, Comprendre et Maîtriser
LDD, LMD, LCD
BD-Oracle

S4 Hassan BADIR

Les Jointures
1 sur 22
Overview 2 sur 22
Le langage LDD: Langage de Définition de Données
Création, modification et Suppression des tables
Le Langage LCD: Langage de Contraintes
Primary Key, Foreign Key, Unique, NULL et Check
Le Langage LMD: Manipuler des données à l’aide de: SELECT
Afficher des données de plusieurs tables
Restreindre et Trier les données
Utiliser des fonctions mono-linge afin de personnaliser la sortie
Afficher des données agrégées à l'aide des fonctions de groupe
Opérateurs Ensemblistes
Sous-Interrogation
Sous-Interrogation Multi-colonnes
Sous-Interrogation Synchronisée

Les Jointures
Les Vues
Les Séquences

Agenda Prévisionnel 3 sur 22


Oracle
Base de données

Les Jointures 4 sur 22


Jointure
v Pour sélectionner des enregistrements provenant de
plusieurs fichiers de données, il est nécessaire d'utiliser
des jointures dans la requête SQL.
v Deux types de jointures peuvent être utilisés dans des
requêtes en code SQL :
– les jointures internes.
– les jointures externes.

Jointure 5 sur 22
Jointure Interne
v Définition
Une jointure interne permet de sélectionner les enregistrements
ayant des correspondances entre deux fichiers joints.

v Exemple
ü pour lister les clients ayant déjà passé des commandes,
il est nécessaire de lier les fichiers "Client" et
"Commande" grâce à une jointure interne. La requête
sélectionnera uniquement les clients liés à au moins un
numéro de commande. Les clients n'ayant jamais passé
de commande ne seront pas listés.

Jointure Interne 6 sur 22


v Format d'utilisation
Jointure Interne
– Trois syntaxes sont possibles :
Syntaxe 1 : Correspondance sur des rubriques identiques présentes dans des fichiers différents (utilisation du WHERE)

SELECT ...
FROM Table1, Table2, Table3
WHERE Table1.NomRubrique1 = Table2.NomRubrique1
Table2.NomRubrique2 = Table3.NomRubrique2

Syntaxe 2 : Correspondance sur des rubriques identiques présentes dans des fichiers différents (utilisation de INNER JOIN)

SELECT ...
FROM Table1 INNER JOIN Table2 ON (Table1.NomRubrique1 = Table2.NomRubrique1),
Table2 INNER JOIN Table3 ON (Table2.NomRubrique2 =
Table3.NomRubrique2)
v Exemple :
– Les codes SQL suivants permettent de sélectionner les clients ayant déjà passé
des commandes :
SELECT CLIENT.NomClient, COMMANDE.NumCde SELECT CLIENT.NomClient, COMMANDE.NumCde
FROM CLIENT, COMMANDE FROM CLIENT INNER JOIN COMMANDE
WHERE CLIENT.NumClient = ON (CLIENT.NumClient =
COMMANDE.NumClient COMMANDE.NumClient)

Jointure Interne 7 sur 22


JOINTURES INTERNES = INNER JOINS. ● EQUIJOINTURES = EQUI JOINS.

INNER JOIN
Une jointure interne ou équijointure est une jointure
avec une condition de jointure contenant un opérateur
d‘égalité.
C’est la plus répandue, elle combine les lignes qui ont
des valeurs équivalentes pour les colonnes de la jointure.

REMARQUE
La directive INNER devant JOIN est optionnelle.
La directive USING(deptno) de la clause JOIN programme une jointure
naturelle (même nom de colonne) restreinte sur la colonne deptno des deux
tables.
Pas d’alias de tables dans la directive USING. .

Jointure Interne: INNER JOIN


8 sur 22
(suite)
Jointure Naturelle / NATURAL JOIN

NATURAL JOIN

NATURAL JOIN
Une jointure naturelle est une jointure entre deux
tables avec une clause NATURAL JOIN. La clause de
jointure est automatiquement construite sur la base
de toutes les colonnes portant le même nom entre les
deux tables.

REMARQUE
Il ne faut pas utiliser d’alias de tables dans la clause SELECT et
WHERE pour les colonnes utilisées dans la jointure naturelle
sinon error ORA-25155.
ORA-25155: column used in NATURAL join cannot have
qualifier.
Cause: Columns that are used for a named-join (either a
NATURAL join or a join with a USING clause) cannot have an
explicit qualifier.

Départements pour lesquels il n'existe pas de salarié.

Jointure Interne: NATURAL JOIN


9 sur 22
(Suite)
Jointure Naturelle / JOIN USING

JOIN USING

JOIN USING
Une jointure naturelle restreinte est une jointure entre
deux tables avec une clause JOIN USING. La clause JOIN
programme une jointure naturelle restreinte à un
ensemble de colonnes.

REMARQUE
Il ne faut pas utiliser d’alias de tables dans la clause SELECT et
WHERE pour les colonnes utilisées dans la jointure naturelle
sinon error ORA-25155.
ORA-25155: column used in NATURAL join cannot have
qualifier.
Cause: Columns that are used for a named-join (either a
NATURAL join or a join with a USING clause) cannot have an
explicit qualifier.

JOIN USING 10 sur 22


Jointure Externe
v Définition
Une jointure externe permet de sélectionner à la fois :
– les enregistrements ayant des correspondances entre les deux fichiers joints.
– les enregistrements n'ayant pas de correspondance dans le premier, le second
ou dans tous les fichiers joints

v Exemple
– pour connaître le montant total dépensé par chaque client :En
utilisant une jointure interne, seuls les clients ayant déjà passé
une commande (dont le montant dépensé sera différent de 0)
seront sélectionnés.
– En utilisant une jointure externe, tous les clients seront
sélectionnés, même ceux n'ayant jamais passé de commande.

Jointure Externe 11 sur 22


v Utilisation
Jointure Externe
– Les différents types de jointures externes:

FULL OUTER JOIN Permet de sélectionner :


§ les enregistrements satisfaisant à la jointure.
§ les enregistrements du premier fichier cité qui ne satisfont pas la jointure. Le nom
du premier fichier cité est placé à gauche de la jointure OUTER JOIN.
§ les enregistrements du second fichier cité qui ne satisfont pas la jointure. Le nom
du second fichier cité est placé à droite de la jointure OUTER JOIN.
LEFT OUTER JOIN Jointure la plus courante. Permet de sélectionner :
§ les enregistrements satisfaisant à la jointure.
§ les enregistrements du premier fichier cité qui ne satisfont pas la jointure. Le nom
du premier fichier cité est placé à gauche de la jointure OUTER JOIN.
RIGHT OUTER JOIN Permet de sélectionner :
§ les enregistrements satisfaisant à la jointure.
§ les enregistrements du second fichier cité qui ne satisfont pas la jointure. Le nom
du second fichier cité est placé à droite de la jointure OUTER JOIN.

Jointure Externe 12 sur 22


v Format d'utilisation
Jointure Externe
– Le syntaxe disponible est la suivante :
Syntaxe : Correspondance sur des rubriques identiques présentes dans des fichiers différents

SELECT ...
FROM (Table1 LEFT/RIGHT/FULL JOIN Table2
ON Table1.NomRubrique1 = Table2.NomRubrique1)
LEFT/RIGHT/FULL JOIN Table3
ON Table2.NomRubrique2 = Table3.NomRubrique2
v Exemple :
SELECT CLIENT.NomClient, SELECT CLIENT.NumClient, COUNT(DISTINCT PRODUIT.Reference) AS NbProduits
FROM CLIENT LEFT OUTER JOIN COMMANDE
SUM(COMMANDE.TotalTTC) AS TotalTTC ON CLIENT.NumClient = COMMANDE.NumClient, COMMANDE JOIN LIGNECDE
FROM CLIENT LEFT OUTER JOIN COMMANDE ON COMMANDE.NumCde = LIGNECDE.NumCde, LIGNECDE JOIN PRODUIT
ON (CLIENT.NumClient = COMMANDE.NumClient) ON LIGNECDE.Reference = PRODUIT.Reference
GROUP BY CLIENT.NumClient, PRODUIT.Reference
GROUP BY CLIENT.NomClient
SELECT CLIENT.NomClient, COUNT(DISTINCT PRODUIT.Reference) AS NbProduits
FROM CLIENT, COMMANDE, LIGNECDE, PRODUIT
WHERE CLIENT.NumClient = COMMANDE.NumClient(+)
AND COMMANDE.NumCde = LIGNECDE.NumCde
AND LIGNECDE.Reference = PRODUIT.Reference
GROUP BY CLIENT.NumClient, PRODUIT.Reference
Le code SQL suivant permet de lister le montant total dépensé par
chaque client. Même les clients n'ayant jamais passé de Le code SQL suivant permet de lister le nombre de produits commandés pour chaque
commande seront sélectionnés. client ayant passé au moins une commande.

Jointure Externe 13 sur 22


JOINTURES EXTERNES / OUTER JOINS

Le sens de la jointure externe LEFT ou RIGHT de la clause OUTER JOIN désigne la table dominante.

A priori, vous êtes fier de vous, mais le DRH vous appelle et vous dit, je vous ai demandé la
liste de tous les départements....
Il a raison effectivement il vous manque 1 département car dans cette jointure avec un
OUTER JOINS opérateur d'égalité, il y a un département qui ne possède aucun salarié mais la condition de
jointure l'a exclu. Nous allons alors remplacer notre INNER JOIN par un OUTER JOIN.
Une jointure externe élargie le résultat d’une jointure
simple (INNER JOINS) et permet en plus d’extraire des
enregistrements qui ne répondent pas aux critères de
jointure.
Nous avons maintenant le département
Une jointure externe renvoie toutes les lignes qui BOSTON qui apparaît.
satisfont la condition de jointure et retourne également Ci-dessous le même résultat mais en
une partie de ces lignes de la table pour laquelle inversant l’écriture de la clause de jointure
aucune des lignes de l’autre ne satisfait la condition de afin de faire un LEFT OUTER JOIN
jointure.
Imaginons, vous devez lister tous les départements de la
société avec le nombre de salarié. Par défaut, on va
utiliser une jointure interne simple (INNER JOIN), et
voyons le résultat.

Jointure Externe: OUTER JOINS


14 sur 22
(Suite)
JOINTURES EXTERNES = FULL OUTER JOINS
Le sens de la jointure externe FULL de la clause OUTER JOIN ignore l'ordre des tables.

RIGHT OUTER JOIN -UNION- LEFT OUTER JOIN = FULL OUTER JOIN.
FULL OUTER JOIN
Une jointure Externe= FULL OUTER JOIN est une
jointure qui élargie le résultat d’une jointure simple
(INNER JOINS) et permet en plus d’extraire des
enregistrements qui ne répondent pas aux critères de
jointure.
renvoie toutes les lignes qui satisfont la condition de
jointure et retourne également une partie de ces lignes
de la table 1 pour laquelle aucune des lignes de la table
2 ne satisfait la condition de jointure et vice versa.

Jointure Externe: FULL OUTER JOIN


15 sur 22
(Suite)
CROSS JOIN / Produit CARTESIEN

Imaginons une table CARTE (13 lignes du 2,3,4,... à l'AS) et une table
COULEUR ( 4 lignes, Cœur, Pique, Trèfle, Carreau).
Produit CARTESIEN Le produit cartésien = Un jeu de 52 cartes = CROSS JOIN.

SXR

CROSS JOIN
Un produit cartésien ou CROSS JOIN est
une jointure entre plusieurs tables où il
n’existe aucune condition de jointure.
Chaque ligne d’une table est associée à
chaque ligne de l’autre table.

REMARQUE
Un produit cartésien est obtenu aussi si la clause WHERE est oubliée.

CROSS JOIN 16 sur 22


AUTO JOINTURE - SELF JOINS

A A

SELF JOIN
Une auto- jointure ou Self-Join est: une jointure d’une table sur
elle même. La table apparait 2 fois dans la clause FROM car la
même table sera parcourue deux fois. Des alias de tables seront
utilisés afin de pouvoir qualifier les colonnes dans la condition de
jointure.

REMARQUE
Généralement dans ce type de jointure, ce sont les Primary Key ou
Foreign Key qui sont utilisées.
Un SELF JOINS peut etre composé soit d'un INNER-JOIN /EQUI-JOIN /
OUTER-JOIN.

Ici la colonne MGR de la table EMP contient l'ID du supérieur hiérarchique et la colonne EMPNO de la table EMP contient l'ID du salarié. Nous
avons listés tous les employés qui ont un supérieur dans le département N° 10.

SELF JOIN 17 sur 22


SEMI JOINS (EXISTS, IN)

IN
EXISTS

SEMI JOINS
Une semi jointure est une jointure entre deux tables, où
seulement une ligne de la première table gauche sera retourné
au plus une fois pour laquelle une correspondance est trouvée
même si dans la deuxième table droite il existe plusieurs
correspondances. (EXISTS, IN).

REMARQUE
L'opérateur EXISTS est toujours suivie par une sous-requête entre
parenthèses.
EXISTS est évalué à TRUE si la requête renvoie au moins une ligne.

Départements pour lesquels il existe au moins un salarié.

SEMI JOINS 18 sur 22


ANTI JOINS (EXISTS, IN)

NOT IN
NOT EXISTS

ANTI JOINS
Une anti jointure est une jointure entre deux tables, où
seulement une ligne de la première table gauche sera retourné
au plus une fois pour laquelle aucune correspondance n’est
trouvée dans la deuxième table droite (NOT EXISTS, NOT IN).

REMARQUE
L'opérateur NOT EXISTS est toujours suivie par une sous-requête
entre parenthèses.
NOT EXISTS est évalué à TRUE si la requête renvoie au moins une
ligne.

Départements pour lesquels il n'existe pas de salarié.

ANTI JOINS 19 sur 22


vObjectif du TP de cette séance
Reprendre la dernière partie du TP FPJ
Schéma(Fournisseur, Produit, Projet, FPJ)
– créer des interrogations qui nécessitent
l'utilisation de différentes jointures

Exercice 3 : présentation de la
Entrainement sur le compte SCOTT 20 sur 22
partie 2
Voir TP
21 sur 22
A vous

Restez chez vous 22 sur 22

Vous aimerez peut-être aussi