12.07.2015 Views

TP 1 - CORRIGE - Site de Bertrand LIAUDET

TP 1 - CORRIGE - Site de Bertrand LIAUDET

TP 1 - CORRIGE - Site de Bertrand LIAUDET

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>TP</strong> 1 - <strong>CORRIGE</strong>Les requêtes <strong>de</strong> consultation1. Affichez tous les départements avec leurs attributsSELECT *FROM <strong>de</strong>pt ;CP : <strong>de</strong>ptno2. Affichez tous les employés avec leurs attributsSELECT * FROM emp ;CP : empno3. Tous les employés avec leurs salaires triés par salaire décroissantsSELECT empno, ename, salFROM empORDER BY sal DESC ;CP : empno4. Tous les employés du département 30 trié par ordre alphabétiqueSELECT empno, ename, <strong>de</strong>ptnoFROM empWHERE <strong>de</strong>ptno = 30ORDER BY ename ;CP : empno5. Tous les employés qui ne sont pas managers et qui sont embauchés en 1981SELECT empno, ename, job hiredateFROM empWHERE job != 'MANAGER'AND hiredate like '% 1981';CP : empno6. Tous les jobs <strong>de</strong> la sociétéSELECT distinct jobFROM emp;CP : job7. Tous les managers <strong>de</strong>s départements 20 et 30SELECT empno, enameFROM empWHERE job = 'MANAGER'AND (<strong>de</strong>ptno = 20 or <strong>de</strong>ptno = 30);CP : empnoEPF 4 sur titre - BASE DE DONNÉES - page 1/7 - <strong>Bertrand</strong> <strong>LIAUDET</strong>


8. Tous les employés ne travaillant pas dans le département 30 et qui soit ont un salaire > à2800, soit sont manager.SELECT empno, ename, <strong>de</strong>ptno, sal, jobFROM empWHERE <strong>de</strong>ptno != 30AND (sal > 2800 or job = 'MANAGER');CP : empno9. Tous les numéros <strong>de</strong> département non vi<strong>de</strong>s (dans lesquels au moins un employé travaille)SELECT distinct <strong>de</strong>ptnoFROM emp;CP : <strong>de</strong>ptno10. Tous les numéros <strong>de</strong> supérieurs hiérarchiques (ceux qui ont au moins un subordonné).SELECT distinct mgrFROM emp;CP : mgr11. Tous les salaires, commissions et totaux (salaire + commission) <strong>de</strong>s ven<strong>de</strong>ursSELECT empno, ename, sal, comm, sal + commFROM empWHERE job = 'SALESMAN';CP : empno12. Tous les salaires, commissions et totaux (salaire + commission) <strong>de</strong>s employésSELECT empno, ename, sal, comm, sal + NVL(comm ;0)FROM emp;CP : empno13. Combien d'employés dans la sociétéSELECT count(*)FROM emp ;CP : /14. Combien <strong>de</strong> ven<strong>de</strong>urs dans la sociétéSELECT count(*)FROM empWHERE job = 'SALESMAN';CP : /15. Combien <strong>de</strong> jobs différents dans la sociétéSELECT count (distinct job)FROM emp;CP : /EPF 4 sur titre - BASE DE DONNÉES - page 2/7 - <strong>Bertrand</strong> <strong>LIAUDET</strong>


