Académique Documents
Professionnel Documents
Culture Documents
Université de Sousse
Séance de Cours
Chapitre 2
SQL : Jointure & Requêtes
imbriquées
2022-2023
PLAN
I. Produit cartésien
II. Jointure
II.1 Jointure naturelle
II.2 Auto-jointure
II.3 Jointure Externe
II.4 Thêtajointure
III. Les requêtes imbriquées
III.1 Sous-requête indépendante renvoyant une seul ligne
III.2 Sous-requête indépendante renvoyant plusieurs lignes
III.3 Sous-requête synchronisée avec la requête principale
III.4 Sous-requête avec plusieurs colonnes
V. Les Opérateurs ensemblistes
V.1 Opérateur UNION
V.2 Opérateur INTERSECT
V.3 Opérateur MINUS 2
I. Produit cartésien
Opération permettant de combiner des informations venant de plusieurs tables
Exemple
EMP(EMPNO, ENAME, JOB, HIREDATE , MGR, SAL, COMM, #DEPTNO)
DEPT(DEPTNO, DNAME, LOC)
PROJET(CodeP, NomP)
PARTICIPATION(EMPNO#, CodeP#, Fonction)
SALGRADE(GRADE, LOSAL, HISAL )
3
I. Produit cartésien
Exemple Produit cartésien
SQL> select *
from dept, emp;
4
5
II. Les Jointures
Opération permettant de combiner des informations venant de plusieurs tables.
On peut joindre jusqu'à 256 tables.
Se formule en spécifiant :
1) plusieurs tables dans la clause FROM
2) une condition de jointure dans la clause Where
SELECT ...
FROM nom_table1, nom_table2...
WHERE condition de jointure et prédicat;
Plusieurs types de jointures sont définis selon la nature de la condition de sélection.
Jointure naturelle (condition de jointure est une égalité =),
Jointure externe,
Thêtajointure.
6
II. Les Jointures
II.1 Jointure naturelle
C'est une opération qui permet de réaliser une liaison logique entre deux tables.
La condition de jointure est une égalité de valeurs entre une colonne de la première
table et une colonne de la deuxième.
Exemple 2 :
EMP(EMPNO, ENAME, JOB, HIREDATE , MGR, SAL, COMM, #DEPTNO)
DEPT(DEPTNO, DNAME, LOC)
PROJET(CodeP, NomP)
PARTICIPATION(EMPNO#, CodeP#, Fonction)
Donner les noms des employés et les noms des départements dans les quels ils
travaillent.
ENAME DNAME
SELECT ENAME, DNAME ---------- --------------
SMITH RESEARCH
FROM EMP, DEPT ALLEN SALES
WHERE EMP.DEPTNO = DEPT.DEPTNO; WARD SALES…… 7
II. Les Jointures
II.1 Jointure naturelle
Exemple 3 :
JOURNAL(CODE_J, TITRE, PRIX, TYPE, PERIODE, ADR_J)
DEPOT (N_DEP, NOM_DEP, ADR )
LIVRAISON(N_DEP#, CODE_J, DATE_L, QTE_L, QTE_R )0
Donner le titre des journaux dont le prix>5 et les numéros des dépositaires
auxquels ils sont livrés.
9
II. Les Jointures
II.2 Auto-jointure (Jointure d'une table avec elle-même)
Une même table peut figurer plusieurs fois dans un ordre SELECT.
SQL construit la requête en considérant plusieurs copies de la même table.
Il faut renommer au moins l'une des deux tables en lui attribuant un synonyme
Exemple 5 :
Afficher sur une même ligne les codes et les titres des journaux qui ont
le même prix
10
II. Les Jointures
II.2 Auto-jointure naturelle (Jointure d'une table avec elle-même)
Exemple 6:
Donner la lister les employés qui ont un supérieur, en indiquant pour chacun le nom
de son supérieur
11
EMP EMP SUPE
Une jointure externe favorise une table, appelée table dominante, par rapport
à l'autre appelée table subordonnée
L'opérateur (+) placé après le nom d'une des deux table indique la table
subordonnée (dans la quelle il manque des éléments).
13
II. Les Jointures
II.3 Jointure Externe
Exemple 7:
EMP(EMPNO, ENAME, JOB, HIREDATE , MGR, SAL, COMM, #DEPTNO)
DEPT(DEPTNO, DNAME, LOC)
PROJET(CodeP, NomP)
PARTICIPATION(EMPNO#, CodeP#, Fonction)
Donner la liste des divers départements, avec leurs employés s'ils en ont, sans omettre
les départements sans employés
SELECT ENAME, DNAME ENAME DNAME
FROM EMP (+), DEPT ---------- --------------
CLARK ACCOUNTING
WHERE EMP.DEPTNO= DEPT.DEPTNO; KING ACCOUNTING
MILLER ACCOUNTING
OPERATIONS
……………
14
II. Les Jointures
II.4 Thêtajointure
Est une jointure dont l'expression de la condition de jointure utilise des opérateurs
autre que l'égalité, tel que <, >, <=, >=, !=, between, in..
Exemple 8 :
Liste des journaux avec tous les journaux ayant un prix plus chère
15
II. Les Jointures
II.4 Thêtajointure
Exemple 9:
EMP(EMPNO, ENAME, JOB, HIREDATE , MGR, SAL, COMM, #DEPTNO)
DEPT(DEPTNO, DNAME, LOC)
PROJET(CodeP, NomP)
PARTICIPATION(EMPNO#, CodeP#, Fonction)
Donner la liste des employés, avec tous les employés qui gagnent plus
Exemple :
Donner les journaux ayant un prix supérieur au prix moyen
On ne connait pas le prix moyen
Il faut le chercher par une sous requête.
18
III. Les Sous-Requêtes (Requête Imbriquées)
III.2 Sous-requête indépendante renvoyant plusieurs lignes
Une sous-interrogation peut ramener plusieurs lignes à condition que
l'opérateur de comparaison admet à sa droite un ensemble de valeurs.
Les opérateurs permettant de comparer une valeur à un ensemble de valeurs sont :
IN, ANY ou ALL placés à la suite des opérateurs de comparaison classique
=, !=, <, >, <=, >=.
IN : la condition prend la valeur vraie si elle est vérifiée pour une des valeurs
renvoyées par la sous-requête;
ANY : la comparaison prend la valeur vraie si elle est vraie pour au moins un
élément de l'ensemble (elle est donc fausse si l'ensemble est vide).
ALL : la comparaison prend la valeur vraie si elle est vraie pour tous les
éléments de l'ensemble (elle est vraie si l'ensemble est vide).
19
III. Les Sous-Requêtes (Requête Imbriquées)
Exemples
JOURNAL(CODE_J, TITRE, PRIX, TYPE, PERIODE, ADR_J)
DEPOT (N_DEP, NOM_DEP, ADR )
LIVRAISON(N_DEP#, CODE_J, DATE_L, QTE_L, QTE_R )
3) titres des journaux plus chères que tous les journaux de PARIS
4) titres des journaux plus chères que au moins un des journaux de PARIS
select distinct titre from journal
where prix > ANY (select prix from journal where upper(adr_j )like
'PARIS');
21
III. Les Sous-Requêtes (Requête Imbriquées)
III.3 Sous-requête synchronisée avec la requête principale
Il est possible de synchroniser une sous-interrogation avec l'interrogation
principale
C'est une sous-interrogation faisant référence à une colonne de la table de
l'interrogation principale.
Exemple
Liste des journaux dont le prix supérieur à tous les prix des journaux ayant la
même adresse
select *
from journal j1
where prix > ALL (select prix from journal j2 where j2.adr_j = j1.adr_j );
22
III. Les Sous-Requêtes (Requête Imbriquées)
III.4 Sous-requête avec plusieurs colonnes
Il est possible de comparer le résultat d'un ordre select renvoyant plusieurs
colonnes à une liste d'attributs
Exemple
Liste des journaux ayant le même type et la même période que le journal 115
Select * from journal
where (type, periode) = (select type, periode from journal where code_j = 115);
23
IV. Utilisation des requêtes dans d'autres commandes SQL
IV.1 Création d'une table obtenu comme résultat d'une requête
Syntaxe :
CREATE TABLE table (col type......)
AS SELECT .....
Exemple1
Création d'une table contenant les numéros et les noms des employés ayant un
salaire supérieur à 10000
Create table emp1 as select EMPNO, ENAME from EMP where SAL>10000;
Exemple2
Création d'une table contenant les numéros et les noms des employés ayant
un salaire supérieur au salaire moyen.
CREATE TABLE EMP2 AS SELECT EMPNO, ENAME
FROM EMP
WHERE SAL > (SELECT AVG(SAL) FROM EMP);
24
IV. Utilisation des requêtes dans d'autres commandes SQL
IV.2 Insertion dans une table des enregistrements obtenus comme
résultat d'une requête.
Exemple1
25
V. Les Opérateurs ensemblistes
V.1 Opérateur UNION
Permet de fusionner deux sélections de tables pour obtenir un ensemble
de lignes égal à la réunion des lignes des deux sélections.
Les lignes communes n'apparaîtront qu'une seule fois.
Si on veut conserver les doublons, on peut utiliser la variante UNION ALL
Exemple
Liste des
Liste des journaux de PARIX et de ceux de type TELE journaux
de PARIS
Select titre from journal where adr_j like( 'PARIS')
UNION
Select titre from journal where type like( 'TELE'); Liste des
journaux de
type TELE
26
V. Les Opérateurs ensemblistes
V.2 Opérateur INTERSECT
Permet d'obtenir l'ensemble des lignes communes à deux interrogations.
Exemple
Liste des journaux de PARIX et en même temps de type TELE
Select titre from journal where adr_j like( 'PARIS')
INTERSECT
Select titre from journal where type like( 'TELE');
V.3 Opérateur MINUS
Permet d'obtenir des lignes qui appartiennent à la première requête mais pas
à la seconde
Exemple Liste des
numéros des dépôts ne recevant aucun journal dépôts