Previous Up Next
Université Lille 3-Charles de GaulleUFR de Mathématiques Sciences Économiques et Sociales

Chapitre 45  Jointures et sous-requêtes, corrigés

Solution de l'exercice 40
SELECT PRENOM, NOREGION 
  FROM EMP,DEPT
 WHERE EMP.NODEPT = DEPT.NODEPT
;
Solution de l'exercice 41
  SELECT D.NODEPT, D.NOM, E.NOM 
    FROM EMP E, DEPT D
   WHERE E.NODEPT = D.NODEPT 
ORDER BY D.NODEPT 
;
Solution de l'exercice 42
SELECT E.NOM, E.SALAIRE, P.NOM, P.SALAIRE 
  FROM EMP E,EMP P
 WHERE E.NOSUPR = P.NOEMP
   AND E.SALAIRE > P.SALAIRE 
;
Solution de l'exercice 43
SELECT X.NOM, X.SALAIRE, Y.NOM, Y.SALAIRE 
  FROM EMP X, EMP Y
 WHERE X.SALAIRE > Y.SALAIRE
   AND Y.NOM = 'Amartakaldire'
;
Solution de l'exercice 44
SELECT EMP.NOM, DEPT.NOM
  FROM EMP,DEPT
 WHERE EMP.NOM = 'Amartakaldire'
;
Solution de l'exercice 45
SELECT TITRE 
  FROM EMP 
 WHERE NOM ='Amartakaldire' 
;

SELECT NOM
  FROM EMP 
 WHERE TITRE = 'Representant' 
;
Mais aussi... (et c'est mieux !) :
SELECT NOM, TITRE
  FROM EMP
 WHERE TITRE = (SELECT TITRE
                  FROM EMP
                 WHERE NOM = 'Amartakaldire') 
;
Solution de l'exercice 46
  SELECT NOM, SALAIRE, NODEPT
    FROM EMP
   WHERE SALAIRE > ANY (SELECT SALAIRE
                          FROM EMP
                         WHERE NODEPT = 31) 
ORDER BY 3, 2
;
Solution de l'exercice 47
  SELECT NOM, SALAIRE, NODEPT
    FROM EMP
   WHERE SALAIRE > ALL (SELECT SALAIRE
                          FROM EMP
                         WHERE NODEPT = 31) 
ORDER BY 3, 2 
;
Solution de l'exercice 48
SELECT NOM, TITRE
  FROM EMP
 WHERE NODEPT = 31
   AND TITRE IN (SELECT TITRE
                   FROM EMP
                  WHERE NODEPT = 32) 
;
Solution de l'exercice 49
SELECT NOM, TITRE
  FROM EMP
 WHERE NODEPT = 31
   AND TITRE NOT IN (SELECT TITRE
                       FROM EMP
                      WHERE NODEPT = 32)
;
Solution de l'exercice 50
SELECT NOM, TITRE, SALAIRE
  FROM EMP
 WHERE (TITRE, SALAIRE) = (SELECT TITRE, SALAIRE 
                             FROM EMP
                            WHERE NOM = 'Fairant')
;
Solution de l'exercice 51
  SELECT NODEPT, NOM, SALAIRE
    FROM EMP E
   WHERE SALAIRE > (SELECT AVG(SALAIRE)
                      FROM EMP
                     WHERE NODEPT = E.NODEPT)
ORDER BY NODEPT
;
Solution de l'exercice 52
SELECT NOEMP, NOM, PRENOM
  FROM EMP E
 WHERE EXISTS (SELECT NULL 
                 FROM EMP
                WHERE TITRE='Representant'
                  AND NODEPT = E.NODEPT)
;
Solution de l'exercice 53
SELECT NODEPT, NOM AS "Dept"
  FROM DEPT
 WHERE NODEPT NOT IN (SELECT DEPT.NODEPT
                        FROM EMP, DEPT
                       WHERE EMP.NODEPT = DEPT.NODEPT)
;
Solution de l'exercice 54

Avec LEFT JOIN cela donne :
  SELECT D.NODEPT,D.NOM,E.NOM 
    FROM DEPT D LEFT JOIN EMP E 
      ON E.NODEPT=D.NODEPT 
ORDER BY D.NOM
;
(
  SELECT DEPT.NODEPT, DEPT.NOM AS "Dept", EMP.NOM AS "Emp"
    FROM EMP, DEPT
   WHERE EMP.NODEPT = DEPT.NODEPT 
UNION
  SELECT NODEPT, NOM AS "Dept", NULL AS "Emp"
    FROM DEPT 
)
ORDER BY DEPT.NODEPT
;
Mais pour chaque département on a une ligne vide, même quand ce n'est pas nécessaire.

On peut améliorer ainsi :
(
   SELECT DEPT.NODEPT, DEPT.NOM AS "Dept", EMP.NOM AS "Emp"
     FROM EMP, DEPT
    WHERE EMP.NODEPT = DEPT.NODEPT 
 UNION
   SELECT NODEPT, NOM AS "Dept", NULL AS "Emp"
     FROM DEPT 
    WHERE NODEPT NOT IN (SELECT DEPT.NODEPT
                           FROM EMP, DEPT
                          WHERE EMP.NODEPT = DEPT.NODEPT)
)
ORDER BY "Dept"
;
D.Gonzalez (gonzalez@univ-lille3.fr) en date du th , 

Previous Up Next