16. Salaires minimum, maximum et moyen <strong>de</strong> la sociétéSELECT min(sal), avg(sal)FROM emp;CP : /17. Nombres d'employés par profession avec le salaire moyen, minimum et maximumSELECT job, count(*), min(sal), avg(sal)FROM empGROUP BY job;CP : job18. Salaire moyen <strong>de</strong>s ven<strong>de</strong>ursSELECT avg(sal)FROM empWHERE job = 'SALESMAN';CP : /19. Salaires max dans chaque département (par numéro <strong>de</strong> département)SELECT <strong>de</strong>ptno, max(sal)FROM empGROUP BY <strong>de</strong>ptno;CP : <strong>de</strong>ptno20. Pourcentage moyen <strong>de</strong> la commission <strong>de</strong>s ven<strong>de</strong>urs par rapport à leur salaireSELECT avg (comm / sal )FROM empWHERE job = 'SALESMAN';CP : /21. Quels sont les départements dans lesquels travaillent plus <strong>de</strong> <strong>de</strong>ux personnes et quel est lesalaire moyen dans ces départementsSELECT <strong>de</strong>ptno, count(*), max(sal)FROM empGROUP BY <strong>de</strong>ptnoHAVING count(*) > 2;CP : <strong>de</strong>ptno22. Nombre d'employés par département et profession avec le salaire moyen, min et maxSELECT <strong>de</strong>ptno, job, count(*), avg(sal), min(sal), max(sal)FROM empGROUP BY <strong>de</strong>ptno, job;CP : <strong>de</strong>ptno, job23. Noms <strong>de</strong>s départements dans lesquels le salaire moyen dépasse 2000EPF 4 sur titre - BASE DE DONNÉES - page 3/7 - <strong>Bertrand</strong> <strong>LIAUDET</strong>


SELECT <strong>de</strong>pt.<strong>de</strong>ptno, dname, avg(sal)FROM emp, <strong>de</strong>ptWHERE emp.<strong>de</strong>ptno = <strong>de</strong>pt.<strong>de</strong>ptnoGROUP BY emp.<strong>de</strong>ptnoHAVING avg(sal) > 2500 ;CP : <strong>de</strong>pt.<strong>de</strong>ptno24. Tous les employés avec les informations <strong>de</strong> leur département.SELECT empno, ename, d.<strong>de</strong>ptno, dnameFROM emp e, <strong>de</strong>pt eWHERE e.<strong>de</strong>ptno = d.<strong>de</strong>ptno ;CP : empno25. Tous les employés avec leur fonction, leur chef et sa fonction.SELECT e.empno, e.ename, e.job, echef.ne, echef.ename,echef.jobFROM emp e, emp echefWHERE emp.mgr = echef.empno;CP : e.empno26. Tous les employés avec leur fonction, les informations <strong>de</strong> leur département, leur chef, safonction et les informations <strong>de</strong> son département.SELECT e.empno, e.ename, e.job, d.*, echef.ne,echef.ename, echef.job, dchef.*FROM emp e, <strong>de</strong>pt d, emp echef, <strong>de</strong>pt dchefWHERE e.<strong>de</strong>ptno = d.<strong>de</strong>ptnoAND e.mgr = echef.empnoAND echef.<strong>de</strong>ptno = dchef.<strong>de</strong>ptno;CP : e.empno27. Tous les employés travaillant à DallasSELECT empno, ename, locFROM emp, <strong>de</strong>ptWHERE emp.<strong>de</strong>ptno = <strong>de</strong>pt.<strong>de</strong>ptnoAND <strong>de</strong>pt.loc = 'DALLAS';CP : empno28. Tous les noms et dates d'embauche <strong>de</strong>s employés embauchés avant leur supérieurhiérarchique avec le nom et la date d'embauche <strong>de</strong> leurs managersSELECT e1.empno, e1.ename Employé, e1.hiredate,echef.ename "Sup hiér.", echef.hiredateFROM emp e1, emp echefWHERE e1.mgr = echef.empnoAND e1.hireate < echef.hiredate;CP : e1.empnoEPF 4 sur titre - BASE DE DONNÉES - page 4/7 - <strong>Bertrand</strong> <strong>LIAUDET</strong>


