Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
© Olfa DRIDI
Plan
1. Les jointures
2. Les sous-interrogations
2 ©
Requêtes sur plusieurs tables
3 ©
Génération d'un Produit Cartésien
EMP (14 lignes) DEPT (4 lignes)
EMPNO ENAME ... DEPTNO DEPTNO DNAME LOC
------ ----- ... ------ ------ ---------- --------
7839 KING ... 10 10 ACCOUNTING NEW YORK
7698 BLAKE ... 30 20 RESEARCH DALLAS
... 30 SALES CHICAGO
7934 MILLER ... 10 40 OPERATIONS BOSTON
ENAME DNAME
------ ----------
KING ACCOUNTING
"Produit BLAKE ACCOUNTING
cartésien : ...
KING RESEARCH
14*4=56 lignes" BLAKE RESEARCH
...
56 rows selected.
©
Qu'est-ce qu'une Jointure ?
• Une jointure sert à extraire des données de plusieurs tables.
©
Types de jointures
En extrayant des données provenant de plusieurs tables, nous
devons les joindre. Plusieurs types de jointures sont définis
selon la nature de la condition:
• une équijointure ou simple jointure ou jointure interne : permet
de réaliser une liaison logique entre 2 tables (l’égalité entre la
CP d’une table et la CE de l’autre)
• une inéquijointure ou thêta jointure : est une jointure dont
l’expression du pivot utilise des opérateurs autre que
l’égalité(<,>,!=,>=,<=, BETWEEN)
• une auto jointure : jointure d’une table à elle-même
• une jointure externe : est une jointure qui favorise une table
sur une autre
6 ©
Extraction d'Enregistrements avec les Equijointures
Donner pour chaque employé son nom et son lieu de travail.
©
Extraction d'Enregistrements avec les Equijointures
• Le rapprochement de chaque ligne de la table emp avec la
ligne de la table dept ayant même numéro de département
permet d'obtenir la liste des employés avec la localité dans
laquelle ils travaillent.
• Ce rapprochement entre deux colonnes appartenant à deux
tables différentes mais ayant le même sens (ici le numéro de
département) et venant vraisemblablement d'une relation 1-
n lors de la conception (ici 1 entité département pour n entités
employés) est assez naturel. C'est pourquoi ce type de jointure
porte le nom de jointure naturelle ou d'équi-jointure.
8 ©
Différencier les noms de Colonne Ambigus
©
Utilisation d'Alias de Table
• Simplifiez les requêtes avec les alias de table.
©
Non-Equijointures
• C’est une jointure dont l’expression du pivot utilise des
opérateurs autre que l’égalité (<,>,!=,>=,<=, BETWEEN)
EMP
EMPNO ENAME SAL SALGRADE
------ ------- ------ GRADE LOSAL HISAL
7839 KING 5000 ----- ----- ------
7698 BLAKE 2850 1 700 1200
7782 CLARK 2450 2 1201 1400
7566 JONES 2975 3 1401 2000
7654 MARTIN 1250 4 2001 3000
7499 ALLEN 1600 5 3001 9999
7844 TURNER 1500
7900 JAMES 950
... "Les salaires (SAL) de la table
14 rows selected. EMP sont compris entre le
salaire minimum (LOSAL) et le
salaire maximum (HISAL) de la
table SALGRADE"
©
Extraction d'Enregistrements avec les Non-Equijointures
©
Jointures externes
• Lorsqu'une ligne d'une table figurant dans une jointure n'a pas
de correspondant dans les autres tables, elle ne satisfait pas
au critère d'équi-jointure et donc ne figure pas dans le résultat
de la jointure.
• Une option permet de faire figurer dans le résultat les lignes
satisfaisant la condition d'équi-jointure plus celles n'ayant pas
de correspondant.
• Cette option s'obtient en accolant (+) au nom de colonne de la
table dans laquelle manquent des éléments, dans la condition
d'équi-jointure.
•
13 ©
Jointures externes
©
Utilisation des Jointures Externes
©
Utilisation des Jointures Externes
• Retrouver les départements n'ayant aucun employé.
17 ©
Auto-jointure: Liaison d'une Table à Elle-même
ü L’auto-jointure est utilisée lorsqu’on est emmené à comparer
entre les valeurs d’une même colonne d’une même table.
ü Il peut être utile de rassembler des informations venant d'une
ligne d'une table avec des informations venant d'une autre
ligne de la même table.
ü Dans ce cas, il faut impérativement renommer au moins l'une
des deux occurrences de la table (ici emp) en lui donnant un
synonyme, afin de pouvoir préfixer sans ambiguïté chaque
nom de colonne.
©
Auto-jointure: Liaison d'une Table à Elle-même
WORKER.ENAME||'WORKSFOR'||MANAG
-------------------------------
BLAKE works for KING
CLARK works for KING
JONES works for KING
MARTIN works for BLAKE
...
13 rows selected.
©
Résumé
Non-équijointure Autojointure
©
Opérateurs ensemblistes
• On construit deux requêtes dont les résultats ont même arité
(même nombre de colonnes et mêmes types d'attributs), et on
les relie par un des mots-clés UNION, INTERSECT ou EXCEPT.
• L'union s'effectue grâce à UNION.
• L'intersection et la différence s'effectuent respectivement grâce
à INTERSECT et EXCEPT.
Exemple :
Donnez tous les noms de région dans la base.
Requête :
SQL> SELECT region FROM Station
UNION
SELECT region FROM Client ;
21 ©
Opérateurs ensemblistes
• Donnez les régions où l'on trouve à la fois des clients et des
stations.
SQL> SELECT region FROM Station
INTERSECT
SELECT region FROM Client ;
• Quelles sont les régions où l'on trouve des stations mais pas
des clients ?
SQL> SELECT region FROM Station
EXCEPT
SELECT region FROM Client ;
22 ©
Syntaxe SQL99
26 ©
Sous-Interrogations
© Olfa DRIDI
Définition
©
Utilisation d'une Sous-Interrogation pour Résoudre un
Problème
Requête principale
sous-interrogation
?
"Quel est le salaire de Ahmed ?"
©
Sous-Interrogations
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);
©
Utilisation d'une Sous-Interrogation
SQL> SELECT ename
2 FROM emp 2975
3 WHERE sal >
4 (SELECT sal
5 FROM emp
6 WHERE empno=7566);
ENAME
----------
KING
FORD
SCOTT
©
Conventions d'Utilisation des Sous-Interrogations
• Placez les sous-interrogations entre parenthèses.
• Placez les sous-interrogations à droite de l'opérateur de
comparaison.
• N'ajoutez jamais de clause ORDER BY à une sous-
interrogation.
• Utilisez les opérateurs mono-ligne avec les sous-interrogations
mono-ligne.
• Utilisez les opérateurs multi-ligne avec les sous-interrogations
multi-ligne.
©
Types de Sous-Interrogations
• Sous-interrogation mono-ligne
Requête principale
Job
ramène
sous-interrogation CLERK (employé)
• Sous-interrogation multi-ligne
Requête principale Job
ramène CLERK (employé)
sous-interrogation
MANAGER (directeur)
• Sous-interrogation multi-colonne
Job Salaire
Requête principale
CLERK 7900
ramène
sous-interrogation MANAGER 7698
©
Sous-Interrogations Mono-ligne
• Ne ramènent qu'une seule ligne
• Utilisent des opérateurs de comparaison mono-ligne
Opérateur Signification
= Egal à
> Supérieur à
>= Supérieur ou égal à
< Inférieur à
<= Inférieur ou égal à
<> Différent de
©
Sous-Interrogations Mono-ligne
Afficher les employés occupant le même poste que l’employé
No. 7369 ?
©
Exécution de Sous-Interrogations Mono-ligne
ENAME JOB
---------- ---------
MILLER CLERK
©
Utilisation de Fonctions de Groupe dans une Sous-
Interrogation
©
Clause HAVING avec Sous-Interrogations
• Oracle Server exécute les sous-interrogations en premier.
• Oracle Server ramène les résultats dans la clause HAVING de
la requête principale.
©
Exemple
• Trouver le poste ayant le salaire moyen le moins élevé .
©
Qu'est-ce Qui ne Va pas dans cet Ordre ? n e
l i g
tl i-
u
m
SQL> SELECT empno, ename
ti on
2 FROM emp
g a
3 WHERE sal =
r ro
4 (SELECT te
MIN(sal)
n
5 FROM - i
emp
s
6 GROUP BYou deptno);
s
ec
av
ERROR: n e
ig
ORA-01427: single-row -lsub-query returns more than
one row n o
o
r m
no rows selectedu
te
ra
p é
O
©
Sous-Interrogation Multi-ligne
Opérateur Signification
IN Egal à un élément quelconque de la liste
Renvoie TRUE si la comparaison avec au
moins un des tuples de la sous
ANY
interrogations renvoie TRUE.
Compare la valeur à toutes les valeurs
ALL ramenées par la sous-interrogation
©
Exemple
• Trouver les employés qui gagnent l’équivalent d’un salaire
minimum de département .
SELECT ename, sal, deptno
FROM emp
WHERE sal IN ( SELECT MIN(sal)
FROM emp
GROUP BY deptno )
©
Utilisation de l'Opérateur ANY dans les Sous-
Interrogations Multi-ligne
©
Utilisation de l'Opérateur ALL dans les Sous-
Interrogations Multi-ligne
©
Résumé
• Les sous-interrogations sont utiles lorsqu'une requête fait
appel à des valeurs inconnues.
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);
©
Questions??
46 ©
JOIN INNER
Intersection de 2 ensembles
SELECT *
FROM A
INNER JOIN
B ON A.key = B.key
LEFT JOIN
47 ©
Jointure gauche (LEFT JOINT sans l’intersection B)
SELECT *
FROM A
LEFT JOIN
B ON A.key = B.key
WHERE B.key IS NULL
RIGHT JOIN
48 ©
Jointure droite (RIGHT JOINT sans l’intersection A)
SELECT *
FROM A
RIGHT JOIN
B ON A.key = B.key
WHERE B.key IS NULL
49 ©
FULL JOIN
Union de 2 ensembles
SELECT * FROM A FULL JOIN B ON A.key = B.key
50 ©