Vous êtes sur la page 1sur 5

Série jointure 1(la plus facile :p)

1. Récupérer la liste des employés (nom et numéro d'employé) qui ont le même manager
que l'employé avec le nom "CLARK" :

SELECT E.ENAME, E.EMPNO


FROM EMP E
JOIN EMP M ON E.MGR = M.EMPNO
WHERE M.ENAME = 'CLARK';

=> CeSe requête SQL récupère la liste des employés qui ont le même manager que
l'employé avec le nom "CLARK" en effectuant une jointure entre la table EMP et elle-même
pour faire correspondre les employés avec leur manager, puis en filtrant les résultats pour
ne conserver que ceux dont le manager a le nom "CLARK"

2. Obtenir la liste des employés (nom, numéro d'employé) qui ont un salaire supérieur à
leur manager

SELECT E.ENAME, E.EMPNO


FROM EMP E
JOIN EMP M ON E.MGR = M.EMPNO
WHERE E.SAL > M.SAL;

=> CeSe requête SQL récupère la liste des employés dont le salaire est supérieur à celui
de leur manager en effectuant une jointure entre la table EMP et elle-même pour faire
correspondre les employés avec leur manager, puis en filtrant les résultats pour ne
conserver que ceux pour lesquels le salaire de l'employé (E.SAL) est supérieur au salaire
de leur manager (M.SAL)

3. Compter le nombre d'employés dans chaque département et afficher le résultat sous


la forme "Nom du département" "Nombre d'employés"
SELECT D.DNAME AS "Nom du département", COUNT(E.EMPNO) AS "Nombre
d'employés"
FROM DEPT D
LEFT JOIN EMP E ON D.DEPTNO = E.DEPTNO
GROUP BY D.DNAME;

=> CeSe requête SQL compte le nombre d'employés dans chaque département en
uflisant une jointure gauche (LEFT JOIN) entre les tables DEPT et EMP pour faire
correspondre les départements avec les employés. Elle uflise ensuite la foncfon COUNT()
pour compter le nombre d'employés dans chaque département, et GROUP BY pour
regrouper les résultats par nom de département. Le résultat est affiché sous la forme
"Nom du département" "Nombre d'employés"

1. INNER JOIN : Une jointure interne renvoie uniquement les lignes qui ont des
correspondances dans les deux tables. Dans ce cas, cela signifierait que seuls les
départements ayant au moins un employé seraient inclus dans le résultat. Cependant,
la quesfon demandait de compter le nombre d'employés dans chaque département,
y compris ceux qui n'ont aucun employé. Par conséquent, une jointure interne n'était
pas appropriée car elle exclurait ces départements.
2. LEFT JOIN : Une jointure gauche retourne toutes les lignes de la table de gauche (dans
ce cas, la table DEPT) et les correspondances de la table de droite (la table EMP). Si
aucune correspondance n'est trouvée, les colonnes de la table de droite auront des
valeurs NULL. C'est pourquoi nous l'avons uflisé ici, car cela permet de conserver tous
les départements, même ceux sans employé, tout en comptant le nombre d'employés
dans chaque département.
3. RIGHT JOIN : Une jointure droite est similaire à une jointure gauche, mais elle retourne
toutes les lignes de la table de droite et les correspondances de la table de gauche.
Dans ce cas, cela aurait également foncfonné pour obtenir le même résultat, mais cela
aurait inversé l'ordre des tables dans la requête.

4. Compter le nombre d'employés dans chaque département et afficher le résultat sous


la forme "Nom du département" "Nombre d'employés", mais n'inclure que les
départements ayant plus de 3 employés
SELECT D.DNAME AS "Nom du département", COUNT(E.EMPNO) AS "Nombre
d'employés"
FROM DEPT D
LEFT JOIN EMP E ON D.DEPTNO = E.DEPTNO
GROUP BY D.DNAME
HAVING COUNT(E.EMPNO) > 3;

=> CeSe requête SQL compte le nombre d'employés dans chaque département en
effectuant une jointure gauche (LEFT JOIN) entre les tables DEPT et EMP pour inclure tous
les départements, même ceux sans employés. Ensuite, elle groupe les résultats par nom
de département (DNAME) et uflise la clause HAVING pour exclure les départements ayant
trois employés ou moins, puis elle affiche le nom du département et le nombre d'employés
dans ce département

5. Obtenir la liste des employés (nom, numéro d'employé) qui ont le même poste (champ
JOB) que l'employé avec le nom "CLARK

SELECT E.ENAME, E.EMPNO


FROM EMP E
JOIN EMP C ON E.JOB = C.JOB
WHERE C.ENAME = 'CLARK' AND E.ENAME != 'CLARK';

=> CeSe requête SQL récupère la liste des employés qui ont le même poste (JOB) que
l'employé avec le nom "CLARK", en faisant correspondre les employés avec "CLARK" en
foncfon de leur poste, tout en excluant "CLARK" lui-même de la liste des résultats

6. Obtenir la liste des employés (nom, numéro d'employé) qui ont le même poste (champ
JOB) que l'employé avec le nom "CLARK" et qui ont rejoint l'entreprise avant "CLARK"

SELECT E.ENAME, E.EMPNO


FROM EMP E
JOIN EMP C ON E.JOB = C.JOB
WHERE C.ENAME = 'CLARK' AND E.HIREDATE < C.HIREDATE;

=> CeSe requête effectue une jointure entre la table EMP et elle-même en uflisant le
champ JOB pour faire correspondre les employés ayant le même poste que "CLARK."
Ensuite, elle filtre les résultats pour ne conserver que ceux dont la date d'embauche
(HIREDATE) est antérieure à celle de "CLARK."

7. Obtenir la liste des employés (nom et numéro d'employé) qui ont un manager
travaillant dans un département différent du leur

SELECT E.ENAME, E.EMPNO


FROM EMP E
JOIN EMP M ON E.MGR = M.EMPNO
WHERE E.DEPTNO <> M.DEPTNO;

8. Quelle est la requête permeSant de donner le nom du département où travaille


chaque employé en uflisant une équi-jointure (INNER JOIN)

SELECT E.ENAME AS "Nom de l'employé", D.DNAME AS "Nom du département"


FROM EMP E
INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO;

9. Comment construit-on la condifon pour évaluer le grade d'un employé en uflisant


l'opérateur BETWEEN et une relafon de non équi-jointure

SELECT E.ENAME, E.SAL, S.GRADE


FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL ;

=> Dans ceSe requête, nous uflisons l'opérateur BETWEEN pour vérifier si le salaire
(E.SAL) de chaque employé se situe entre les valeurs LOSAL et HISAL de la table SALGRADE.
Cela permet d'évaluer le grade de chaque employé en foncfon de la plage de salaires
définie dans la table SALGRADE. Il s'agit d'une équi-jointure car nous faisons correspondre
les salaires de la table EMP aux plages de salaires de la table SALGRADE à l'aide de
l'opérateur BETWEEN

10. Comment obfent-on le nom du manager de chaque employé en uflisant une jointure
11. Quelle est la différence entre une jointure interne (INNER JOIN) et une jointure gauche
(LEFT JOIN) en termes de lignes retournées

la principale différence est que la jointure interne ne renvoie que les lignes ayant des
correspondances dans les deux tables, tandis que la jointure gauche renvoie toutes les
lignes de la table de gauche et les correspondances de la table de droite, avec des valeurs
NULL pour les lignes sans correspondance dans la table de droite

12. Dans une jointure externe complète (FULL OUTER JOIN), quelles lignes sont incluses
dans le résultat, y compris les correspondances et les non-correspondances

=> Dans une jointure externe complète (FULL OUTER JOIN), toutes les lignes des deux tables
impliquées dans la jointure sont incluses dans le résultat, qu'il y ait des correspondances ou
des non-correspondances entre les tables. Cela signifie que le résultat comprendra à la fois
les lignes correspondantes et les lignes qui n'ont pas de correspondance dans l'une ou l'autre
des tables

Vous aimerez peut-être aussi