0% ont trouvé ce document utile (0 vote)
41 vues20 pages

Corrige SQL

Hh

Transféré par

super you
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
41 vues20 pages

Corrige SQL

Hh

Transféré par

super you
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Le Langage SQL – Corrigé des exercices

1
Exercice

2
3
Exercice

CREATE TABLE DEPT (


DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14) ,
LOC VARCHAR2(13) ) ;

CREATE TABLE EMP (


EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);

4
Exercice

INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');


INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON’);

INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);


INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO EMP VALUES (7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO EMP VALUES (7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
INSERT INTO EMP VALUES (7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
INSERT INTO EMP VALUES (7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
INSERT INTO EMP VALUES (7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
INSERT INTO EMP VALUES (7788,'SCOTT','ANALYST',7566,to_date('13-07-1987'),3000,NULL,20);
INSERT INTO EMP VALUES (7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
INSERT INTO EMP VALUES (7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
INSERT INTO EMP VALUES (7876,'ADAMS','CLERK',7788,to_date('13-07-1987'),1100,NULL,20);
INSERT INTO EMP VALUES (7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
INSERT INTO EMP VALUES (7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO EMP VALUES (7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);
5
Exercice

CREATE TABLE DEPT (


DEPTNO NUMERIC(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR(14) ,
LOC VARCHAR(13) ) ;

CREATE TABLE EMP (


EMPNO NUMERIC(4) CONSTRAINT PK_EMP PRIMARY KEY,
ENAME VARCHAR(10),
JOB VARCHAR(9),
MGR NUMERIC(4),
HIREDATE DATE,
SAL NUMERIC(7,2),
COMM NUMERIC(7,2),
DEPTNO NUMERIC(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);

6
Exercice

INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');


INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON’);

INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,convert(date, '17-12-1980'),800,NULL,20);


INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN',7698,convert(date,'20-2-1981'),1600,300,30);
INSERT INTO EMP VALUES (7521,'WARD','SALESMAN',7698,convert(date,'22-2-1981'),1250,500,30);
INSERT INTO EMP VALUES (7566,'JONES','MANAGER',7839,convert(date,'2-4-1981',104),2975,NULL,20);
INSERT INTO EMP VALUES (7654,'MARTIN','SALESMAN',7698,convert(DATE,'28-9-1981',104),1250,1400,30);
INSERT INTO EMP VALUES (7698,'BLAKE','MANAGER',7839,CONVERT(DATE,'1-5-1981'),2850,NULL,30);
INSERT INTO EMP VALUES (7782,'CLARK','MANAGER',7839,CONVERT(DATE,'9-6-1981'),2450,NULL,10);
INSERT INTO EMP VALUES (7788,'SCOTT','ANALYST',7566,CONVERT(DATE,'13-07-1987'),3000,NULL,20);
INSERT INTO EMP VALUES (7839,'KING','PRESIDENT',NULL,CONVERT(DATE,'17-11-1981'),5000,NULL,10);
INSERT INTO EMP VALUES (7844,'TURNER','SALESMAN',7698,CONVERT(DATE,'8-9-1981'),1500,0,30);
INSERT INTO EMP VALUES (7876,'ADAMS','CLERK',7788,CONVERT(DATE,'13-07-1987'),1100,NULL,20);
INSERT INTO EMP VALUES (7900,'JAMES','CLERK',7698,CONVERT(DATE,'3-12-1981'),950,NULL,30);
INSERT INTO EMP VALUES (7902,'FORD','ANALYST',7566,CONVERT(DATE,'3-12-1981'),3000,NULL,20);
INSERT INTO EMP VALUES (7934,'MILLER','CLERK',7782,CONVERT(DATE,'23-1-1982'),1300,NULL,10);
7
Exercice

1. Les employés des départements 10 et 30.

2. Les employés qui ont des commissions.

3. Nom et le job des employés dont le nom commence par ‘M’.

4. Numéro et le nom des employés dont le nom est composé de 5 caractères dont le

premier est ‘J’ et le dernier ‘S’.

5. Noms, job et salaire des employés triés par job croissant et par salaire décroissant.

6. Noms, salaires et commissions des employés ayant un salaire inférieur à 2000 triés par
8
Exercice
1. Les employés des départements 10 et 30.
SELECT * FROM EMP WHERE deptno in (10, 30);

2. Les employés qui ont des commissions.


SELECT * FROM EMP WHERE comm is not null;

3. Nom et le ename,
SELECT job des job
employés
FROMdont
EMPleWHERE
nom commence par ‘M’.
ename like 'M%';

4. Numéro et le nom des employés dont le nom est composé de 5 caractères dont le premier est ‘J’ et
leSELECT empno, ename FROM EMP WHERE ename like 'J___S';
dernier ‘S’.

SELECT ename, job, sal FROM EMP ORDER BY job ASC, sal DESC;
5. Noms, job et salaire des employés triés par job croissant et par salaire décroissant.

6. Noms, salaires et commissions des employés ayant un salaire inférieur à 2000 triés par ordre
SELECT ename, sal, comm FROM EMP WHERE sal < 2000 ORDER BY comm ASC;
croissant de commission.
9
Exercice

7. Liste des départements qui n’ont aucun employé.

8. Liste des employés. Pour chaque employé, son nom et celui de son manager.

9. Nom des employés qui ne travaillent pas dans le même département que leur manager.

10. Liste des employés travaillant à "DALLAS"

11. Donner la liste des employés avec le nom de leur manager et la localité dans laquelle ils

travaillent.

10
Exercice

7. Liste des départements qui n’ont aucun employé.


SELECT DEPT.deptno, dname FROM DEPT LEFT JOIN EMP ON DEPT.deptno =
EMP.deptno
WHERE EMP.empno IS NULL;
SELECT deptno, dname FROM dept
MINUS
SELECT Dept.deptno, dname FROM EMP, DEPT WHERE EMP. deptno = DEPT.deptno;

8. Liste des employés. Pour chaque employé, son nom et celui de son manager.
SELECT SUBALTERNE.ENAME, SUPERIEUR.ENAME
FROM EMP SUBALTERNE INNER JOIN EMP SUPERIEUR
ON SUBALTERNE.MGR = SUPERIEUR.EMPNO;

9. Nom des employés qui ne travaillent pas dans le même département que leur manager.
SELECT SUB.ENAME FROM EMP SUB, EMP SUP
WHERE SUB.MGR = SUP.EMPNO AND SUB.DEPTNO <> SUP.DEPTNO;

11
Exercice

10. Liste des employés travaillant à "DALLAS"

SELECT EMP.* FROM EMP JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO


WHERE LOC='DALLAS'

11. Donner la liste des employés (sans le président) avec le nom de leur manager et la localité dans laquelle
ils travaillent.
SELECT E.EMPNO, E.ENAME, Manager.ENAME, D.LOC
FROM EMP E JOIN EMP Manager ON E.MGR = Manager.EMPNO JOIN DEPT D ON
E.DEPTNO = D.DEPTNO;

11-modifié 🡺 Donner la liste de tous les employés avec le nom de leur manager et la localité dans laquelle
ils travaillent.
SELECT E.EMPNO, E.ENAME, Manager.ENAME, D.LOC
FROM EMP E LEFT OUTER JOIN EMP Manager ON E.MGR = Manager.EMPNO JOIN DEPT D ON
E.DEPTNO = D.DEPTNO;
12
Exercice

12. Nombre d’employés par département.

13. Masse salariale et somme des commissions par département.

14. Nombre de fonctions (JOB) différentes.

15. Nombre d’employés et masse salariale par département uniquement pour les départements
ayant un nombre d’employés supérieur à 3.
16. Nom des vendeurs dont la commission est inférieure à 25 % de leur salaire.

17. Nombre d'employés ayant une commission.

18. Salaire moyen par fonction (sans tenir compte des commissions).

19. Total des salaires du département SALES.

20. Nom, fonction et salaire de l'employé qui a le salaire le plus grand.

21. Afficher les managers (MGR) de plus d’une personne

22. Quel est le département ayant le plus d'employés? 13


Exercice

12. Nombre d’employés par département.


SELECT e.deptno, dname , count(*) FROM DEPT d, EMP e
WHERE d.deptno = e.deptno GROUP BY e.deptno, dname;

13. Masse salariale et somme des commissions par département.


SELECT e.deptno, dname , sum(sal) Salaires, sum(nvl(comm, 0)) Commissions
FROM DEPT d, EMP e WHERE d.deptno = e.deptno
GROUP BY e.deptno, dname;

14. Nombre de fonctions (JOB) différentes.


SELECT COUNT(DISTINCT JOB) FROM EMP;

15. Nombre d’employés et masse salariale par département uniquement pour les départements
ayant un nombre
SELECT d’employés
E.DEPTNO, DNAME supérieur à 3.
, COUNT(*) "NBRE EMPLOYÉS", SUM(SAL) SALAIRES
FROM DEPT D JOIN EMP E ON D.DEPTNO = E.DEPTNO
GROUP BY E.DEPTNO, DNAME
HAVING COUNT(*) > 3;
14
Exercice

16. Nom des vendeurs dont la commission est inférieure à 25 % de leur salaire.
SELECT ENAME FROM EMP WHERE COMM < .25 * SAL;

17. Nombre d'employés ayant une commission.


SELECT COUNT(EMPNO) FROM EMP WHERE COMM IS NOT NULL;

18. Salaire
SELECT moyen
JOB,par fonctionFROM
AVG(SAL) (sans tenir
EMPcompte
GROUPdes
BYcommissions).
JOB;

19. SELECT
Total des SUM(SAL) FROM EMP SALES.
salaires du département E, DEPT D
WHERE E.DEPTNO = D.DEPTNO AND DNAME = 'SALES';

SELECT ENAME, JOB, SAL


20. Nom, fonction et salaire de l'employé qui a le salaire le plus grand.
FROM EMP WHERE SAL = (SELECT MAX(SAL) FROM EMP); Solution1
SELECT * FROM (
Select EMPNO, JOB, SAL AS Salaire, Rank() OVER (ORDER BY SAL desc) AS Rang FROM EMP)
WHERE rang =1
Solution2 15
Exercice

21. Afficher les managers (MGR) de plus d’une personne


SELECT MGR, COUNT(*) MGR COUNT(*)
FROM EMP 7788 1
GROUP BY MGR
7782 1
HAVING COUNT(*) > 1;
7698 5
MGR COUNT(*) 7566 2
---------------------- ---------------------- 7902 1
7839 3 - 1
7698 5
7839 3
7566 2

22. Quel est le département ayant le plus d'employés?


SELECT DEPTNO, COUNT(*)
FROM EMP
GROUP BY DEPTNO
DEPTNO COUNT(*)
HAVING COUNT(*) = (SELECT MAX(COUNT(*))
FROM EMP 30 6
GROUP BY DEPTNO) ;
16
Exercice

23. Lister les noms et numéros des employés n'ayant pas de subordonnés

SELECT ENAME, EMPNO FROM EMP X WHERE NOT EXISTS (SELECT MGR
FROM EMP WHERE X.EMPNO = MGR)

17
Exercice

24. Liste des départements qui n’ont aucun employé.

25. Nom des employés qui gagnent plus que JONES.

26. Nom des employés qui ont la même fonction que JONES.

27. Nom des employés qui ont le même manager que CLARK.

28. Nom et fonction des employés qui ont la même fonction et le même manager que TURNER.

29. Nom des employés qui ont été embauchés avant tous les employés du département n° 10.

30. Nom et le salaire des employés ayant un salaire supérieur à celui de leur manager.

18
Exercice

24. Liste des départements qui n’ont aucun employé.


SELECT deptno, dname FROM DEPT WHERE deptno not in ( SELECT distinct deptno
FROM EMP);

25. Nom des employés qui gagnent plus que JONES.


SELECT ENAME FROM EMP WHERE SAL > (SELECT SAL FROM EMP WHERE
ENAME='JONES');

26. Nom des employés qui ont la même fonction que JONES.
SELECT ENAME FROM EMP
WHERE JOB = (SELECT JOB FROM EMP WHERE ENAME='JONES’)
AND ENAME <> 'JONES';

27. Nom desENAME


SELECT employésFROM
qui ont
EMPle même manager que CLARK.
WHERE MGR = (SELECT MGR FROM EMP WHERE ENAME='CLARK’)
AND ENAME <> 'CLARK';

19
Exercice

28. Nom et fonction des employés qui ont la même fonction et le même manager que TURNER.
SELECT ENAME FROM EMP WHERE (JOB, MGR) IN (SELECT JOB, MGR FROM
EMP WHERE ENAME = 'TURNER') AND ENAME <> 'TURNER';

29. Nom des employés qui ont été embauchés avant tous les employés du département n° 10.
SELECT ENAME FROM scott.EMP
WHERE HIREDATE < ALL (SELECT HIREDATE FROM EMP WHERE DEPTNO = 10);

30. Nom et salaire des employés ayant un salaire supérieur à celui de leur manager.
SELECT ENAME, SAL FROM EMP E1 WHERE SAL >= (SELECT SAL
FROM EMP E2 WHERE E1.MGR =E2.EMPNO) ORDER BY SAL;

20

Vous aimerez peut-être aussi