Académique Documents
Professionnel Documents
Culture Documents
Le langage SQL
2
SQL
Voir polycopié:
Introduction à SQL
3
Solution:
SELECT * FROM emp
WHERE sal<(SELECT AVG(sal) FROM emp
WHERE deptno=10);
4
Exécution
SELECT * FROM emp
WHERE sal<(SELECT AVG(sal) FROM emp
WHERE deptno=10);
1- Exécution de la sous-requête
SELECT * FROM emp
WHERE sal<2916,66;
2- Exécution de la requête principale
...
5
Plus généralement:
SELECT colonne(s) FROM table
WHERE exp(s) OPERATEUR (SELECT col(s) FROM table);
Afficher les employés ayant
le même job et salaire que
Une ligne et une colonne Une ligne et SMITH ?
plusieurs
colonnes
Afficher les employés qui
=, !=,>,≥,<,≤ =, != Afficher les employés les
travaillent dans les mêmes
moins payés dans chaque
Plusieurs départements
lignes et uneque SMITH,
Plusieurs lignesdépartement?
et
ALEN et KING ?
colonne plusieurs colonnes
[NOT] IN [NOT] IN
(=, !=,>,≥,<,≤) ANY/ALL
7
IN, la condition est vraie si notre exp est égale à l’une des lignes retournées par
la SR.
op ANY, la condition est vraie si la comparaison (en utilisant l’opérateur op) est
vraie pour n’importe quelle valeur de la relation résultante.
op ALL suivie d’une liste de valeurs, la condition est vraie si la comparaison (en
utilisant l’opérateur op) est vraie pour toute valeur de la relation résultante.
Afficher les employés qui sont mieux payés que n’importe quel
employé du département 10 ?
SELECT * FROM emp
WHERE sal >ANY (SELECT sal FROM emp WHERE deptno=10);
8
IN, la condition est vraie si notre exp est égale à l’une des lignes retournées par
la SR.
op ANY, la condition est vraie si la comparaison (en utilisant l’opérateur op) est
vraie pour n’importe quelle valeur de la relation résultante.
op ALL suivie d’une liste de valeurs, la condition est vraie si la comparaison (en
utilisant l’opérateur op) est vraie pour toute valeur de la relation résultante.
Afficher les employés qui sont mieux payés que tous les employés du
département 10 ?
SELECT * FROM emp
WHERE sal >ALL (SELECT sal FROM emp WHERE deptno=10);
9
Exécution
1- La requête principale fixe une ligne de la table EMP, c’est une ligne dite candidate.
2- Ayant maintenant X.DEPTNO, la sous-requête est exécutée.
3- La condition de la clause WHERE de la requête principale est évaluée, la ligne est
retournée ou non suivant la valeur de la condition (TRUE ou FALSE).
4- Itération des étapes 1, 2 et 3 pour les lignes restantes de la table EMP.
10
Exécution
SELECT * FROM emp X
WHERE sal>
(SELECT AVG(sal) FROM emp Y
WHERE X.deptno=Y.deptno);
Exécution
SELECT * FROM emp X
WHERE sal>
(SELECT AVG(sal) FROM emp Y
WHERE X.deptno=Y.deptno);
La division
- Afficher les a qui sont en relation avec tous les b de S ?
- Pour savoir si a1 est en relation avec tous les b de S, on peut calculer ceci pour
a1:
{Tous les b de S} MINUS {Les b en relation avec a1} = Ø
R
SELECT A FROM R X S
A B
WHERE NOT EXISTS(SELECT B FROM S B
MINUS a1 b1
SELECT B FROM R Y a1 b2 ÷B b1
WHERE Y.A=X.A); b2
a2 b2
13
La division
- Afficher les a qui sont en relation avec tous les b de S ?
SELECT A FROM R X
WHERE NOT EXISTS(SELECT B FROM S
MINUS
SELECT B FROM R Y
WHERE Y.A=X.A);
R
S
A B
B
{b1,b2} / {b1,b2}= Ø a1 b1
{b1,b2} / {b1,b2}= Ø a1 b2 ÷B b1
b2
{b1,b2} / {b2}= {b1} a2 b2
14
FPJ
NF NJ NP P J F
F1 J1 P2 NP NJ NF
F2 J3 P5 P2 J1 F1
F3 J1 P5 P5 J3 F2
F2 J1 P2 F3
15