29. Tous les employés ne travaillant pas dans le même département que leur supérieurhiérarchiqueSELECT e1.empno, echef.enameFROM emp e1, emp echefWHERE e1.mgr = echef.empnoAND e1.<strong>de</strong>ptno != echef.<strong>de</strong>ptno;CP : e1.empno30. Tous les supérieurs hiérarchiques avec les informations sur leur département.SELECT distinct echef.empno, echef.ename, echef.job,dchef.*FROM emp e, emp echef, <strong>de</strong>pt dchefWHERE e.mgr = echef.empnoAND echef.<strong>de</strong>ptno = dchef.<strong>de</strong>ptno;CP : echef.empno31. Tous les employés qui gagnent plus que la moyenneSELECT empno, ename, salFROM empWHERE sal > (SELECT avg (sal)FROM emp);CP : empnoOu bien :SELECT empno, ename, sal, moyFROM emp, ( SELECT avg (sal) moy FROM emp) tmoyWHERE sal > moy32. Tous les employés embauchés la même année que FordSELECT empno, ename, substr (hiredate, 7, 4)FROM empWHERE substr (hiredate, 7, 4) IN (SELECT substr(hiredate, 7, 4)FROM empWHERE ename = 'FORD');CP : empnoou encoreSELECT empno, ename, substr (hiredate, 7, 4)FROM empWHERE EXISTS (SELECT *FROM emp e2WHERE ename = 'FORD'AND substr (emp.hiredate, 7, 4) =substr(e2.hiredate, 7, 4)EPF 4 sur titre - BASE DE DONNÉES - page 5/7 - <strong>Bertrand</strong> <strong>LIAUDET</strong>


);CP : empnoou encoreSELECT distinct e1.empno, e1.ename, substr (e1.hiredate,7, 4), e2.empno, e2.ename, substr(e2.hiredate,7,4)FROM emp e1, emp e2WHERE e2.ename='FORD'AND substr(e1.hiredate,7,4) = substr(e2.hiredate,7,4);CP : e1.empno33. Tous les employés ayant le même manager que ClarkSELECT empno, ename, mgrFROM empWHERE mgr IN (SELECT mgrFROM empWHERE ename = 'CLARCK');CP : empnoou encoreSELECT empno, ename, mgrFROM empWHERE EXISTS(SELECT *FROM empWHERE ename = 'CLARCK'AND emp.mgr = e2.mgr);CP : empnoou encoreSELECT distinct e1.empno, e1.ename, e1.mgrFROM emp e1, emp e2WHERE e2.ename='CLARK'AND e1.mgr = e2.mgr;CP : e1.empno34. Liste <strong>de</strong>s employés travaillant à Chicago et ayant le même job qu'AllenSELECT empno, ename, jobFROM emp, <strong>de</strong>ptWHERE emp.<strong>de</strong>ptno = <strong>de</strong>pt.<strong>de</strong>ptnoAND loc = 'CHICAGO'AND job = (SELECT jobFROM empWHERE ename = 'ALLEN');EPF 4 sur titre - BASE DE DONNÉES - page 6/7 - <strong>Bertrand</strong> <strong>LIAUDET</strong>


CP : empno35. Tous les employés du département Research embauchés le même jour que quelqu'un dudépartement SalesSELECT empno, ename, dname, hiredateFROM emp, <strong>de</strong>ptWHERE emp.<strong>de</strong>ptno = <strong>de</strong>pt.<strong>de</strong>ptnoAND dname = 'RESEARCH'AND hiredate IN (SELECT hiredateFROM emp, <strong>de</strong>ptWHERE emp.<strong>de</strong>ptno = <strong>de</strong>pt.<strong>de</strong>ptnoAND dname = 'SALES');CP : empnoou encoreSELECT distinct e1.empno, e1.ename, d1.dname, e1.hiredateFROM emp e1, <strong>de</strong>pt d1, emp 2, <strong>de</strong>pt d2WHERE e1.<strong>de</strong>ptno = d1.<strong>de</strong>ptnoAND d1.dname = 'RESEARCH'AND e2.<strong>de</strong>ptno = d2.<strong>de</strong>ptnoAND d2dname = 'SALES'AND e1.hiredate = e2.hiredate ;CP : e1.empno36. Tous les employés qui n’ont pas <strong>de</strong> subordonnés (on donnera 3 versions : avec IN, avec unopérateur ensembliste classique et avec une jointure externe).SELECT empno, enameFROM empWHERE empno NOT IN (SELECT mgrFROM emp) ;ou encoreSELECT empno, enameFROM empMINUSSELECT echef.empno, echef.nomFROM emp e, emp echef,WHERE e.mgr = echef.empno;ou encoreSELECT echef.ne, echef.nomFROM emp e right JOIN emp echefON e.mgr = echef.empnoWHERE e.empno is NULL;EPF 4 sur titre - BASE DE DONNÉES - page 7/7 - <strong>Bertrand</strong> <strong>LIAUDET</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!